输出
可选的 Outputs
部分声明输出值,您可以将这些值导入到其他堆栈中(以便创建跨堆栈引用)、在响应中返回这些值(以便描述堆栈调用)或者在 Amazon CloudFormation 控制台中查看。例如,您可以输出堆栈的 S3 存储桶名称以使该存储桶更容易找到。
重要
CloudFormation 不会对包含在输出部分中的任何信息进行编辑或模糊处理。我们强烈建议您不要使用此部分输出敏感信息,例如密码或密钥。
堆栈操作完成后,输出值可用。当堆栈状态处于任何IN_PROGRESS
状态时,堆栈输出值都不可用。我们不建议在服务运行时和堆栈输出值之间建立依赖关系,因为输出值可能并非始终都可用。
语法
Outputs
部分包含键名称 Outputs
,后跟一个空格和一个冒号。您最多可在一个模板中声明 200 个输出。
以下示例演示了 Outputs
部分的结构。
JSON
使用括号将所有输出声明括起来。使用逗号分隔多个输出。
"Outputs" : { "
Logical ID
" : { "Description" : "Information about the value
", "Value" : "Value to return
", "Export" : { "Name" : "Name of resource to export
" } } }
YAML
Outputs:
Logical ID
: 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 (必需)
-
aws cloudformation describe-stacks
命令返回的属性值。输出值可以包括文字值、参数引用、伪参数、映射值或内部函数。 - Export (可选)
-
要为跨堆栈引用导出的资源输出的名称。
注意
以下限制适用于跨堆栈引用:
-
对于每个 Amazon Web Services 账户,
Export
名称在区域内必须是唯一的。 -
不能跨区域创建跨堆栈引用。您可以使用内置函数
Fn::ImportValue
仅导入已在同一区域内导出的值。 -
对于输出,
Export
的Name
属性值无法使用依赖于资源的Ref
或GetAtt
函数。同样,
ImportValue
函数无法包含依赖于资源的Ref
或GetAtt
函数。 -
如果其他堆栈引用了堆栈的输出之一,则无法删除该堆栈。
-
您无法修改或移除其他堆栈引用的输出值。
您可使用内部函数自定义导出的
Name
值。以下示例使用Fn::Join
函数。JSON
"Export" : { "Name" : { "Fn::Join" : [ ":", [ { "Ref" : "AWS::StackName" }, "AccountVPC" ] ] } }
YAML
Export: Name: !Join [ ":", [ !Ref "AWS::StackName", AccountVPC ] ]
-
要将条件与输出关联,请在模板的 Conditions
部分中定义条件。
示例
以下示例说明了堆栈输出的工作原理。
堆栈输出
在以下示例中,仅当 BackupLoadBalancerDNSName
条件为 true 时,名为 BackupLoadBalancer
的输出才返回逻辑 ID 为 CreateProdResources
的资源的 DNS 名称。(第二个输出说明如何指定多个输出。)
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
跨堆栈输出
在以下示例中,名为 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"