输出 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

输出

可选的 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–zA–Z0–9),并且在模板中具有唯一性。

Description(可选)

一个描述输出类型的 String 类型。描述声明的值必须是长度介于 0 和 1024 个字节之间的文字字符串。您无法使用参数或函数来指定描述。

Value (必需)

aws cloudformation describe-stacks 命令返回的属性值。输出值可以包括文字值、参数引用、伪参数、映射值或内部函数。

Export (可选)

要为跨堆栈引用导出的资源输出的名称。

注意

以下限制适用于跨堆栈引用:

  • 对于每个 Amazon Web Services 账户,Export 名称在区域内必须是唯一的。

  • 不能跨区域创建跨堆栈引用。您可以使用内置函数 Fn::ImportValue 仅导入已在同一区域内导出的值。

  • 对于输出,ExportName 属性值无法使用依赖于资源的 RefGetAtt 函数。

    同样,ImportValue 函数无法包含依赖于资源的 RefGetAtt 函数。

  • 如果其他堆栈引用了堆栈的输出之一,则无法删除该堆栈。

  • 您无法修改或移除其他堆栈引用的输出值。

您可使用内部函数自定义导出的 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"