AWS CloudFormation スタックを更新するときに、 Auto Scaling グループを正しく更新する方法を教えてください。

最終更新日: 2020 年 3 月 11日

AWS CloudFormation スタックの更新中に Auto Scaling グループを更新しましたが、期待する結果が得られませんでした。

簡単な説明

AWS::AutoScaling::AutoScalingGroup リソースは、UpdatePolicy 属性を使用して、AWS CloudFormation スタックの更新時に Auto Scaling グループリソースがどのように更新されるかを定義します。UpdatePolicy 属性が正しく設定されていない場合、ローリング更新によって予期しない結果が生成される可能性があります。

AWS CloudFormation が Auto Scaling グループのローリング更新を処理する方法は、AutoScalingRollingUpdate ポリシー を使用して制御できます。この共通的なアプローチでは、同じ Auto Scaling グループを保持し、設定したパラメータに基づいて古いインスタンスの置き換えを行います。

注: 次の解決方法では、AutoScalingRollingUpdate ポリシーのみを扱っています。AutoScalingReplacingUpdate ポリシー を使用すると、スタックのロールバックを即座に失敗せずに実行できます。

AutoScalingRollingUpdate ポリシーでは、以下の設定オプションがサポートされています。

"UpdatePolicy": {
  "AutoScalingRollingUpdate": {
    "MaxBatchSize": Integer,
    "MinInstancesInService": Integer,
    "MinSuccessfulInstancesPercent": Integer,
    "PauseTime": String,
    "SuspendProcesses": [ List of processes ],
    "WaitOnResourceSignals": Boolean
  }
}

解決方法

スタックの更新中に Auto Scaling グループが正しく更新されることを妨げている原因を確認するには、必要に応じて以下のトラブルシューティングシナリオを実行してください。

WaitOnResourceSignals と PauseTime を設定して成功シグナルの問題を回避する

AutoScalingRollingUpdate ポリシーで、[WaitOnResourceSignals] プロパティを falseに定義します。

注: WaitOnResourceSignalstrue に設定されている場合、PauseTime はタイムアウト値に変更されます。AWS CloudFormation は、PauseTime 値で指定された最大時間まで、成功シグナルが受信されるのを待ちます。シグナルが受信されない場合、AWS CloudFormation は更新をキャンセルします。その後、AWS CloudFormation は、PauseTime の値を含め元と同じ設定で、スタックをロールバックします。詳細については、「Auto Scaling グループに UpdatePolicy を追加する」を参照してください。

スタックのロールバックを回避するために [MinSuccessfulInstancesPercent] を設定する

ローリング更新中に多数のインスタンスを置き換え、各インスタンスの成功シグナルを待つような場合には、AutoScalingRollingUpdate ポリシーの [MinSuccessfulInstancesPercent] プロパティの値を設定します。

注意: MinSuccessfulInstancesPercent プロパティの設定は、単一のインスタンスが起動に失敗した場合に AWS CloudFormation がスタック全体をロールバックすることを阻止します。詳細については、「UpdatePolicy 属性」を参照してください。

SuspendProcesses を設定して、Auto Scaling グループに対する予期しない変更を防ぐ

ローリング更新中に、次の Auto Scaling プロセスを停止します。

  • HealthCheck
  • ReplaceUnhealthy
  • AZRebalance
  • AlarmNotification
  • ScheduledActions

重要: Elastic Load Balancing で Auto Scaling グループを使用している場合は、Launch、Terminate、AddToLoadBalancer の各プロセスは停止しないでください。これらのプロセスは、ローリング更新を行うために必要です。

注: 予期しないスケーリングアクションによって、ローリング更新中に Auto Scaling グループの状態が変更された場合、更新が失敗する可能性があります。この失敗は、Auto Scaling グループに対する AWS CloudFormation によるモニタリングが、一貫していないことが原因である可能性があります。


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


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