概述
实战使用 AWS Serverless Application Model (AWS SAM) 来发布应用程序。您可以使用 AwS CodeDeploy 和 AwS CodePipeline 自动进行部署。最后,您将配置应用程序部署以支持流量转移部署模型。流量转移让您可以逐步部署新的应用程序。如果 Devops 团队正在维护应用程序,那么流量转移部署模型就是一种发布应用程序更新的方法,可以最大程度地减少对客户体验的干扰并提供快速回滚功能。自动化流量转移部署模型可以提高 DevOps 团队的交付速度,从而支持持续集成和持续部署 (CI/CD) 的概念。AWS提供了一套开发人员工具,可以支持CI/CD 实施。可以利用 AWS Serverless Application Model Command Line Interface (AWS SAM CL) 在 AwS Lambda 上构建无服务器应用程序。然后,您可以使用 AwS CodeDeploy 和 AwS CodePipeline 为您的应用程序实施并自动部署流量转移部署模型。
目标
- 构建并在本地测试您的应用程序。
- 打包并部署您的应用程序。
- 自动化 CI/CD 管道以支持流量转移部署。
- 执行流量转移部署。
实战
AWS SAM元素简介
使用 AWS SAM 构建应用程序并使用 SAM 本地验证应用程序的功能。验证后,将应用程序部署到 AWS Lambda 并测试您的部署。
该图描述了将数据从 CodeCommit 拉取到 CodePipeline 的管道。随后调用 AWS CodeBuild, AWS CodeBuild 调用 AWS CloudFormation 來创建 Amazon AP/Gateway 端点和使用 Node.js 创建的 Lambda 函数。最后,它使用 AWS CodeDeploy 部署应用程序。
Shell
cd ~/environment/
sam init --runtime python3.9
- Build
Shell
cd ./sam-app
sam build
成功构建后,在本地测试应用程序。使用 AWS SAM 来测试您的应用程序。查看测试输出时,请查找状态码 200。
Plaintext
sam local invoke HelloWorldFunction --event events/event.json
- 启动程序
Plaintext
sam local start-api -p 8080
使用 AWS SAM 命令 start-api 在本地将您的应用程序部署到一个临时容器中,以便可以浏览 Web 应用程序。通过浏览应用程序,您可以执行简单的手动测试。
预期输出:
使用 AWS SAM 部署应用程序
设置bucket名称
Plaintext
labBucket=lab4-sam-kaliarch-v1
创建bucket
Plaintext
aws s3 mb s3://$labBucket
预期输出:您的存储桶名称与以下示例不同。
大宝应用程序并上传至S3
Plaintext
sam package --output-template-file packaged.yaml --s3-bucket $labBucket
预期输出:
部署程序包
Plaintext
sam deploy --template-file packaged.yaml --stack-name sam-app --capabilities CAPABILITY_IAM
预期输出:此输出被截断了。
Plaintext
aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[].Outputs[?OutputKey==`HelloWorldApi`]' --output table
预期输出:
执行 AWS SAM deploy 将启动 AWS CloudFormation 堆栈构建。堆栈创建成功完成后,终端会显示堆栈输出摘要。
在Cloudformtion查看堆栈
使用AWS CodePipeline自动执行应用程序部署
在本任务中,您需要创建一个 CI/CD 管道来自动部署应用程序。您需要创建一个使用 AwS Codecommit、 AwS CodeBuild 和 AwS cloudFormation 的三阶段管道。您的初始 HelloWorld 应用程序使用 Python 语言进行初始化,但您已选择更改为 Node.js进行部署。您将使用新的 SAM 部署覆盖现有的 SAM 部署。新的 SAM 项目位于 cloudy 环境中。您需要为部署添加一个新的存储桶,并进行相应的代码更改,然后才能自动执行部署。
Plaintext
cd ~/environment/lab4-app
echo $labBucket
替换bucket名称,
Plaintext
git status
git add .
git commit -m "Updated buildspec file with bucket name"
git push
为 LAB4 应用程序创建持续交付管道
现在,您可以完成部署阶段。当前配置将会创建一个 AWS CloudFormation 更改集,但您仍然需要运行它才能将流量转移到应用程序的新版本。您可以在此处插入手动批准环节,用于确认将要部署的更改。但现在不需要进行这一操作。请创建一个操作以便立即运行更改集,并将流量转移到新版本。
总结
AWS Serverless Application Model(SAM)是一种开发、测试和部署无服务器应用程序的开源框架。它基于AWS CloudFormation,并提供了简化和扩展CloudFormation模板的功能。使用SAM,您可以定义无服务器应用程序的资源,例如Lambda函数、API Gateway端点和DynamoDB表,以及与这些资源相关的事件和权限。SAM还提供本地调试和部署工具,使开发人员能够在本地环境中构建和测试无服务器应用程序。
CI/CD(Continuous Integration/Continuous Deployment)是一种软件开发实践,通过自动化构建、测试和部署流程,实现快速、可靠的应用程序交付。在无服务器应用程序的上下文中,CI/CD流程可以自动构建和部署SAM应用程序,并确保每次更改都经过适当的测试。CI/CD流水线通常包括源代码管理、构建和测试、部署到开发/测试环境、自动化测试和部署到生产环境等阶段。
通过结合使用SAM和CI/CD,您可以实现无服务器应用程序的快速迭代和交付。在CI/CD流水线中,您可以使用AWS CodeCommit或其他源代码管理工具存储和管理SAM应用程序的源代码。然后,使用AWS CodeBuild或其他持续集成工具来构建、测试和打包SAM应用程序。构建成功后,可以使用AWS CloudFormation部署SAM应用程序到开发/测试环境。最后,通过自动化测试和部署步骤,将SAM应用程序部署到生产环境。
在CI/CD流程中,您可以使用AWS CodePipeline作为流水线工具,它可以集成各个阶段,并提供可视化和自动化的流程。您可以定义流水线的各个阶段,并指定每个阶段的输入和输出。例如,您可以定义一个源代码阶段,将SAM应用程序的源代码作为输入,然后在构建阶段中执行构建和测试操作。构建成功后,可以将构建产物传递给部署阶段,以便将SAM应用程序部署到指定的环境。