Amazon SAM 模板解剖学 - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon SAM 模板解剖学

Amazon SAM 模板文件严格遵循 Amazon CloudFormation 模板文件的格式,该格式在《Amazon CloudFormation 用户指南》模板剖析中进行了描述。 Amazon SAM 模板文件和 Amazon CloudFormation 模板文件之间的主要区别如下:

  • 转换声明。 Amazon SAM 模板文件需要声明 Transform: AWS::Serverless-2016-10-31。此声明将 Amazon CloudFormation 模板文件标识为 Amazon SAM 模板文件。有关转换的更多信息,请参阅《Amazon CloudFormation 用户指南》中的转换

  • 全局变量部分。Globals部分是独一无二的 Amazon SAM。它定义了所有无服务器函数和 API 通用的属性。所有 AWS::Serverless::FunctionAWS::Serverless::Api、和 AWS::Serverless::SimpleTable 资源都继承 Globals 部分中定义的属性。有关该部分的更多信息,请参阅 Amazon SAM 模板的全局变量部分

  • 资源部分。在 Amazon SAM 模板中,该Resources部分可以包含 Amazon CloudFormation 资源和 Amazon SAM 资源的组合。有关 Amazon CloudFormation 资源的更多信息,请参阅《Amazon CloudFormation 用户指南》中的Amazon 资源和属性类型参考。有关 Amazon SAM 资源的更多信息,请参阅Amazon SAM 资源和属性参考

  • 参数部分。Parameters 部分中声明的对象会导致 sam deploy --guided 命令向用户显示附加提示。有关已声明对象和相应提示的示例,请参阅 Amazon SAM CLI 命令参考中的 sam deploy

Amazon SAM 模板文件的所有其他部分对应于同名的 Amazon CloudFormation 模板文件部分。

YAML

以下示例显示 YAML 格式的模板片段。

Transform: AWS::Serverless-2016-10-31 Globals: set of globals Description: String Metadata: template metadata Parameters: set of parameters Mappings: set of mappings Conditions: set of conditions Resources: set of resources Outputs: set of outputs

模板部分

Amazon SAM 模板可以包括几个主要部分。仅 TransformResources 部分为必需。

您可以按任意顺序包含模板部分。但是,如果使用语言扩展,则应在无服务器转换AWS::LanguageExtensions之前(即之前AWS::Serverless-2016-10-31)添加,如以下示例所示:

Transform: - AWS::LanguageExtensions - AWS::Serverless-2016-10-31

在构建模板时,使用以下列表中显示的逻辑顺序可能会有所帮助。这是因为某一部分中的值可能引用前一部分中的值。

转换(必需)

对于 Amazon SAM 模板,必须包含此部分,其值为AWS::Serverless-2016-10-31

其它变换是可选的。有关转换的更多信息,请参阅《Amazon CloudFormation 用户指南》中的转换

全局变量(可选)

所有无服务器函数、API 和简单表通用的属性。所有 AWS::Serverless::FunctionAWS::Serverless::Api、和 AWS::Serverless::SimpleTable 资源都继承 Globals 部分中定义的属性。

本节是独一无二的 Amazon SAM。 Amazon CloudFormation 模板中没有相应的部分。

Description(可选)

一个描述模板的文本字符串。

本节与 Amazon CloudFormation 模板Description部分直接对应。

元数据(可选)

提供有关模板的其他信息的对象。

本节与 Amazon CloudFormation 模板Metadata部分直接对应。

Parameters(可选)

要在运行时 (创建或更新堆栈时) 传递到模板的值。您可引用模板的 ResourcesOutputs 部分中的参数。

使用 sam deploy 命令 --parameter-overrides 参数传入的值以及配置文件中的条目优先于 Amazon SAM 模板文件中的条目。有关 sam deploy 命令的更多信息,请参阅 Amazon SAM CLI 命令参考中的 sam deploy。有关配置文件的更多信息,请参阅Amazon SAMCLI 配置文件

Mappings(可选)

可用来指定条件参数值的密钥和关键值的映射,与查找表类似。可以通过使用 ResourcesOutputs 部分中的 Fn::FindInMap 内置函数将键与相应的值匹配。

本节与 Amazon CloudFormation 模板Mappings部分直接对应。

条件(可选)

用于控制是否创建某些资源或者是否在堆栈创建或更新过程中为某些资源属性分配值的条件。例如,您可以根据堆栈是用于生产环境还是用于测试环境来按照条件创建资源。

本节与 Amazon CloudFormation 模板Conditions部分直接对应。

Resources(必需)

堆栈资源及其属性,如 Amazon Elastic Compute Cloud (Amazon EC2) 实例或 Amazon Simple Storage Service (Amazon S3) 存储桶。您可引用模板的 ResourcesOutputs 部分中的资源。

该部分与 Amazon CloudFormation 模板的 Resources 部分类似。在 Amazon SAM 模板中,除 Amazon SAM 资源外,此部分还可以包含 Amazon CloudFormation 资源。

Outputs(可选)

在您查看堆栈的属性时返回的值。例如,您可以为 S3 存储桶名称声明输出,然后调用 aws cloudformation describe-stacks Amazon Command Line Interface (Amazon CLI) 命令查看该名称。

该部分与 Amazon CloudFormation 模板的 Outputs 部分直接对应。

后续步骤

要下载和部署包含 Amazon SAM 模板文件的示例无服务器应用程序,请参阅开始使用 Amazon SAM并按照中的教程:部署 Hello World 应用程序说明进行操作。