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

相关推荐
returnthem几秒前
K8S核心组件
云原生·容器·kubernetes
亚马逊云开发者7 小时前
开了 GuardDuty 一周,发现 EC2 被人暴力破解 SSH 了
aws
csdn_aspnet13 小时前
GitOps宣言:Kubernetes配置的版本化革命
云原生·容器·kubernetes·gitops
xmlhcxr15 小时前
Docker容器常用操作与私有仓库部署实验笔记
docker·云原生·eureka
白胡子16 小时前
Kubernetes NFS 接入方案
云原生
河码匠19 小时前
Kubernetes YAML 详解之网络服务二( Ingress、IngressClasses)
云原生·容器·kubernetes
blackorbird19 小时前
一个来自法国的基于K8s的规模化扫描集群
云原生·容器·kubernetes
掘根20 小时前
【微服务即时通讯】消息存储子服务2
微服务·云原生·架构
风向决定发型丶20 小时前
浅谈K8S的Label和Annotation
云原生·容器·kubernetes