AWS CloudFormation の UpdatePolicy 属性を使用すると、Auto Scaling グループのリソースに対する更新の動作を制御することができます。Auto Scaling グループに対してローリング更新を実行すると、正しい設定を構成していなかった場合、予期しない動作が発生します。

AWS::AutoScaling::AutoScalingGroup リソースは、UpdatePolicy 属性をサポートします。これは、CloudFormation スタックの更新が行われる際の Auto Scaling グループのリソースの更新方法を定義するために使われます。Auto Scaling グループの更新の一般的なアプローチは、ローリング更新を実行することです。これは AutoScalingRollingUpdate ポリシーを指定することよって行われます。これは、同じ Auto Scaling グループを保持したまま、指定したパラメーターに応じて、古いインスタンスを新しいインスタンスで置き換えます。
: この記事は、AutoScalingReplacingUpdate ポリシーではなく、ローリング更新にフォーカスしています。

AutoScalingRollingUpdate ポリシーは、いくつかの構成オプションをサポートしています。以下にサンプルのテンプレートを挙げておきます。

"UpdatePolicy": {

    "AutoScalingRollingUpdate": {

        "MaxBatchSize": Integer,

        "MinInstancesInService": Integer,

        "MinSuccessfulInstancesPercent": Integer

        "PauseTime": String,

        "SuspendProcesses": [ List of processes ],

        "WaitOnResourceSignals": Boolean

     }

}

SuspendProcesses
ローリング更新を実行する場合、グループに予期しない変更が行われるのを避けるために、Auto Scaling プロセスは一時停止させておく必要があります。ローリング更新の最中に予期しないスケーリングアクションによってグループの状態が変更されると、CloudFormation が不整合のグループビューを持つ原因となり、ローリング更新は失敗します。一時停止させるプロセスは、HealthCheck、ReplaceUnhealthy、AZRebalance、AlarmNotification、および ScheduledActions などです。
: ローリング更新の操作に必要なため、次のプロセスは一時停止させないでください。Launch、Terminate、および AddToLoadBalancer (Elastic Load Balancing で Auto Scaling グループが使われている場合)。

MinSuccessfulInstancesPercent
ローリング更新時に大量のインスタンスを置き換えて、各インスタンスからの成功シグナルを待つ場合、MinSuccessfulInstancePercent 値を指定する必要があります。これは、1 つのインスタンスの起動に失敗した場合、CloudFormation によって全スタックがロールバックされてしまうのを防止するのに役立ちます。たとえば、AMI の 10 個のインスタンスを置き換えるためにローリング更新を実行する場合、最初の 9 つでは成功して、最後のインスタンスで一時的な問題によって失敗しても、CloudFormation によって全スタックが更新されて、ロールバックが試みられることはありません。MinSuccessfulInstancePercent に 50% を設定した場合、CloudFormation は 5 つのインスタンスから成功のシグナルが送られてきた段階で、すべての AutoScaling グループのリソースに UPDATE_COMPLETE をマークします。新しい AMI は正常に動作し、トラフィックの管理に従事するインスタンスが十分にあるからです。後続するインスタンスに起動に失敗したものがあっても、Auto Scaling グループのヘルスチェックによって、いつかは置き換えられます。

WaitOnResourceSignals + PauseTime
WaitOnResourceSignals を有効にすると、CloudFormation は、あなたが成功シグナルを受け取ってから、次回のスケーリングアクションを実行するようになります。
: WaitOnResourceSignals に true を設定している場合、PauseTime はタイムアウト値になることに注意してください。CloudFormation は、成功シグナルを PauseTime 値で指定された最大時間待ちます。シグナルを受け取れなかった場合、更新をキャンセルして、スタックのロールバックを試みます。ロールバックをするために、CloudFormation は同じ設定を使ってローリング更新を実行するので、ロールバック時には同じ PauseTime 値が使われます。インスタンスには、ブートストラップや成功のシグナルのために、十分に長い PauseTime を指定することをお勧めします。

CloudFormation、ローリング更新、UpdatePolicy、AutoScaling、RollingUpdate


このページは役に立ちましたか? はい | いいえ

AWS サポートナレッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2016 年 9 月 9 日