实战AWS Serverless Application Model (AWS SAM) 和 CI/CD 管道部署无服务器应用程序

2024年 2月 11日 47.7k 0

概述

实战使用 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 并测试您的部署。

img

该图描述了将数据从 CodeCommit 拉取到 CodePipeline 的管道。随后调用 AWS CodeBuild, AWS CodeBuild 调用 AWS CloudFormation 來创建 Amazon AP/Gateway 端点和使用 Node.js 创建的 Lambda 函数。最后,它使用 AWS CodeDeploy 部署应用程序。

cd ~/environment/
sam init --runtime python3.9

img

  • Build
cd ./sam-app
sam build

img

成功构建后,在本地测试应用程序。使用 AWS SAM 来测试您的应用程序。查看测试输出时,请查找状态码 200。

sam local invoke HelloWorldFunction --event events/event.json

img

  • 启动程序
sam local start-api -p 8080

使用 AWS SAM 命令 start-api 在本地将您的应用程序部署到一个临时容器中,以便可以浏览 Web 应用程序。通过浏览应用程序,您可以执行简单的手动测试。

预期输出:

img

img

img

使用 AWS SAM 部署应用程序

设置bucket名称

labBucket=lab4-sam-kaliarch-v1

创建bucket

aws s3 mb s3://$labBucket

预期输出:您的存储桶名称与以下示例不同。

大宝应用程序并上传至S3

sam package --output-template-file packaged.yaml --s3-bucket $labBucket

预期输出:

img

部署程序包

sam deploy --template-file packaged.yaml --stack-name sam-app --capabilities CAPABILITY_IAM

预期输出:此输出被截断了。

img

aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[].Outputs[?OutputKey==`HelloWorldApi`]' --output table

预期输出:

执行 AWS SAM deploy 将启动 AWS CloudFormation 堆栈构建。堆栈创建成功完成后,终端会显示堆栈输出摘要。

img

img

在Cloudformtion查看堆栈

img

使用AWS CodePipeline自动执行应用程序部署

在本任务中,您需要创建一个 CI/CD 管道来自动部署应用程序。您需要创建一个使用 AwS Codecommit、 AwS CodeBuild 和 AwS cloudFormation 的三阶段管道。您的初始 HelloWorld 应用程序使用 Python 语言进行初始化,但您已选择更改为 Node.js进行部署。您将使用新的 SAM 部署覆盖现有的 SAM 部署。新的 SAM 项目位于 cloudy 环境中。您需要为部署添加一个新的存储桶,并进行相应的代码更改,然后才能自动执行部署。

cd ~/environment/lab4-app
echo $labBucket

替换bucket名称,

git status
git add .
git commit -m "Updated buildspec file with bucket name"
git push

img

为 LAB4 应用程序创建持续交付管道

img

img

img

现在,您可以完成部署阶段。当前配置将会创建一个 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应用程序部署到指定的环境。

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论