タスクを置き換えて Amazon ECS サービスをデプロイする - Amazon Elastic Container Service

タスクを置き換えて Amazon ECS サービスをデプロイする

ローリング更新 (ECS) デプロイタイプを使用するサービスを作成すると、Amazon ECS サービススケジューラは現在実行中のタスクを新しいタスクに置き換えます。ローリング更新中にサービスに対して Amazon ECS が追加または削除するタスク数は、サービスデプロイ設定により制御されます。デプロイ設定は以下のとおりです。

  • minimumHealthyPercent は、デプロイメント中またはコンテナインスタンスがドレインしているときに、サービスに対して実行する必要があるタスク数の下限を、サービスに必要なタスク数の割合 (%) として表します。この値は切り上げられます。例えば、最小正常率が 50 で、必要なタスク数が 4 の場合、スケジューラは 2 つの新しいタスクを開始する前に既存のタスクを 2 つ停止できます。同様に、最小正常率が 75% で、必要なタスク数が 2 の場合、結果の値も 2 であるため、スケジューラはタスクを停止できません。

    タスクに異常が発生すると、Amazon ECS サービススケジューラは最初に置換タスクを開始し、置換タスクが正常になるまで minimumHealthyPercent のタスクを維持します。置き換えタスクが起動して正常になると、異常なタスクは段階的に停止します。

  • maximumPercent は、デプロイメント中またはコンテナインスタンスがドレインしているときに、サービスに対して実行する必要があるタスク数の上限を、サービスに必要なタスク数の割合 (%) として表します。この値は切り捨てられます。例えば、最大パーセンテージが 200 で、目的のタスク数が 4 の場合、スケジューラは既存のタスクを 4 つ停止する前に 4 つの新しいタスクを開始できます。同様に、最大比率が 125 で、必要なタスク数が 3 の場合、結果の値も 3 であるため、スケジューラはタスクを開始できません。

重要

最小正常率または最大正常率を設定するときは、デプロイが開始されたときにスケジューラが 1 つ以上のタスクを停止または開始できることを確認する必要があります。無効なデプロイメント構成が原因でサービスのデプロイメントが停止している場合、サービスイベントメッセージが送信されます。詳細については、「サービス (service-name) は、サービスデプロイメント構成のため、デプロイメント中にタスクを停止または開始できませんでした。minimumHealthyPercent または maximumPercent の値を更新してから、もう一度試してください。」を参照してください。

ローリングデプロイでは、デプロイサーキットブレーカーを使用してタスクが定常状態に達したかどうかを判断します。デプロイサーキットブレーカーは、オプションで障害発生時にデプロイをロールバックできます。

コンテナイメージの解決

サービス内のすべてのタスクで同じコンテナイメージを使用するために、Amazon ECS はタスク定義で指定されたコンテナイメージ名とイメージタグをコンテナイメージダイジェストに解決します。単一のタスクを実行および維持するサービスを作成すると、そのタスクはコンテナイメージダイジェストを確立するのに使用されます。複数のタスクを実行および維持するサービスを作成すると、サービススケジューラはデプロイ中にまず 1 つのタスクを開始します。この 1 つ目のタスクは、コンテナイメージダイジェストを確立するのに使用されます。

コンテナイメージダイジェストが確立されると、Amazon ECS はこのダイジェストを、他の対象タスクの開始や、その後のサービスの更新に使用します。この結果、サービス内のすべてのタスクで常に同じコンテナイメージが実行され、ソフトウェアのバージョン整合性が得られます。

コンテナイメージダイジェストの確立を 3 回以上試行しても失敗した場合、デプロイはイメージダイジェストの解決なしで続行されます。デプロイサーキットブレーカーが有効になっている場合、デプロイも失敗し、ロールバックされます。

イメージダイジェスト解決に対応した Fargate Linux プラットフォームの最低バージョンは 1.3.0 です。イメージダイジェスト解決に対応した Fargate Windows プラットフォームの最低バージョンは 1.0.0 です。

1.31.0 より前のバージョンの Amazon ECS エージェントは、イメージダイジェストの解決をサポートしていません。エージェントバージョン 1.31.01.69.0 では、Amazon ECR リポジトリにプッシュされたイメージに対してのみイメージダイジェストの解決がサポートされています。エージェントバージョン 1.70.0 以降では、すべてのイメージに対してイメージダイジェストの解決がサポートされています。

注記
  • Amazon ECS は、Amazon GuardDuty セキュリティエージェントや Service Connect プロキシなど、Amazon ECS によって管理されるサイドカーコンテナのダイジェストをキャプチャしません。

  • 複数のタスクがあるサービスでコンテナイメージの解決に関連する潜在的なレイテンシーを減らすには、EC2 コンテナインスタンスで Amazon ECS エージェントバージョン 1.83.0 以降を実行してください。潜在的なレイテンシーを完全になくすには、タスク定義でコンテナイメージダイジェストを指定してください。

  • タスク数が 0 のサービスを作成した場合、タスク数が 0 よりも大きいサービスの別のデプロイをトリガーするまで Amazon ECS はコンテナダイジェストを確立できません。

  • 更新されたイメージダイジェストを確立するために、新しいデプロイを強制できます。この更新されたダイジェストは新しいタスクの開始に使用され、既に実行中のタスクには影響しません。新しいデプロイの強制の詳細については、「Amazon ECS API リファレンス」の「forceNewDeployment」を参照してください。

障害の検出

デプロイが失敗したタイミングをすばやく特定し、必要に応じて最後に動作していたデプロイに失敗をロールバックする方法が 2 つあります。

これらの方法は個別に使用することも、一緒に使用することもできます。両方の方法を使用する場合、失敗に対するいずれかの方法の失敗の基準が満たされ次第、デプロイは失敗に設定されます。

使用するメソッドを決定する際は、以下のガイドラインを参考にします。

  • サーキットブレーカー - タスクが開始できないときにデプロイを停止する場合は、このメソッドを使用します。

  • CloudWatch アラーム - アプリケーションメトリクスに基づきデプロイを停止する場合は、このメソッドを使用します。