模板剖析
模板是一个 JSON 或 YAML 格式的文本文件,该文件描述您的 Amazon 基础设施。以下示例显示 Amazon CloudFormation 模板结构和各个部分。
JSON
以下示例显示 JSON 格式的模板片段。
{ "AWSTemplateFormatVersion" : "
version date
", "Description" : "JSON string
", "Metadata" : {template metadata
}, "Parameters" : {set of parameters
}, "Rules" : {set of rules
}, "Mappings" : {set of mappings
}, "Conditions" : {set of conditions
}, "Transform" : {set of transforms
}, "Resources" : {set of resources
}, "Outputs" : {set of outputs
} }
YAML
以下示例显示 YAML 格式的模板片段。
--- AWSTemplateFormatVersion: "
version date
" Description:String
Metadata:template metadata
Parameters:set of parameters
Rules:set of rules
Mappings:set of mappings
Conditions:set of conditions
Transform:set of transforms
Resources:set of resources
Outputs:set of outputs
模板部分
模板包含几个主要部分。Resources
部分是唯一的必需部分。模板中的某些部分可以任何顺序显示。但是,在您构建模板时,使用以下列表中显示的逻辑顺序可能会很有用,因为一个部分中的值可能会引用上一个部分中的值。
- Format Version(可选)
-
模板符合的 Amazon CloudFormation 模板版本。模板格式版本与 API 或 WSDL 版本不同。模板格式版本可独立于 API 和 WSDL 版本,进行独立更改。
- Description(可选)
-
一个描述模板的文本字符串。此部分必须始终紧随模板格式版本部分之后。
- 元数据(可选)
-
提供有关模板的其他信息的对象。
- Parameters(可选)
-
要在运行时 (创建或更新堆栈时) 传递到模板的值。您可引用模板的
Resources
和Outputs
部分中的参数。 - 规则(可选)
-
验证在堆栈创建或堆栈更新过程中传递给模板的参数或参数组合。
- Mappings(可选)
-
可用来指定条件参数值的密钥和关键值的映射,与查找表类似。可以通过使用
Resources
和Outputs
部分中的 Fn::FindInMap 内部函数将键与相应的值匹配。 - 条件(可选)
-
用于控制是否创建某些资源或者是否在堆栈创建或更新过程中为某些资源属性分配值的条件。例如,您可以根据堆栈是用于生产环境还是用于测试环境来按照条件创建资源。
- 转换 (可选)
-
对于无服务器应用程序(也称为“基于 Lambda 的应用程序”),指定要使用的 Amazon Serverless Application Model(Amazon SAM)
的版本。当您指定转换时,可以使用 Amazon SAM 语法声明您的模板中的资源。此模型定义您可使用的语法及其处理方式。 您也可以使用
AWS::Include
转换来处理与主 Amazon CloudFormation 模板分开存储的模板代码段。您可以将代码段文件存储在 Amazon S3 存储桶中,然后在多个模板中重用这些函数。 - Resources(必需)
-
指定堆栈资源及其属性,如 Amazon Elastic Compute Cloud 实例或 Amazon Simple Storage Service 存储桶。您可引用模板的
Resources
和Outputs
部分中的资源。 - Outputs(可选)
-
描述在您查看堆栈的属性时返回的值。例如,您可以声明 S3 存储桶名称的输出,然后调用
aws cloudformation describe-stacks
Amazon CLI 命令来查看该名称。
注意
创作模板时,不要使用重复的主要部分,例如使用多个资源部分。尽管 CloudFormation 可接受模板,但在处理模板时,它将具有未定义的行为,并且可能会错误地预置资源,或者返回无法解释的错误。