来自YAML Cloudformation模板中的UserData的引用角色

时间:2016-10-19 20:18:05

标签: amazon-cloudformation

我正在新的'中编写一个cloudformation模板。 YAML格式,我不确定如何翻译UserDate部分中出现的Ref语句。 userdata中的数据是包含CoreOS的cloud-config,包含单元文件。该模板在JSON中工作正常,但我不知道如何在YAML中构造Ref语句。

我的userdata部分的顶部如下:

  UserData:
    Fn::Base64: 
      !Sub | 

这引用了一个参数,它工作正常

Environment=NRSYSMOND_license_key=${NewRelicLicenseKey}

这应该引用模板创建的动态IAM角色。   CF似乎没有将值与角色的ID交换出来

Environment=IAM_ROLE=${InstanceRole}

这会导致CoreOS中的错误,因为它无法解析变量    意思是它没有被换掉

Environment=IAM_ROLE=${!Ref InstanceRole}

如果在同一个CF模板中创建了对象,则无法从userdata部分引用角色等对象吗?使用AWS :: *资源或使用参数时,替换可以正常工作。

1 个答案:

答案 0 :(得分:2)

如果您拥有名为InstanceRole的资源,如下所示:

Resources:
  InstanceRole:
    Type: "AWS::IAM::Role"
    Properties:
      etcetc

您应该能够按照您的建议行事,但您也可以将Ref值传递给要替换的变量,如下所示。在http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-sub.html

的底部再解释一下
  UserData:
    Fn::Base64: 
      !Sub
      - |
        Environment=IAM_ROLE=${InstanceRole}
      - InstanceRole:
          Ref: InstanceRole

如果您为InstanceRole资源提供了一个名称属性,并希望它是返回的值,那么那将无法正常工作,AFAIK