AWS CloudFormation の起動設定に変更がない場合にローリング更新をトリガーするにはどうしたらいいですか?

最終更新日: 2019 年 5 月 20 日

AWS CloudFormation スタックを更新しても、起動設定を変更していないため、Auto Scaling グループのインスタンスは更新されません。けれども、起動設定を変更しなくても、スタックが更新されるたびに Auto Scaling グループでローリング更新をトリガーしたいです。

簡単な説明

Auto Scaling グループのローリング更新は、UpdatePolicy 属性の特定の条件が満たされた場合にのみトリガーされます。

ローリング更新をトリガーするには、AWS CloudFormation テンプレートの起動設定でトリガーパラメータ (この例では Toggle) を作成できます。ただし、スタック更新中に [Toggle] パラメータの値を変更した場合、[UserData] プロパティが変更されます。UserData の修正には、置換が必要です。AWS CloudFormation は [UserData] への変更を検出し、次に [LaunchConfiguration] リソースを置き換えます。この置き換えにより、UpdatePolicy 属性で定義されている Auto Scaling のローリング更新がトリガーされます。

解決方法

次の手順では、AutoScalingRollingUpdate ポリシーが Auto Scaling グループに設定されており、Auto Scaling グループが [LaunchConfiguration] を参照するように設定されていると仮定します。

重要: [Toggle] パラメータをテンプレートに追加するときは、[UserData] プロパティ内の他の要素を乱さないように注意してください。cfn-signal の前に [Toggle] パラメータを追加しないでください。

1.    AWS CloudFormation テンプレートで、パラメータを定義します (この例では Toggle)。以下の JSON と YAML の例を参照してください。

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

重要: スタックを更新するときにローリング更新をトリガーするには、スタック起動前の初期設定により、[Toggle] パラメータの値を [true] から [false]、または [false] から [true] に変更します。

注: 更新が置き換えを必要とするプロパティ (LaunchConfigurationName など) や AWS::EC2::LaunchTemplate などのリソースに対して Toggle パラメータソリューションを使用できます。


この記事は役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合