我正在新的'中编写一个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 :: *资源或使用参数时,替换可以正常工作。
答案 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