gpt4 book ai didi

amazon-web-services - Fn::Sub 在文字 block 中使用 Mapping 来指定用户数据脚本

转载 作者:行者123 更新时间:2023-12-02 15:16:38 25 4
gpt4 key购买 nike

好的,请阅读有关内部函数 Fn::Sub 的文档。我可以使用文字 block 来指定用户数据脚本。

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}

我可以使用映射将 ${Domain} 变量替换为 Ref 函数的结果值。

Name: !Sub
- www.${Domain}
- { Domain: !Ref RootDomainName }

但是如果我需要在文字 block 内使用映射替代怎么办?例如:

"Fn::Base64": !Sub |
<powershell>
Write-host "My Domain is www.${Domain},{ Domain: !Ref RootDomainName }"
</powershell>

这个例子不起作用,而且我还没有找到能起作用的方法。有任何想法吗?第一个示例使用户数据脚本更容易编写并且看起来更干净,但是如果无法使用 !Ref 或 !Findinmap ,它的实用性就会大大降低。

有人有什么想法吗?

最佳答案

自从我通过谷歌到达这个页面,然后通过这里不同的措辞找到解决方案(字面意思): How to use !FindInMap in !Sub | userdata section

我添加它只是为了避免其他人进行一些沮丧的搜索。

本质上,您必须使用第二种语法编写示例,但要更详细一点:

Fn::Base64:
Fn::Sub:
- |+
<powershell>
Write-host "My Domain is www.${Domain}"
</powershell>
- Domain:
Fn::Ref: RootDomainName

您也许可以稍微缩短一下,但正如原发帖者所说,请注意您的逗号、引用和简短形式的使用。

P.S.:如果第一个解决方案已经达到您的目的,您应该对其进行标记。

关于amazon-web-services - Fn::Sub 在文字 block 中使用 Mapping 来指定用户数据脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39898005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com