本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS SAM 模板解剖学
AWS SAM 模板文件严格遵循 CloudFormation 模板文件的格式,该格式在《AWS CloudFormation 用户指南》的模板剖析中进行了描述。 AWS SAM 模板文件和 CloudFormation 模板文件之间的主要区别如下:
-
转换声明。 AWS SAM 模板文件需要声明
Transform: AWS::Serverless-2016-10-31。此声明将 CloudFormation 模板文件标识为 AWS SAM 模板文件。有关转换的更多信息,请参阅《AWS CloudFormation 用户指南》中的转换。 -
全局变量部分。该
Globals部分是独一无二的 AWS SAM。它定义了所有无服务器函数通用的属性,以及。 APIs所有AWS::Serverless::Function、、AWS::Serverless::ApiAWS::Serverless::CapacityProvider、AWS::Serverless::HttpApiAWS::Serverless::SimpleTable、和AWS::Serverless::StateMachine资源都继承本Globals节中定义的属性。有关该部分的更多信息,请参阅 AWS SAM 模板的全局变量部分。 -
资源部分。在 AWS SAM 模板中,该
Resources部分可以包含 CloudFormation 资源和 AWS SAM 资源的组合。有关 CloudFormation 资源的更多信息,请参阅AWS CloudFormation 用户指南中的AWS 资源和属性类型参考。有关 AWS SAM 资源的更多信息,请参阅AWS SAM 资源和财产。
AWS SAM 模板文件的所有其他部分对应于同名的 CloudFormation 模板文件部分。
YAML
以下示例显示 YAML 格式的模板片段。
Transform: AWS::Serverless-2016-10-31 Globals:set of globalsDescription:StringMetadata:template metadataParameters:set of parametersMappings:set of mappingsConditions:set of conditionsResources:set of resourcesOutputs:set of outputs
模板部分
AWS SAM 模板可以包括几个主要部分。仅 Transform 和 Resources 部分为必需。
您可以按任意顺序包含模板部分。但是,如果使用语言扩展,则应在无服务器转换之前(即 AWS::Serverless-2016-10-31 之前)添加 AWS::LanguageExtensions,如下例所示:
Transform: - AWS::LanguageExtensions - AWS::Serverless-2016-10-31
在您构建模板时,使用以下列表中显示的逻辑顺序可能会很有用。这是因为某一部分中的值可能引用前一部分中的值。
- 转换(必需)
-
对于 AWS SAM 模板,必须包含此部分,其值为
AWS::Serverless-2016-10-31。其它变换是可选的。有关转换的更多信息,请参阅《AWS CloudFormation 用户指南》中的转换。
- 全局变量(可选)
-
所有无服务器函数和简单表都通用的属性。 APIs所有
AWS::Serverless::Function、、AWS::Serverless::ApiAWS::Serverless::CapacityProvider、AWS::Serverless::HttpApiAWS::Serverless::SimpleTable、和AWS::Serverless::StateMachine资源都继承本Globals节中定义的属性。本节是独一无二的 AWS SAM。 CloudFormation 模板中没有相应的部分。
- Description(可选)
-
一个描述模板的文本字符串。
本节与 CloudFormation 模板
Description部分直接对应。 - 元数据(可选)
-
提供有关模板的其他信息的对象。
本节与 CloudFormation 模板
Metadata部分直接对应。 - Parameters(可选)
-
要在运行时 (创建或更新堆栈时) 传递到模板的值。您可引用模板的
Resources和Outputs部分中的参数。在Parameters部分中声明的对象会导致 sam deploy --guided 命令向用户显示附加提示。使用
sam deploy命令的--parameter-overrides参数传入的值以及配置文件中的条目优先于 AWS SAM 模板文件中的条目。有关sam deploy命令的更多信息,请参阅 AWS SAM CLI 命令参考中的 sam deploy。有关配置文件的更多信息,请参阅AWS SAMCLI 配置文件。 - Mappings(可选)
-
可用来指定条件参数值的密钥和关键值的映射,与查找表类似。可以通过使用
Resources和Outputs部分中的Fn::FindInMap内置函数将键与相应的值匹配。本节与 CloudFormation 模板
Mappings部分直接对应。 - 条件(可选)
-
用于控制是否创建某些资源或者是否在堆栈创建或更新过程中为某些资源属性分配值的条件。例如,您可以根据堆栈是用于生产环境还是用于测试环境来按照条件创建资源。
本节与 CloudFormation 模板
Conditions部分直接对应。 - Resources(必需)
-
堆栈资源及其属性,例如亚马逊弹性计算云 (Amazon EC2) 实例或亚马逊简单存储服务 (Amazon S3) Service 存储桶。您可引用模板的
Resources和Outputs部分中的资源。该部分与 CloudFormation 模板的
Resources部分类似。在 AWS SAM 模板中,除 AWS SAM 资源外,此部分还可以包含 CloudFormation 资源。 - Outputs(可选)
-
在您查看堆栈的属性时返回的值。例如,您可以为 S3 存储桶名称声明输出,然后调用
aws cloudformation describe-stacksAWS Command Line Interface (AWS CLI) 命令查看该名称。该部分与 CloudFormation 模板的
Outputs部分直接对应。
后续步骤
要下载和部署包含 AWS SAM 模板文件的示例无服务器应用程序,请参阅入门 AWS SAM并按照中的教程:使用以下命令部署 Hello World 应用程序 AWS SAM说明进行操作。