use*_*385 2 amazon-web-services aws-cloudformation
好的,请阅读有关内部函数 Fn::Sub 的文档。我可以使用文字块来指定用户数据脚本。
UserData:
"Fn::Base64":
!Sub |
#!/bin/bash -xe
yum update -y aws-cfn-bootstrap
/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}
/opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}
Run Code Online (Sandbox Code Playgroud)
我可以使用映射将 ${Domain} 变量替换为 Ref 函数的结果值。
Name: !Sub
- www.${Domain}
- { Domain: !Ref RootDomainName }
Run Code Online (Sandbox Code Playgroud)
但是如果我需要在文字块内使用映射替代怎么办?例如:
"Fn::Base64": !Sub |
<powershell>
Write-host "My Domain is www.${Domain},{ Domain: !Ref RootDomainName }"
</powershell>
Run Code Online (Sandbox Code Playgroud)
这个例子不起作用,而且我还没有找到可行的方法。有任何想法吗?第一个示例使用户数据脚本更容易编写并且看起来更干净,但是如果无法使用 !Ref 或 !Findinmap ,它的实用性就会大大降低。
有人有什么想法吗?
小智 6
由于我通过Google到达此页面,然后通过这里不同的措辞找到了解决方案(字面意思): How to use !FindInMap in !Sub | 用户数据部分
我添加它只是为了避免其他人进行一些沮丧的搜索。
本质上,您必须使用第二种语法编写示例,但更详细一些:
Fn::Base64:
Fn::Sub:
- |+
<powershell>
Write-host "My Domain is www.${Domain}"
</powershell>
- Domain:
Fn::Ref: RootDomainName
Run Code Online (Sandbox Code Playgroud)
您也许可以稍微缩短它,但正如原始海报所说,请注意您的逗号、引用和简短形式的使用。
PS:如果第一个解决方案已经达到你的目的,你应该这样标记它。
| 归档时间: |
|
| 查看次数: |
4949 次 |
| 最近记录: |