我创建了一个 AWS Cloudformation 模板,但在克服循环依赖项时遇到问题。我正在创建一个 EC2 实例和一个负载均衡器,负载均衡器依赖于 EC2 实例,因为它在其实例属性中引用它。一切都工作正常,直到我必须在 EC2 实例 Init 部分中引用负载均衡器的 DNSName 属性。
"AppServer": {
"Type": "AWS::EC2::Instance",
"Metadata": {
"AWS::CloudFormation::Init" : {
"configSets" : {
"Install" : [ "Install" ]
},
...
...
...
"Install" : {
"commands" : {
"update hostname rmi" : {
"command" : { "Fn::Join" : [ "", [ "runuser -lm rlt -c \"/home/ec2-user/awscf/update-rmi.sh ", { "Fn::GetAtt" : [ "WebLoadBalancer", "DNSName" ] }, "\"" ] ] }
},
}
因此,这里的问题是 EC2 实例无法引用负载均衡器,因为它尚未创建,并且无法首先创建负载均衡器,因为它需要 EC2 实例 ID 才能与其关联。
我查看了 WaitConditions 和 CreationPolicy,但除非我误解了它们的工作方式,否则我认为它们不会帮助我。本质上我需要的是 a) 创建 EC2 实例,但在创建 LoadBalancer 之前不要执行 UserData 或 b) 首先创建 LoadBalancer 并且不要将其与 EC2 实例关联,创建 EC2 实例后返回并更新 LoadBalancer 以将其与 EC2 实例关联。有谁知道这样的事情是否可能?除了创建完整堆栈然后返回并手动更新之外?理想情况下,我希望这发生在堆栈的单个创建上。
您可以考虑使用 EC2 实例中的 cfn-get-metadata 帮助程序脚本来检索 Stack::Resource 信息。
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-get-metadata.html http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-get-metadata.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)