在yaml

时间:2017-01-02 09:50:15

标签: amazon-web-services yaml amazon-cloudformation

在我的嵌套堆栈中,我需要使用输出值,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吗?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

您的问题归因于known bug自定义aws-cli中的YAML-parsing code,该aws cloudformation deploy最近作为aws cloudformation packageversion 1.11.37的一部分添加了命令。

aws-cli aws-cli修正了该问题。要解决此问题,您可以执行以下任一操作:

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