cloudformation 堆栈更新和启动模板版本/自动缩放组的问题
Posted
技术标签:
【中文标题】cloudformation 堆栈更新和启动模板版本/自动缩放组的问题【英文标题】:Problem with cloudformation stack update and launch template version / autoscaling group 【发布时间】:2019-11-15 10:15:30 【问题描述】:我在 cloudformation 中有一个堆栈(ECS 集群、App LB、Autoscaling Group、启动模板等)。它一切正常,我们已经在生产和预生产环境中使用了一段时间。
最近在尝试推送堆栈更新时出现了问题。我对 AWS::EC2::LaunchTemplate 中的 UserData 做了一些更改。如果我从这个模板启动一个新堆栈,它会很好用。 但: 如果我进行更改集并应用堆栈更新 cloudformation 创建一个新的启动模板版本 - 但是 - 自动缩放组仍然引用旧版本。 查看 AWS::AutoScaling::AutoScalingGroup LaunchTemplateSpecification 的 AWS 文档
我明白了: “AWS CloudFormation 不支持为模板版本号指定 $Latest 或 $Default。”
是否有人因堆栈更新而争吵创建需要在其他地方引用的新版本资源?我觉得我错过了一些明显的东西。
【问题讨论】:
所以我开始想也许我可以用 UpdateReplacePolicy 解决这个问题,但我在文档中发现“UpdateReplacePolicy 仅在您更新其更新行为指定为替换的资源属性时才会执行,从而导致 AWS CloudFormation用具有新物理 ID 的新资源替换旧资源。“所以在我的情况下,它看起来会被忽略 - 变更集显示此资源将被更新而不是替换。 【参考方案1】:是的,我很笨: 使用 Fn::GetAtt 好吧,取笑我使用json而不是yaml
...
"ECSAutoScalingGroup":
"Type": "AWS::AutoScaling::AutoScalingGroup",
"Properties":
"VPCZoneIdentifier": "Ref" : "Subnets",
"MinSize": "1",
"MaxSize": "10",
"DesiredCapacity": "Ref": "DesiredInstanceCount" ,
"MixedInstancesPolicy":
"InstancesDistribution" :
"OnDemandBaseCapacity" : "0",
"OnDemandPercentageAboveBaseCapacity" : "Ref" : "PercentOnDemand"
,
"LaunchTemplate" :
"LaunchTemplateSpecification" :
"LaunchTemplateId" : "Ref" : "ECSLaunchTemplate",
"Version" : "Fn::GetAtt" : [ "ECSLaunchTemplate", "LatestVersionNumber" ]
,
"Overrides" : [ "InstanceType": "m5.xlarge","InstanceType": "t3.xlarge","InstanceType": "m4.xlarge" ,"InstanceType": "r4.xlarge","InstanceType": "c4.xlarge"]
,
...
【讨论】:
谢谢,我正在找这个以上是关于cloudformation 堆栈更新和启动模板版本/自动缩放组的问题的主要内容,如果未能解决你的问题,请参考以下文章
AWS Cloudformation错误:由于递归导入而导致的递归锁定
如何在更新参数时强制 CloudFormation 堆栈更新?
CloudFormation AutoScalingGroup 不等待更新/扩展的信号