CloudFormation 模板 Outputs 语法
可选的 Outputs
部分用于声明堆栈的输出值。这些输出值可以通过多种方式使用:
-
捕获与资源有关的重要信息 – 通过输出可以方便地捕获与资源有关的重要信息。例如,您可以输出堆栈的 S3 存储桶名称以使该存储桶更容易找到。可以在 CloudFormation 控制台的输出选项卡中或使用 describe-stacks CLI 命令查看输出值。
-
跨堆栈引用 – 您可以将输出值导入其他堆栈,以便在堆栈之间创建引用。当您需要跨多个堆栈共享资源或配置时,这会非常实用。
重要
CloudFormation 不会对 Outputs
部分中包含的任何信息进行编辑或模糊处理。我们强烈建议您不要使用此部分输出敏感信息,例如密码或密钥。
堆栈操作完成后,输出值可用。当堆栈状态处于任何 IN_PROGRESS
状态时,堆栈输出值都不可用。我们不建议在服务运行时和堆栈输出值之间建立依赖关系,因为输出值可能并非始终都可用。
语法
Outputs
部分包括键名称 Outputs
。您最多可在一个模板中声明 200 个输出。
以下示例演示了 Outputs
部分的结构。
JSON
使用括号将所有输出声明括起来。使用逗号分隔多个输出。
"Outputs" : { "
OutputLogicalID
" : { "Description" : "Information about the value
", "Value" : "Value to return
", "Export" : { "Name" : "Name of resource to export
" } } }
YAML
Outputs:
OutputLogicalID
: Description:Information about the value
Value:Value to return
Export: Name:Name of resource to export
输出字段
Outputs
部分包含以下字段。
- 逻辑 ID(也称为逻辑名称)
-
当前输出的标识符。逻辑 ID 必须为字母数字(
a–z
、A–Z
和0–9
),并且在模板中具有唯一性。 Description
(可选)-
一个描述输出类型的
String
类型。描述声明的值必须是长度介于 0 和 1024 个字节之间的文字字符串。您无法使用参数或函数来指定描述。 Value
(必需)-
describe-stacks 命令返回的属性值。输出值可以包括文字值、参数引用、伪参数、映射值或内部函数。
Export
(可选)-
要为跨堆栈引用导出的资源输出的名称。
您可使用内部函数自定义导出的
Name
值。有关更多信息,请参阅 获取从已部署的 CloudFormation 堆栈导出的输出。
要将条件与输出关联,请在模板的 Conditions 部分中定义条件。
示例
以下示例说明了堆栈输出的工作原理。
堆栈输出
在以下示例中,仅当 BackupLoadBalancerDNSName
条件为 true 时,名为 BackupLoadBalancer
的输出才返回逻辑 ID 为 CreateProdResources
的资源的 DNS 名称。名为 InstanceID
的输出会返回逻辑 ID 为 EC2Instance
的 EC2 实例的 ID。
JSON
"Outputs" : { "BackupLoadBalancerDNSName" : { "Description": "The DNSName of the backup load balancer", "Value" : { "Fn::GetAtt" : [ "BackupLoadBalancer", "DNSName" ]}, "Condition" : "CreateProdResources" }, "InstanceID" : { "Description": "The Instance ID", "Value" : { "Ref" : "EC2Instance" } } }
YAML
Outputs: BackupLoadBalancerDNSName: Description: The DNSName of the backup load balancer Value: !GetAtt BackupLoadBalancer.DNSName Condition: CreateProdResources InstanceID: Description: The Instance ID Value: !Ref EC2Instance
使用 Fn::Sub
自定义导出名称
在以下示例中,名为 StackVPC
的输出返回 VPC 的 ID,然后在堆栈名称中附加 VPCID
导出跨堆栈引用的值。
JSON
"Outputs" : { "StackVPC" : { "Description" : "The ID of the VPC", "Value" : { "Ref" : "MyVPC" }, "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-VPCID" } } } }
YAML
Outputs: StackVPC: Description: The ID of the VPC Value: !Ref MyVPC Export: Name: !Sub "${AWS::StackName}-VPCID"
有关 Fn::Sub
函数的更多信息,请参阅Fn::Sub。
使用 Fn::Join
自定义导出名称
还可以使用 Fn::Join
函数以根据参数、资源属性和其他字符串来构造值。
以下示例使用 Fn::Join
函数而不是 Fn::Sub
函数,自定义导出名称。示例 Fn::Join
函数将冒号用作分隔符,连接堆栈名称与名称 VPCID
。
JSON
"Outputs" : { "StackVPC" : { "Description" : "The ID of the VPC", "Value" : { "Ref" : "MyVPC" }, "Export" : { "Name" : { "Fn::Join" : [ ":", [ { "Ref" : "AWS::StackName" }, "VPCID" ] ] } } } }
YAML
Outputs: StackVPC: Description: The ID of the VPC Value: !Ref MyVPC Export: Name: !Join [ ":", [ !Ref "AWS::StackName", VPCID ] ]
有关 Fn::Join
函数的更多信息,请参阅Fn::Join。
返回使用 Fn::Join
构造的 URL
在以下用于创建 WordPress 网站的模板示例中,InstallURL
是 Fn::Join
函数调用返回的字符串,该字符串将 http://
、资源 ElasticLoadBalancer
的 DNS 名称和 /wp-admin/install.php
连接起来。该输出值可能会与以下值相似:
http://mywptests-elasticl-1gb51l6sl8y5v-206169572.aws-region
.elb.amazonaws.com/wp-admin/install.php
JSON
{ "Outputs": { "InstallURL": { "Value": { "Fn::Join": [ "", [ "http://", { "Fn::GetAtt": [ "ElasticLoadBalancer", "DNSName" ] }, "/wp-admin/install.php" ] ] }, "Description": "Installation URL of the WordPress website" } } }
YAML
Outputs: InstallURL: Value: !Join - '' - - 'http://' - !GetAtt - ElasticLoadBalancer - DNSName - /wp-admin/install.php Description: Installation URL of the WordPress website
有关 Fn::Join
函数的更多信息,请参阅Fn::Join。