AWS CloudFormation スタックの更新ごとに、起動設定を変更せずに Auto Scaling グループのローリング更新を開始したいと考えています。
簡単な説明
Auto Scaling グループのローリング更新は、UpdatePolicy 属性の特定の条件が満たされた場合にのみ開始できます。
ローリング更新を開始するには、CloudFormation テンプレートの起動設定にトグルパラメータを作成します。ただし、スタック更新中に [Toggle] パラメータの値を変更した場合、[UserData] プロパティが変更されます。UserData の修正には、置換が必要です。CloudFormation は [UserData] への変更を検出し、次に [LaunchConfiguration] リソースを置き換えます。この置き換えにより、UpdatePolicy 属性で定義されている Auto Scaling のローリング更新が開始されます。
解決方法
次の手順では、AutoScalingRollingUpdate ポリシーが Auto Scaling グループに設定されており、Auto Scaling グループが [LaunchConfiguration] を参照するように設定されていると仮定しています。
重要: [Toggle] パラメータをテンプレートに追加するときは、[UserData] プロパティ内の他の要素を乱さないように注意してください。cfn-signal の前に [Toggle] パラメータを追加しないでください。
1. CloudFormation テンプレートで、パラメータとして Toggle を定義します。
JSON:
"Parameters": {
"Toggle": {
"Type": "String",
"AllowedValues": ["true","false"],
"Default": "true"
}
}
YAML:
Parameters:
Toggle:
Type: String
AllowedValues:
- 'true'
- 'false'
Default: 'true'
2. テンプレートの起動設定で、[UserData] プロパティの [Toggle] パラメータを参照してから、スタックを起動します。以下の 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 などのリソースに対して Toggle パラメータソリューションを使用できます。