使用 AWS SAM 自动部署嵌套应用程序 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS SAM 自动部署嵌套应用程序

由 Rahul Sharad Gaikwad 博士 (AWS)、Dmitry Gulin (AWS)、Ishwar Chauthaiwale (AWS) 和 Tabby Ward (AWS) 编写

代码存储库:aws-sam-nested-stack-sam ple

环境:PoC 或试点

技术:现代化;无服务器; DevOps

工作负载:所有其他工作负载

Amazon Web Services:AWS Serverless Application Repository

Summary

在 Amazon Web Services (AWS) 上,AWS Serverless Application Model (AWS SAM) 是一个开源框架,它提供用于表达函数、API、数据库和事件源映射的速记语法。每个资源只需几行,您就可以定义所需应用程序并使用 YAML 对其进行建模。在部署过程中,SAM 将 SAM 语法转换并扩展为 AWS CloudFormation 语法,您可以使用该语法更快地构建无服务器应用程序。

AWS SAM 简化了 AWS 平台上的无服务器应用程序的开发、部署和管理。它提供标准化框架、更快的部署、本地测试功能、资源管理、与开发工具的无缝集成以及支持社区。这些功能使其成为了高效构建无服务器应用程序的宝贵工具。

该模式使用 AWS SAM 模板自动部署嵌套应用程序。嵌套应用程序是另一应用程序中的应用程序。父应用程序调用其子应用程序。这些是无服务器架构的松耦合组件。 

