Ram*_*hna 4 amazon-web-services aws-cloudformation
目前我正在将CFT从JSON转换为Yaml.一切正常,直到Userdata部分.我很难在userdata部分使用任何函数,如!Ref或!FindInMap.
用户数据:
Fn::Base64: !Sub |
#!/bin/bash -v
/command {Fn::FindInMap: [ "url", Ref: AWS::Region, Ref: EnvironmentType ] }
Run Code Online (Sandbox Code Playgroud)
这将是非常有帮助的,如果任何人都可以共享任何代码片段.
Dan*_*ves 11
我一直在玩这个游戏和玩游戏.虽然文档说Fn::FindInMap支持Fn::Sub,但没有使用的例子,我尝试了各种引号和冒号的组合但没有成功,但我似乎终于使用映射找到了功能性解决方案.以下应该有效:
Fn::Base64: !Sub
- |+
#!/bin/bash -v
/command ${Url}
- Url:
Fn::FindInMap:
- UrlMap
- !Ref AWS::Region
- !Ref EnvironmentType
Run Code Online (Sandbox Code Playgroud)
arg0开头的管道告诉YAML保留换行符,加号告诉它以后保留换行符.Arg1告诉它Fn::FindInMap用arg0中的Url 替换结果.
以下较短版本也应该有效:
Fn::Base64: !Sub
- |+
#!/bin/bash -v
/command ${Url}
- Url:
Fn::FindInMap: [UrlMap, Ref: "AWS::Region", Ref: EnvironmentType]
Run Code Online (Sandbox Code Playgroud)
但你应该测试一下.注意逗号,引号和reversion到Ref:s而不是!Refs.这可能告诉我们一些文件是如何被预处理的,但我不确定那是什么.
我确信这个解决方案对于经验丰富的YAMLers来说是显而易见的,但是当我将所有这些YAMLy优点添加到CloudFormation时,我才开始关注JSON.