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 堆栈更新和启动模板版本/自动缩放组的问题的主要内容,如果未能解决你的问题,请参考以下文章

EC2 终止时启动 CloudFormation 创建堆栈

AWS Cloudformation错误:由于递归导入而导致的递归锁定

如何在更新参数时强制 CloudFormation 堆栈更新?

CloudFormation AutoScalingGroup 不等待更新/扩展的信号

创建 AMI 映像作为 cloudformation 堆栈的一部分

如何一次从CloudFormation中删除多个全局二级索引?