本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用自动部署嵌套应用程序 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队列中,队列会启动工作函数来删除消息。
在此解决方案设置中,AWSSAMCLI用作AWS CloudFormation 堆栈的接口。AWSSAM模板会自动部署嵌套应用程序。父SAM模板调用子模板,父 CloudFormation 堆栈部署子堆栈。每个子堆栈都构建AWSSAM CloudFormation 模板中定义的AWS资源。
构建并部署堆栈。
身份验证 CloudFormation 堆栈包含 Amazon Cognito。
产品 CloudFormation 堆栈包含 Lambda 函数和 Amazon Gateway API
购物 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服务,请运行
有关设置凭证的更多信息,请参阅身份验证和访问凭证。 | DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
克隆AWSSAM代码存储库。 |
| DevOps 工程师 |
部署模板,以初始化项目。 | 要初始化项目,请运行 | DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
查看AWSSAM应用程序模板。 | 查看嵌套应用程序模板。此示例使用以下嵌套应用程序模板:
| DevOps 工程师 |
查看父级模板。 | 查看将调用嵌套应用程序模板的模板。在此示例中,父模板是 | DevOps 工程师 |
编译并生成AWSSAM模板代码。 | 使用 AWS SAMCLI,运行以下命令。
| DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
部署应用程序。 | 要启动用于创建嵌套应用程序 CloudFormation 堆栈并在AWS环境中部署代码的SAM模板代码,请运行以下命令。
此命令将提示几个问题。用 | DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
验证堆栈。 | 要查看AWSSAM模板中定义的AWS CloudFormation 堆栈和AWS资源,请执行以下操作:
| DevOps 工程师 |
相关资源
参考
教程和视频
其他信息
所有代码都准备就绪后,该示例包含以下目录结构:
sam_stacks — 此文件夹包含
shared.py
层。层是包含库、自定义运行时系统或其他依赖项的文件存档。利用层,您可在函数中使用库,而不必将库包含在部署包中。product-mock-service— 此文件夹包含所有与产品相关的 Lambda 函数和文件。
shopping-cart-service— 此文件夹包含所有与购物相关的 Lambda 函数和文件。