當 CloudFormation 中的啟動組態沒有任何變更時,如何啟動滾動更新?

1 分的閱讀內容
0

我想要在每次 AWS CloudFormation 堆疊更新時,讓我的 Auto Scaling 群組也啟動滾動更新,而不需要修改啟動組態。

簡短說明

只有在符合 UpdatePolicy attribut 的特定條件時,才能啟動 Auto Scaling 群組的滾動更新。

若要啟動滾動更新,您可以在 CloudFormation 範本的啟動組態中建立切換參數。但是,如果您在堆疊更新期間變更切換參數的值,則會修改 「 UserData 」屬性。任何 UserData 修改都需要替換。CloudFormation 會偵測到「 UserData 的修改,然後替換「 啟動設定 」資源。此替換會啟動「 UpdatePolicy 屬性」所定義的 Auto Scaling 滾動更新。

解決方法

下列步驟假設您的「 自動調整比例更新」政策 已針對您的「自動比例」群組進行設定,而且您的「自動比例」群組設定為參考「 啟動設定」。

**重要:當您將切換參數新增至範本時,**請確定不會中斷「 UserData 」屬性中的其他元素。另外,不要在 cfn-signal 前新增切換參數。

1.    在您的 CloudFormation 範本中,將「切換」定義為參數。

JSON:

"Parameters": {
        "Toggle": {
            "Type": "String",
            "AllowedValues": ["true","false"],
            "Default": "true"
        }
    }

YAML:

Parameters:
  Toggle:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
    Default: 'true'

2.    在範本的啟動組態中,請參考「 UserData 」屬性中的切換參數,然後「 啟動堆疊」。請參閱下列 JSON 和 YAML 範例。

JSON:

"LaunchConfig" : {
  "Type" : "AWS::AutoScaling::LaunchConfiguration",
  "Properties" : {
     "ImageId" : { "Ref" : "ImageID" },
     "UserData" : { "Fn::Base64" : { "Ref" : "Toggle" }
         ...
         ...
     },        
  "InstanceType" : { "Ref" : "Type" }
  }
}

YAML:

LaunchConfig:
  Type: 'AWS::AutoScaling::LaunchConfiguration'
  Properties:
    ImageId: !Ref ImageID
    UserData:
      'Fn::Base64': !Ref Toggle
      ...
      ...
    InstanceType: !Ref Type

**重要:**若要在更新堆疊時啟動滾動式更新,請根據其初始設定,將參數值從 True 變更為 False 或從 False 變更為 True

**注意:**您可以在需要替換更新的屬性 (例如 LaunchConfigurationName) 以及資源 (例如 AWS::EC2::LaunchTemplate) 上使用切換參數解決方法。


AWS 官方
AWS 官方已更新 2 年前