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] プロパティを設定すると、1 つのインスタンスのみで起動に失敗した場合でも、AWS CloudFormation はスタック全体のロールバック行いません。詳細については「 UpdatePolicy Attribute」をご参照ください。

Auto Scaling グループへの予期しない変更を回避できるように SuspendProcesses を設定する

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

  • HealthCheck
  • ReplaceUnhealthy
  • AZRebalance
  • AlarmNotification
  • ScheduledActions

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

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


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

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


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