AWS 无服务器应用程序模型 (SAM)是用于在 AWS 上开发和部署无服务器应用程序的框架。

博客的关键要点

  • 了解 SAM 和 SAM 模板

  • SAM CLI 的不同功能

了解SAM

[了解 SAM CLI](https://res.cloudinary.com/practicaldev/image/fetch/s--eeJax4O2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/fx5njw29picutsyo5s04.png)

AWS 无服务器应用程序模型 (SAM)是一个开源框架,包括 -

  • SAM 模板

  • SAM CLI

SAM 通过在创建新的 SAM 应用程序时提供不同的引导起点来帮助开发人员。

[SAM 快速入门模板](https://res.cloudinary.com/practicaldev/image/fetch/s--f48-JFSg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:/ /dev-to-uploads.s3.amazonaws.com/uploads/articles/q4qzm3uav0yb7gle6sqz.png)

SAM CLI 支持各种编程运行时作为开发人员入门的选择。最近的更新是 NodeJS 16.x。

[SAM 支持的运行时](https://res.cloudinary.com/practicaldev/image/fetch/s--qD4v64cb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/l677ch8u13ftc4gmbp85.png)

SAM 模板

这是AWS CloudFormation 模板的抽象版本,它促进了无服务器应用程序的基础设施即代码 (IaC) 实践,并在后台使用AWS CloudFormation进行所有 AWS 资源预置。

SAM 将模板转换为_AWS CloudFormation 模板,以便以后可以通过创建新的 CloudFormation 堆栈或更新现有的 CloudFormation 堆栈来部署它。

SAM 模板 还可以更轻松地使用预定义的资源类型定义不同的 AWS 无服务器服务 -

  • AWS::Serverless::Function

  • AWS::Serverless::LayerVersion

  • AWS::Serverless::Api

  • AWS::Serverless::HttpApi

  • AWS::Serverless::SimpleTable相当于AWS::DynamoDB::Table

  • AWS::Serverless::Application

  • AWS::Serverless::StateMachine

SAM 模板 使用各种预管理的 AWS IAM 策略来授权各种资源。 DynamoDB CRUD 操作的托管策略之一。

[SAM 模板示例](https://res.cloudinary.com/practicaldev/image/fetch/s--0KAImxOe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/wclqee8u3brtyw3cpczw.png)

上述示例 SAM 模板描述了 AWS Lambda 函数和 AWS API Gateway REST API 以及部署阶段。

** CLI 单独**

CLI 是一种工具,可帮助开发人员开始使用无服务器应用程序开发,并帮助开发人员使用 CI/CD 管道构建、部署、测试、监控以及打包工件以用于 production ready 部署。

SAM CLI 具有不同的 CLI 命令,例如 -

  • sam init- init 命令用于创建新的 SAM 应用程序,CLI 命令可帮助开发人员通过基于交互式调查问卷的演练来设置 SAM 应用程序,步骤包括从模板中选择、语言选择和 Lambda 函数部署类型。

您可以在此处找到文档。

  • sam build- build CLI 命令用于使用模板构建您的 SAM 工作站,并根据正确的资源对其进行验证。这会在.aws-sam/build目录中构建工件,该目录可用于部署到 AWS 账户中。

您可以在此处找到文档。

  • sam deploy- 部署 CLI 命令用于将构建的工件部署到 AWS 账户。这个底层使用 AWS CloudFormation 来部署资源,使用 CreateStack 操作或 UpdateStack 操作。sam deploy具有不同的标志sam deploy --guidedsam deploy --changeset,用于通过交互式调查问卷进行部署或单独部署变更集。

您可以在此处找到文档。

  • sam local generate-event- 每当在本地使用个 AWS Lambda 函数时,当从特定事件源(例如 Amazon S3 操作、AWS API 网关、 AWS SNS、AWS SQS 等等。

您可以在此处找到文档。

  • sam local invoke- 本地调用命令使用事件调用特定 Lambda 函数并退出。这有助于针对模拟事件测试 Lambda 函数逻辑。

您可以在此处找到文档。

  • sam package- package CLI 命令创建代码和依赖项的 zip 文件,并上传到指定的 AWS S3 构建工件存储桶。这是由sam deploy在内部执行的。

您可以在此处找到文档

  • sam pipeline bootstrap- SAM 以 CLI 交互方式帮助使用 SAM 管道设置 CI/CD 管道。这会设置不同的暂存环境,并且 CLI 还会根据 CI/CD 提供程序在项目目录中生成所需的 CI/CD 工作流模板。

您可以在此处找到文档

  • sam sync-SAM Accelerate功能用于立即将代码部署到开发 AWS 账户以及实时监控。

您可以在此处找到文档。

  • sam logs- logs 命令用于获取由 AWS Lambda 函数生成的 CloudWatch 日志。

您可以在此处找到文档。

  • sam delete- 如果要删除 SAM 应用程序,可以使用此命令将其删除,该命令在后台使用 CloudFormation DeleteStack 操作。

收尾

SAM 有助于轻松构建无服务器应用程序,对于熟悉 AWS CloudFormation 的开发人员来说,使用 SAM 模板 更加容易,即使是 SAM init 也可以帮助您开始使用其中一个模板并在其之上构建并扩展它不同的 SAM CLI 命令。

您可以参考我在 AWS UG Colombo 4 月聚会上关于使用 IaC 构建无服务器应用程序的会议,其中我演示了如何将 IaC 与 AWS SAM 一起使用。

使用 IaC 构建无服务器应用程序 - Jones Zachariah Noel N - YouTube

本次会议重点介绍使用 AWS SAM for IaC 构建的无服务器应用程序。在本次会议中,我们将了解什么是 IaC 以及 IaC 如何帮助构建 Serverles...

图标youtube.com

您还可以参考我的 AWS Summit India 2022 会议关于使用 SAM Accelerate 和 SAM Pipelines 构建无服务器应用程序幻灯片。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