使用嵌套应用程序,您可重复使用独立编写和维护但使用 AWS SAM 和 Serverless Application Repository 组成的服务或组件,从而快速构建高度复杂的无服务器架构。嵌套应用程序可帮助您构建更强大的应用程序,避免重复工作,并确保整个团队和组织的一致性和最佳实践。为了演示嵌套应用程序,该模式部署了示例 AWS 无服务器购物车应用程序

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • 现有的虚拟私有云(VPC)和子网

  • 集成开发环境,例如 AWS Cloud9 或 Visual Studio Code(有关更多信息,请参阅 AWS 上的构建工具

  • 使用 pip install wheel 安装 Python wheel 库(如果尚未安装)

限制

  • 无服务器应用程序中可以嵌套的最大应用程序数量为 200。

  • 嵌套应用程序的最大参数数量可以是 60。

产品版本

  • 此解决方案基于 AWS SAM 命令行界面 (AWS SAM CLI) 版本 1.21.1 构建,但此架构应适用于更高版本的 AWS SAM CLI。

架构

目标技术堆栈

  • Amazon API Gateway

  • AWS SAM

  • Amazon Cognito

  • Amazon DynamoDB

  • AWS Lambda

  • Amazon Simple Queue Service (Amazon SQS) 队列

目标架构

下图显示了用户如何通过调用 API 发出购物服务请求。用户的请求(包括所有必要信息)将发送给 Amazon API Gateway 和 Amazon Cognito 授权机构,后者为 API 执行身份验证和授权机制。

当在 DynamoDB 中添加、删除或更新项目时,事件会被放入 DynamoDB Streams 中,DynamoDB Streams 又会启动 Lambda 函数。为了避免在同步工作流中立即删除旧项目,将消息放到 SQS 队列中,该队列会启动工作函数来删除消息。

从 API Gateway 到 Lambda 函数再到 DynamoDB 和产品服务的 POST 和 PUT 操作。

在此解决方案设置中,AWS SAM CLI 充当 AWS CloudFormation 堆栈的接口。AWS SAM 模板自动部署嵌套应用程序。父 SAM 模板调用子模板,父 CloudFormation 堆栈部署子堆栈。每个子堆栈都构建 AWS SAM CloudFormation 模板中定义的 AWS 资源。

使用包含父堆栈和三个子 CloudFormation 堆栈的 AWS SAM CLI 的四步流程。
  1. 构建并部署堆栈。

  2. 身份验证 CloudFormation 堆栈包含 Amazon Cognito。

  3. 产品 CloudFormation 堆栈包含 Lambda 函数和 Amazon API Gateway

  4. 购物 CloudFormation 堆栈包含 Lambda 函数、亚马逊 API Gateway、SQS 队列和亚马逊 DynamoDB 数据库。

工具

工具

  • Amazon API Gateway 可帮助您创建、发布、维护、监控和保护任何规模的 REST、HTTP 和 WebSocket API。

  • AWS CloudFormation 可帮助您设置 AWS 资源,快速一致地配置这些资源,并在 AWS 账户和区域的整个生命周期中对其进行管理。

  • Amazon Cognito 为您的 Web 和移动应用程序提供身份验证、授权和用户管理。

  • Amazon DynamoDB 是一项完全托管的 NoSQL 数据库服务,可提供快速、可预测和可扩展的性能。

  • AWS Lambda 是一项计算服务,可帮助您运行代码,而无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。

  • AWS Serverless Application Model (AWS SAM) 是一个帮助用于构建 AWS Cloud中无服务器应用程序的开源框架。

  • Amazon Simple Queue Service (Amazon SQS) 提供了一个安全、持久且可用的托管队列,它可帮助您集成和分离分布式软件系统与组件。

代码

此模式的代码可在 GitHub AWS SAM 嵌套堆栈示例存储库中找到。

操作说明

任务描述所需技能

安装 AWS SAM CLI。

要安装 AWS SAM CLI,请参阅 AWS SAM 文档中的说明。

DevOps 工程师

设置 AWS 凭证

要设置 AWS 凭证以便 AWS SAM CLI 可以代表您调用 Amazon Web Services,请运行 aws configure 命令并按照提示进行操作。

$aws configure AWS Access Key ID [None]: <your_access_key_id> AWS Secret Access Key [None]: your_secret_access_key Default region name [None]: Default output format [None]:

有关设置凭证的更多信息,请参阅身份验证和访问凭证

DevOps 工程师
任务描述所需技能

克隆 AWS SAM 代码存储库。

  1. 输入以下命令,克隆本模式的 aws sam 嵌套堆栈示例存储库

    git clone https://github.com/aws-samples/aws-sam-nested-stack-sample.git
  2. 通过输入以下命令导航到克隆的目录。

    cd aws-sam-nested-stack-sample
DevOps 工程师

部署模板,以初始化项目。

要初始化项目,请运行 SAM init 命令。当系统提示您选择模板来源时,选择 Custom Template Location

DevOps 工程师
任务描述所需技能

查看 AWS SAM 应用程序模板。

查看嵌套应用程序模板。此示例使用以下嵌套应用程序模板:

  • auth.yaml — 此模板设置了与身份验证相关的资源,例如 Amazon Cognito 和 AWS Systems Manager Parameter Store。

  • product-mock.yaml — 此模板部署与产品相关的资源,例如 Lambda 函数和 Amazon API Gateway。

  • shoppingcart-service.yaml — 此模板用于设置与购物车相关的资源,例如 AWS 身份和访问管理(IAM)、DynamoDB 表和 Lambda 函数。

DevOps 工程师

查看父级模板。

查看将调用嵌套应用程序模板的模板。在此示例中,父模板是 template.yml。所有单独的应用程序都嵌套在单父模板 template.yml 中。

DevOps 工程师

编译和构建 AWS SAM 模板代码。

使用 AWS SAM CLI,运行以下命令。

sam build
DevOps 工程师
任务描述所需技能

部署应用程序。

要启动用于创建嵌套应用程序 CloudFormation 堆栈并在 AWS 环境中部署代码的 SAM 模板代码,请运行以下命令。

sam deploy --guided --stack-name shopping-cart-nested-stack --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND

此命令将提示几个问题。用 y 回答所有问题。

DevOps 工程师
任务描述所需技能

验证堆栈。

要查看在 AWS SAM 模板中定义的 AWS CloudFormation 堆栈和 AWS 资源,请执行以下操作:

  1. 登录 AWS 管理控制台,然后导航到CloudFormation控制台。

  2. 确认已列出父堆栈和子堆栈。

    在此示例中,sam-shopping-cart 是调用嵌套身份验证、产品和购物堆栈的父堆栈。

    产品堆栈输出产品 API 网关网址链接。

DevOps 工程师

相关资源

参考

教程和视频

其他信息

所有代码都准备就绪后,该示例包含以下目录结构:

  • sam_stacks — 此文件夹包含 shared.py 层。层是包含库、自定义运行时系统或其他依赖项的文件存档。利用层,您可在函数中使用库,而不必将库包含在部署包中。

  • product-mock-service— 此文件夹包含所有与产品相关的 Lambda 函数和文件。

  • shopping-cart-service— 此文件夹包含所有与购物相关的 Lambda 函数和文件。