ローリング更新
ローリング更新 (ECS
) デプロイタイプがサービスに使用されている場合、新しいサービスデプロイが開始されると、Amazon ECS サービススケジューラは現在実行中のタスクを新しいタスクに置き換えます。ローリング更新中にサービスに対して Amazon ECS が追加または削除するタスク数は、デプロイ設定により制御されます。デプロイメント設定は、サービスの作成時に定義される minimumHealthyPercent
値と maximumPercent
値で構成されますが、既存のサービスから更新することもできます。
minimumHealthyPercent
は、デプロイメント中またはコンテナインスタンスがドレインしているときに、サービスに対して実行する必要があるタスク数の下限を、サービスに必要なタスク数の割合 (%) として表します。この値は切り上げられます。たとえば、最小正常率が 50
で、必要なタスク数が 4 の場合、スケジューラは 2 つの新しいタスクを開始する前に既存のタスクを 2 つ停止できます。同様に、最小正常率が 75% で、必要なタスク数が 2 の場合、結果の値も 2 であるため、スケジューラはタスクを停止できません。
maximumPercent
は、デプロイメント中またはコンテナインスタンスがドレインしているときに、サービスに対して実行する必要があるタスク数の上限を、サービスに必要なタスク数の割合 (%) として表します。この値は切り捨てられます。例えば、最大パーセンテージが 200
で、目的のタスク数が 4 の場合、スケジューラは既存のタスクを 4 つ停止する前に 4 つの新しいタスクを開始できます。同様に、最大比率が 125
で、必要なタスク数が 3 の場合、結果の値も 3 であるため、スケジューラはタスクを開始できません。
最小正常率または最大正常率を設定するときは、デプロイメントがトリガーされたときにスケジューラが 1 つ以上のタスクを停止または開始できることを確認する必要があります。無効なデプロイメント構成が原因でサービスのデプロイメントが停止している場合、サービスイベントメッセージが送信されます。詳細については、「サービス (service-name) は、サービスデプロイメント構成のため、デプロイメント中にタスクを停止または開始できませんでした。minimumHealthyPercent または maximumPercent の値を更新してから、もう一度試してください。」を参照してください。
新しいサービスデプロイが開始されたとき、またはデプロイが完了すると、Amazon ECS はサービスデプロイ状態変更イベントを EventBridge に送信します。これにより、サービスデプロイの状態を監視するためのプログラムによる方法がもたらされます。詳細については、「サービスデプロイ状態変更イベント」を参照してください。
ローリング更新デプロイタイプを使用する新しい Amazon ECS サービスを作成するには、「クラシックコンソール内の Amazon ECS サービスの作成」を参照してください。
デプロイサーキットブレーカーの使用
デフォルトでは、ローリング更新プログラムのデプロイタイプを使用するサービスが新しいデプロイを開始すると、必要な数に達するまで、サービススケジューラは新しいタスクを起動します。任意でサービスにデプロイサーキットブレーカーのロジックを使用することができます。これにより、安定した状態に達しない場合、デプロイが失敗した状態に移行します。デプロイサーキットブレーカーロジックは、デプロイが失敗したときに、最後に完了したデプロイにロールバックするように Amazon ECS に指示することもできます。
次の create-service
AWS CLI の例では、デプロイサーキットブレーカーのロールバックが有効になった場合、Linux サービスを作成する方法を示しています。
aws ecs create-service \ --service-name
MyService
\ --deployment-controller type=ECS
\ --desired-count2
\ --deployment-configuration "deploymentCircuitBreaker={enable=true
,rollback=true
}" \ --task-definitionsample-fargate:1
\ --launch-typeFARGATE
\ --platform-osLINUX
\ --platform-version1.4.0
\ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321
],securityGroups=[sg-12344321
],assignPublicIp=ENABLED
}"
サービスでデプロイサーキットブレーカーロジックを有効にする場合は、次の事項を考慮する必要があります。
-
サービスデプロイに正常に実行されたタスクが少なくとも 1 つある場合、デプロイで以前または今後のタスクが失敗したことに関係なく、サーキットブレーカーロジックは開始されません。
-
この
DescribeServices
レスポンスは、デプロイの状態、rolloutState
およびrolloutStateReason
についての洞察を提供します。新しいデプロイが開始されると、ロールアウトの状態はIN_PROGRESS
状態から始まります。サービスが定常状態になると、ロールアウトの状態はCOMPLETED
に移行します。サービスが定常状態にならず、サーキットブレーカーが有効になっている場合、デプロイはFAILED
状態に移行します。FAILED
状態のデプロイでは、新しいタスクは起動されません。 -
Amazon ECS は開始および完了したデプロイに対して送信されるサービスデプロイの状態変更イベントに加えて、Amazon ECS は サーキットブレーカーが有効になったデプロイが失敗した場合にもイベントを送信します。これらのイベントは、デプロイが失敗した理由やロールバックのためにデプロイが開始されたかどうかについての詳細情報を提供します。詳細については、「サービスデプロイ状態変更イベント」を参照してください。
-
以前のデプロイが失敗し、ロールバックが発生したために新しいデプロイが開始された場合、サービスデプロイ状態変更イベントの
reason
フィールドには、ロールバックのためにデプロイが開始されたことが示されます。 -
デプロイサーキットブレーカーは、ローリング更新 (
ECS
) デプロイコントローラーを使用し、Classic Load Balancer を使用しない Amazon ECS サービスでのみサポートされています。
失敗しきい値
デプロイサーキットブレーカはしきい値を計算し、その値を使用してデプロイを FAILED
状態に移行するタイミングを判断します。
デプロイサーキットブレーカの最小しきい値は 10 であり、最大しきい値は 200 です。値を次の式に使用してデプロイの失敗を判断します。
Minimum threshold <= 0.5 * desired task count
=> maximum threshold
計算の結果が最小値 10 を下回った場合、障害のしきい値は 10 に設定されます。計算の結果が最大値 200 を上回った場合、障害のしきい値は 200 に設定されます。
しきい値のどちらも変更できません。
デプロイステータスチェックには 2 つの段階があります。
-
デプロイサーキットブレーカは、デプロイの一部であるタスクを監視して
RUNNING
状態のタスクを確認します。スケジューラは、現在のデプロイのタスクがRUNNING
状態のときに失敗条件を無視して次のステージに進みます。タスクRUNNING
状態に到達できなかった場合、デプロイサーキットブレーカは故障数を 1 つ増やします。障害カウントがしきい値に等しい場合、デプロイはFAILED
としてマークされます。 -
RUNNING
状態のタスクが 1 つ以上ある場合、このステージが開始されます。デプロイサーキットブレーカは、現在のデプロイのタスクの次のリソースにヘルスチェックを実行します。-
Elastic Load Balancing ロードバランサー
-
AWS Cloud Map サービス
-
Amazon ECS コンテナヘルスチェック
タスクのヘルスチェックが失敗した場合、デプロイサーキットブレーカーは障害数を 1 つ増やします。障害カウントがしきい値に等しい場合、デプロイは
FAILED
としてマークされます。 -
例をいくつか、次のテーブルに示します。
希望タスク数 | 計算 | Threshold |
---|---|---|
1 |
|
10 (計算値は最小値より小さい) |
25 |
|
13 (値は切り上げられます) |
400 |
|
200 |
800 |
|
200 (計算値は最大値を超えています) |
ロールバックオプションの使用に関するその他の例については、Amazon ECS デプロイサーキットブレーカーのお知らせ