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

概述

实战使用 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应用程序部署到指定的环境。

相关推荐
有一个好名字4 小时前
zookeeper分布式锁模拟12306买票
分布式·zookeeper·云原生
Anna_Tong6 小时前
云原生大数据计算服务 MaxCompute 是什么?
大数据·阿里云·云原生·maxcompute·odps
运维&陈同学7 小时前
【模块一】kubernetes容器编排进阶实战之基于velero及minio实现etcd数据备份与恢复
数据库·后端·云原生·容器·kubernetes·etcd·minio·velero
liuxuzxx9 小时前
Istio-2:流量治理之简单负载均衡
云原生·kubernetes·istio
戎码江湖13 小时前
如何利用AWS监听存储桶并上传到tg bot
aws
sealaugh3213 小时前
aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发
笔记·学习·aws
在云上(oncloudai)13 小时前
AWS Transfer 系列:简化文件传输与管理的云服务
aws
小扳18 小时前
微服务篇-深入了解 MinIO 文件服务器(你还在使用阿里云 0SS 对象存储图片服务?教你使用 MinIO 文件服务器:实现从部署到具体使用)
java·服务器·分布式·微服务·云原生·架构
aherhuo1 天前
kubevirt网络
linux·云原生·容器·kubernetes
catoop1 天前
K8s 无头服务(Headless Service)
云原生·容器·kubernetes