通用模板代码段
以下示例介绍不特定于某一 Amazon 服务的不同 Amazon CloudFormation 模板功能。
主题
- Base64 编码 UserData 属性
- 带 AccessKey 和 SecretKey 的 Base64 编码 UserData 属性
- 含一个文字字符串参数的 Parameters 部分
- 含有带正则表达式约束的字符串参数的 Parameters 部分
- 含有带 MinValue 和 MaxValue 约束的数字参数的 Parameters 部分
- 含有带 AllowedValues 约束的数字参数的 Parameters 部分
- 带有一个文字 CommaDelimitedList 参数的 Parameters 部分
- 包含基于伪参数的参数值的参数部分
- 带有三个映射的 Mapping 部分
- 基于文字字符串的描述
- 带有一个文件字符串输出的输出部分
- 包含一个资源引用和一个伪参数输出的输出部分
- 包含一个基于函数、文字字符串、参考和伪参数的输出的输出部分
- 模板格式版本
- Amazon 标签属性
Base64 编码 UserData 属性
此示例显示的是使用 Fn::Base64 和 Fn::Join 函数的 UserData 属性集合。参考 MyValue
和 MyName
是必须要在模板的 Parameters 部分中定义的参数。文字字符串 Hello World
只是此示例传输作为 UserData
的一部分的另一个值。
JSON
"UserData" : { "Fn::Base64" : { "Fn::Join" : [ ",", [ { "Ref" : "MyValue" }, { "Ref" : "MyName" }, "Hello World" ] ] } }
YAML
UserData: Fn::Base64: !Sub | Ref: MyValue Ref: MyName Hello World
带 AccessKey 和 SecretKey 的 Base64 编码 UserData 属性
此示例显示的是使用 Fn::Base64 和 Fn::Join 函数的 UserData 属性集合。它包含 AccessKey
和 SecretKey
信息。参考 AccessKey
和 SecretKey
是必须要在模板的 Parameters 部分中定义的参数。
JSON
"UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", [ "ACCESS_KEY=", { "Ref" : "AccessKey" }, "SECRET_KEY=", { "Ref" : "SecretKey" } ] ] } }
YAML
UserData: Fn::Base64: !Sub | ACCESS_KEY=${AccessKey} SECRET_KEY=${SecretKey}
含一个文字字符串参数的 Parameters 部分
以下示例描述了有效的 Parameters 部分声明,其中声明有单个 String
类型参数。
JSON
"Parameters" : { "UserName" : { "Type" : "String", "Default" : "nonadmin", "Description" : "Assume a vanilla user if no command-line spec provided" } }
YAML
Parameters: UserName: Type: String Default: nonadmin Description: Assume a vanilla user if no command-line spec provided
含有带正则表达式约束的字符串参数的 Parameters 部分
以下示例描述了有效的 Parameters 部分声明,其中声明有单个 String
类型参数。AdminUserAccount 参数有一个默认值 admin。参数值的最小长度必须为 1,最大长度必须为 16,且其中包含字母字符和数字,但必须以字母字符开头。
JSON
"Parameters" : { "AdminUserAccount": { "Default": "admin", "NoEcho": "true", "Description" : "The admin account user name", "Type": "String", "MinLength": "1", "MaxLength": "16", "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*" } }
YAML
Parameters: AdminUserAccount: Default: admin NoEcho: true Description: The admin account user name Type: String MinLength: 1 MaxLength: 16 AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
含有带 MinValue 和 MaxValue 约束的数字参数的 Parameters 部分
以下示例描述了有效的 Parameters 部分声明,其中声明有单个 Number
类型参数。WebServerPort 参数有一个默认值 80,最小值 1 和最大值 65535。
JSON
"Parameters" : { "WebServerPort": { "Default": "80", "Description" : "TCP/IP port for the web server", "Type": "Number", "MinValue": "1", "MaxValue": "65535" } }
YAML
Parameters: WebServerPort: Default: 80 Description: TCP/IP port for the web server Type: Number MinValue: 1 MaxValue: 65535
含有带 AllowedValues 约束的数字参数的 Parameters 部分
以下示例描述了有效的 Parameters 部分声明,其中声明有单个 Number
类型参数。WebServerPort 参数有一个默认值 80,且只允许值 80 和 8888。
JSON
"Parameters" : { "WebServerPortLimited": { "Default": "80", "Description" : "TCP/IP port for the web server", "Type": "Number", "AllowedValues" : ["80", "8888"] } }
YAML
Parameters: WebServerPortLimited: Default: 80 Description: TCP/IP port for the web server Type: Number AllowedValues: - 80 - 8888
带有一个文字 CommaDelimitedList 参数的 Parameters 部分
以下示例描述了有效的 Parameters 部分声明,其中声明有单个 CommaDelimitedList
类型参数。NoEcho 属性设置为 TRUE
,该属性将使用 aws cloudformation describe-stacks
输出中的星号 (*****) 掩盖其值,但存储在下面指定位置的信息除外。
使用 NoEcho
属性不会遮蔽在以下各区段中存储的任何信息:
Metadata
模板区段。CloudFormation 不会转换、修改或编辑您在Metadata
部分中包含的任何信息。有关更多信息,请参阅 Metadata。Outputs
模板区段。有关更多信息,请参阅 Outputs。资源定义的
Metadata
属性。有关更多信息,请参阅 Metadata 属性。
强烈建议您不要使用这些机制来包含敏感信息,例如密码。
我们建议不要将敏感信息直接嵌入 CloudFormation 模板中,而是使用堆栈模板中的动态参数来引用在 CloudFormation 之外存储和管理的敏感信息,例如 Amazon Systems Manager 参数仓库或 Amazon Secrets Manager 中的信息。
有关更多信息,请参阅请勿将凭证嵌入您的模板最佳实践。
JSON
"Parameters" : { "UserRoles" : { "Type" : "CommaDelimitedList", "Default" : "guest,newhire", "NoEcho" : "TRUE" } }
YAML
Parameters: UserRoles: Type: CommaDelimitedList Default: "guest,newhire" NoEcho: true
包含基于伪参数的参数值的参数部分
以下示例说明 EC2 用户数据中使用伪参数 AWS::StackName
和 AWS::Region
的命令。有关伪参数的更多信息,请参阅伪参数参考。
JSON
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -xe\n", "yum install -y aws-cfn-bootstrap\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource LaunchConfig ", " --region ", { "Ref" : "AWS::Region" }, "\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource WebServerGroup ", " --region ", { "Ref" : "AWS::Region" }, "\n" ]]}} }
YAML
UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum update -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --region ${AWS::Region} /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}
带有三个映射的 Mapping 部分
以下示例描述了其中包含三个映射的有效 Mapping 部分。映射在与 Stop
、SlowDown
或 Go
映射密钥匹配时提供分配至相应 RGBColor
属性的 RGB 值。
JSON
"Mappings" : { "LightColor" : { "Stop" : { "Description" : "red", "RGBColor" : "RED 255 GREEN 0 BLUE 0" }, "SlowDown" : { "Description" : "yellow", "RGBColor" : "RED 255 GREEN 255 BLUE 0" }, "Go" : { "Description" : "green", "RGBColor" : "RED 0 GREEN 128 BLUE 0" } } }
YAML
Mappings: LightColor: Stop: Description: red RGBColor: "RED 255 GREEN 0 BLUE 0" SlowDown: Description: yellow RGBColor: "RED 255 GREEN 255 BLUE 0" Go: Description: green RGBColor: "RED 0 GREEN 128 BLUE 0"
基于文字字符串的描述
以下示例描述了有效的描述部分声明,其中的值基于文字字符串。此代码段可用于模板、参数、资源、属性或输出。
JSON
"Description" : "
Replace this value
"
YAML
Description: "
Replace this value
"
带有一个文件字符串输出的输出部分
此示例显示的是基于文字字符串的输出分配。
JSON
"Outputs" : { "MyPhone" : { "Value" : "Please call 555-5555", "Description" : "A random message for aws cloudformation describe-stacks" } }
YAML
Outputs: MyPhone: Value: Please call 555-5555 Description: A random message for aws cloudformation describe-stacks
包含一个资源引用和一个伪参数输出的输出部分
此示例显示的是含有两个输出分配的输出部分。一个基于资源,另一个基于伪引用。
JSON
"Outputs" : { "SNSTopic" : { "Value" : { "Ref" : "MyNotificationTopic" } }, "StackName" : { "Value" : { "Ref" : "AWS::StackName" } } }
YAML
Outputs: SNSTopic: Value: !Ref MyNotificationTopic StackName: Value: !Ref AWS::StackName
包含一个基于函数、文字字符串、参考和伪参数的输出的输出部分
此示例显示的是带有一个输出分配的输出部分。Join 函数用于连接值,将百分比符号用作分隔符。
JSON
"Outputs" : { "MyOutput" : { "Value" : { "Fn::Join" : [ "%", [ "A-string", {"Ref" : "AWS::StackName" } ] ] } } }
YAML
Outputs: MyOutput: Value: !Join [ %, [ 'A-string', !Ref 'AWS::StackName' ]]
模板格式版本
以下代码段描述了有效的 Template Format Version 部分声明。
JSON
"AWSTemplateFormatVersion" : "2010-09-09"
YAML
AWSTemplateFormatVersion: '2010-09-09'
Amazon 标签属性
此示例显示的是 Amazon 标签属性。您将在资源的 Properties 部分中执行该属性。资源被创建后,会标上您声明的标签。
JSON
"Tags" : [ { "Key" : "keyname1", "Value" : "value1" }, { "Key" : "keyname2", "Value" : "value2" } ]
YAML
Tags: - Key: "keyname1" Value: "value1" - Key: "keyname2" Value: "value2"