yaml中的Cloudformation嵌套堆栈输出

Posted

技术标签:

【中文标题】yaml中的Cloudformation嵌套堆栈输出【英文标题】:Cloudformation nested stack outputs in yaml 【发布时间】:2017-05-16 10:08:12 【问题描述】:

在我的嵌套堆栈中,我需要使用输出值,而 AWS::CloudFormation::Stack 将值返回为

Fn::GetAtt Outputs.NestedStackOutputName

但是yaml不允许我使用

!GetAtt MyResourceName.Outputs.MyOutputName

因为它试图将它们分成 3 块而不是它需要的 2 块。

我也尝试过使用

Value: "Fn::GetAtt": [ "MyResourceName", "Outputs.MyOutputName" ] 

然后我明白了

mapping values are not allowed here
  in "<string>", line 21, column 24:
        Value: "Fn::GetAtt": [ "MyResourceName", "Outputs.MyOutputName" ]

那么我应该如何使用它呢?我真的必须为此切换到json吗?

【问题讨论】:

【参考方案1】:

使用这两个堆栈对我有用:

root.yml:

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  MyNestedStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: https://s3.amazonaws.com/spg-test-bucket/cloudformation/nested.yml?versionId=HqlgDnuntMzkmK0398GPdJRUXMN_PMdn
  RootBucket:
    Type: AWS::S3::Bucket
    Properties:
      LoggingConfiguration:
        DestinationBucketName:
          Fn::GetAtt: [MyNestedStack, Outputs.NestedBucket]

nested.yml:

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  DataBucket:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: LogDeliveryWrite
Outputs:
  NestedBucket:
    Value:
      Ref: DataBucket

【讨论】:

谢谢,这行得通。在语法方面确实缺乏 AWS 文档。【参考方案2】:

您的问题是由于aws-cli 的自定义YAML-parsing code 中的known bug 最近作为aws cloudformation deployaws cloudformation package 命令的一部分添加的。

该问题已在aws-cli 中的version 1.11.37 中修复。要解决此问题,您可以执行以下任一操作:

aws-cli 升级到 1.11.37 或更高版本。 如果您不使用本地工件,请使用 aws cloudformation [create|update]-stack 而不是 aws cloudformation [package|deploy] 创建/更新您的堆栈。

【讨论】:

今天被提醒了这个问题,经过一番研究,我发现我的 aws cli 太旧了,这个问题已经解决了。 @Jeppz 啊,您从 aws cli 收到此错误的附加上下文(不是直接来自 CloudFormation,正如我所假设的那样)澄清了事情!更新了我的回答以描述情况。

以上是关于yaml中的Cloudformation嵌套堆栈输出的主要内容,如果未能解决你的问题,请参考以下文章

CloudFormation 嵌套堆栈名称

在 AWS cloudformation 上理解 Apigateway 和嵌套堆栈时出错

如何调试cloudformation模板?策略中的语法错误。 YAML 文件

描述嵌套 CloudFormation 堆栈资源的正确方法是啥?

AWS cloudformation 嵌套堆栈因模板 URL 失败

对 CloudFormation 上的嵌套堆栈使用 CAPABILITY_AUTO_EXPAND