AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

CloudFormation の起動テンプレートに変更がない場合に、Auto Scaling グループでローリングアップデートを開始する方法を教えてください。

所要時間2分
0

AWS CloudFormation スタックの更新ごとに、Amazon Elastic Compute Cloud (Amazon EC2) の Auto Scaling グループでローリングアップデートを行いたいと思っています。起動テンプレートを毎回変更することは、避けたいです。

解決策

Auto Scaling グループのローリングアップデートを開始するには、UpdatePolicy 属性を使用します。

CloudFormation テンプレートの起動設定では、AWS::EC2::LaunchTemplate リソースタイプの UserData プロパティにある Toggle パラメータを参照するのがベストプラクティスです。たとえば、スタックの更新中に Toggle 値を true から false に設定すると、UserData プロパティを変更したことになります。このアクションにより、CloudFormation は新しい起動テンプレートバージョンを作成するよう求められます。

以下の解決策は、Auto Scaling グループで AutoScalingRollingUpdate ポリシーを設定済みであり、Auto Scaling グループが AWS::EC2::LaunchTemplate を参照するよう設定していることを前提としています。

重要: Toggle パラメータをテンプレートに追加するときに、UserData プロパティの他の要素を乱さないようにしてください。

ローリングアップデートを設定するには、次の手順を実行します。

  1. CloudFormation テンプレートで、Toggle をパラメータとして定義します。
    JSON ファイルの場合は、次のコードを入力します。

        "Parameters": {
            "Toggle": {
                "Type": "String",
                "AllowedValues": [
                    "true",
                    "false"
                ],
                "Default": "true",
                "Description": "Toggle parameter to force ASG update"
            }
        }

    YAML ファイルの場合は、次のコードを入力します。

    Parameters:
      Toggle:
        Type: String
        AllowedValues:
          - 'true'
          - 'false'
        Default: 'true'
        Description: 'Toggle parameter to force ASG update'
  2. テンプレートの起動設定で、UserData プロパティの Toggle パラメータを参照します。
    JSON の例:

            "LaunchTemplate": {
                "Type": "AWS::EC2::LaunchTemplate",
                "Properties": {
                    "LaunchTemplateData": {
                        "ImageId": { "Ref": "ImageId" },
                        "UserData": {
                            "Fn::Base64": {
                                "Fn::Join": [
                                    "",
                                    [
                                        "#!/bin/bash\n",
                                        "echo \"Toggle parameter is set to ",
                                        {
                                            "Ref": "Toggle"
                                        },
                                        "\"\n"
                                        ...
                                        ...
                                    ]
                                ]
                            }
                        },
                        "InstanceType": { "Ref": "InstanceType" }
                    }
                }

    YAML の例:

      LaunchTemplate:
        Type: AWS::EC2::LaunchTemplate
        Properties:
          LaunchTemplateData:
            ImageId: !Ref ImageId
            UserData:
              Fn::Base64:
                !Sub |
                  #!/bin/bash
                  echo "Toggle parameter is set to ${Toggle}"
                  ...
                  ...
            InstanceType: !Ref InstanceType
  3. スタックを作成します

  4. ローリングアップデートを開始するために、現在の設定に応じて、Toggle パラメータの値を true から false に、またはfalse から true に変更します。

注: 更新に置換を必要とするプロパティに対しても (LaunchTemplateName など)、上記の解決策を使用できます。

AWS公式
AWS公式更新しました 2ヶ月前
コメントはありません

関連するコンテンツ