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

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

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

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

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

环境:PoC 或试点

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

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

AWS服务:AWS无服务器应用程序 Repository

Summary

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

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

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

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

先决条件和限制

先决条件

  • 一个活跃的AWS账户

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

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

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

限制

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

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

产品版本

  • 此解决方案基于AWSSAM命令行接口 (AWSSAMCLI) 版本 1.21.1 构建,但此架构应适用于更AWSSAMCLI高版本。

架构

目标技术堆栈

  • 亚马逊API网关

  • AWS SAM

  • Amazon Cognito

  • Amazon DynamoDB

  • AWSLambda

  • 亚马逊简单队列服务 (AmazonSQS) 队列

目标架构

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

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

POST以及从API网关到 Lambda 函数再到 DynamoDB 和产品服务的PUT操作。

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

使用AWSSAMCLI父堆栈和三个子 CloudFormation 堆栈的四步流程。
  1. 构建并部署堆栈。

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

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

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

工具

工具

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

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

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

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

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

  • AWS无服务器应用程序模型 (AWSSAM) 是一个开源框架,可帮助您在云中构建无服务器应用程序。AWS

  • Amazon Simple Queue Service (AmazonSQS) 提供安全、耐用且可用的托管队列,可帮助您集成和分离分布式软件系统和组件。

代码

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

操作说明

任务描述所需技能

安装AWSSAMCLI。

要安装 AWS SAMCLI,请参阅AWSSAM文档中的说明。

DevOps 工程师

设置AWS凭据。

要设置AWS凭据以便AWSSAMCLI可以代表您调用AWS服务,请运行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 工程师
任务描述所需技能

克隆AWSSAM代码存储库。

  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 工程师
任务描述所需技能

查看AWSSAM应用程序模板。

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

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

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

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

DevOps 工程师

查看父级模板。

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

DevOps 工程师

编译并生成AWSSAM模板代码。

使用 AWS SAMCLI,运行以下命令。

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

部署应用程序。

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

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

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

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

验证堆栈。

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

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

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

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

    产品堆栈提供产品API网关URL链接作为输出。

DevOps 工程师

相关资源

参考

教程和视频

其他信息

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

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

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

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