Amazon ECS での AWS Fargate タスクのメンテナンスに関するよくある質問 - Amazon Elastic Container Service

Amazon ECS での AWS Fargate タスクのメンテナンスに関するよくある質問

Fargate タスクのメンテナンスと廃止とは

AWS は、AWS Fargate の基盤インフラストラクチャを維持する責任を負います。AWS は、プラットフォームバージョンのリビジョンを、インフラストラクチャ用の新しいリビジョンに置き換える必要があるタイミングを決定します。これはタスクの廃止と呼ばれます。プラットフォームバージョンのリビジョンが廃止されると、AWS からタスクの廃止通知が送信されます。サポート対象のプラットフォームバージョンを定期的に更新して、Fargate ランタイムソフトウェアと、オペレーティングシステムやコンテナランタイムなどの内在的な依存関係の更新を含む新しいリビジョンを導入しています。新しいリビジョンが利用可能になったら、すべてのお客様のワークロードが Fargate プラットフォームバージョンの最新リビジョンで実行されるように、古いリビジョンを廃止します。リビジョンが廃止されると、そのリビジョンで実行されていたすべてのタスクが停止します。

Amazon ECS タスクは、サービスタスクまたはスタンドアロンタスクのどちらかに分類されます。サービスタスクは、Amazon ECS サービスの一部としてデプロイされ、Amazon ECS スケジュールによって制御されます。詳細については、「Amazon ECS サービス」を参照してください。スタンドアロンタスクとは、Amazon ECS RunTask API によって開始されるタスクであり、直接または、Amazon EventBridge によって開始されるスケジュールされたタスク、AWS Batch、AWS Step Functions などの外部スケジューラにより開始されます。

サービスタスクについては、AWS よりも前にこれらのタスクを置き換える場合を除いて、何もする必要はありません。Amazon ECS スケジューラは、タスクを停止する際、最小正常稼働率を使用して新しいタスクを起動し、サービスに必要とされる数を維持しようとします。デフォルトでは、サービスの最小正常率は 100% なので、タスクの停止前にまず新しいタスクが開始されます。サービスタスクは、これと同様の方法で、サービスのスケーリング、設定変更のデプロイ、タスク定義リビジョンのデプロイの際に定期的に置き換えられます。タスクの終了プロセスに備えるために、このシナリオを想定してアプリケーションの動作をテストすることをお勧めします。これを行うには、サービス内の個々のタスクを停止して、復元力をテストします。

スタンドアロンタスクの廃止に関して、AWS は廃止日以降、タスクを停止します。タスクが停止した場合でも、代替のタスクは起動されません。これらのタスクを継続して実行する必要がある場合は、通知で示された時間より前に、実行中のタスクを停止し、代替タスクを起動する必要があります。そのためユーザーには、スタンドアロンタスクの状態をモニタリングすることと、必要に応じて停止したタスクを置き換えるロジックの実装が推奨されます。

タスクが停止したシナリオに関係なく、describe-tasks を実行することができます。レスポンス内の stoppedReason は ECS is performing maintenance on the underlying infrastructure hosting the task です。

タスクのメンテナンスは、新しいプラットフォームバージョンのリビジョンを新しいリビジョンで置き換える必要があるときに適用されます。内在する Fargate ホストに問題がある場合、Amazon ECS はタスク終了通知を行わず、ホストを交換します。

タスクの終了通知に含まれるもの

タスク終了通知は、AWS Health ダッシュボードおよび、登録されたメールアドレス宛に電子メールで送信され、次の情報が含まれています。

  • タスクの廃止日 - タスクは、この日またはそれ以降に停止されます。

  • タスクの ID (スタンドアロンタスクの場合)。

  • サービスが実行されるクラスターの ID とサービスの ID (サービスタスクの場合)。

  • 次に実行する必要があるステップ。

通常、AWS リージョン のサービスタスクとスタンドアロンのタスクについて、それぞれ 1 件の通知が送信されます。ただし、場合によっては、タスクタイプごとに複数のイベントを受け取ることがあります。たとえば、廃止するタスクが多すぎて通知メカニズムの制限を超える場合などです。

廃止がスケジュールされているタスクは次の方法で識別できます。

  • AWS Health Dashboard

    AWS Health 通知は Amazon EventBridge 経由で Amazon Simple Storage Service などのアーカイブストレージに送信すること、AWS Lambda 関数の実行などの自動化されたアクションを取ること、または Amazon Simple Notification Service などのその他の通知システムに送信することができます。詳細については「Amazon EventBridge による AWS Health イベントのモニタリング」を参照してください。Amazon Chime、Slack、または Microsoft Teams に通知を送信するための設定例については、GitHub の「AWS Health Aware」リポジトリを参照してください。

    EventBridge イベントの例を次に示します。

    { "version": "0", "id": "3c268027-f43c-0171-7425-1d799EXAMPLE", "detail-type": "AWS Health Event", "source": "aws.health", "account": "123456789012", "time": "2023-08-16T23:18:51Z", "region": "us-east-1", "resources": [ "cluster/service", "cluster/service" ], "detail": { "eventArn": "arn:aws:health:us-east-1::event/ECS/AWS_ECS_TASK_PATCHING_RETIREMENT/AWS_ECS_TASK_PATCHING_RETIREMENT_test1", "service": "ECS", "eventScopeCode": "ACCOUNT_SPECIFIC", "communicationId": "7988399e2e6fb0b905ddc88e0e2de1fd17e4c9fa60349577446d95a18EXAMPLE", "lastUpdatedTime": "Wed, 16 Aug 2023 23:18:52 GMT", "eventRegion": "us-east-1", "eventTypeCode": "AWS_ECS_TASK_PATCHING_RETIREMENT", "eventTypeCategory": "scheduledChange", "startTime": "Wed, 16 Aug 2023 23:18:51 GMT", "endTime": "Fri, 18 Aug 2023 23:18:51 GMT", "eventDescription": [ { "language": "en_US", "latestDescription": "\\nA software update has been deployed to Fargate which includes CVE patches or other critical patches. No action is required on your part. All new tasks launched automatically uses the latest software version. For existing tasks, your tasks need to be restarted in order for these updates to apply. Your tasks running as part of the following ECS Services will be automatically updated beginning Wed, 16 Aug 2023 23:18:51 GMT.\\n\\nAfter Wed, 16 Aug 2023 23:18:51 GMT, the ECS scheduler will gradually replace these tasks, respecting the deployment settings for your service. Typically, services should see little to no interruption during the update and no action is required. When AWS stops tasks, AWS uses the minimum healthy percent (1) and launches a new task in an attempt to maintain the desired count for the service. By default, the minimum healthy percent of a service is 100 percent, so a new task is started first before a task is stopped. Service tasks are routinely replaced in the same way when you scale the service or deploy configuration changes or deploy task definition revisions. If you would like to control the timing of this restart you can update the service before Wed, 16 Aug 2023 23:18:51 GMT, by running the update-service command from the ECS command-line interface specifying force-new-deployment for services using Rolling update deployment type. For example:\\n\\n$ aws ecs update-service -service service_name \\\n--cluster cluster_name -force-new-deployment\\n\\nFor services using Blue/Green deployment type with AWS CodeDeploy:\\nPlease refer to create-deployment document (2) and create new deployment using same task definition revision.\\n\\nFor further details on ECS deployment types, please refer to ECS Deployment Developer Guide (1).\\nFor further details on Fargate's update process, please refer to the AWS Fargate User Guide (3).\\nIf you have any questions or concerns, please contact AWS Support (4).\\n\\n(1) https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html\\n(2) https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html\\n(3) https://docs.aws.amazon.com/AmazonECS/latest/userguide/task-maintenance.html\\n(4) https://aws.amazon.com/support\\n\\nA list of your affected resources(s) can be found in the 'Affected resources' tab in the 'Cluster/ Service' format in the AWS Health Dashboard. \\n\\n" } ], "affectedEntities": [ { "entityValue": "cluster/service" }, { "entityValue": "cluster/service" } ] } }
  • Email(メール)

    AWS アカウント ID に対して登録された E メールアドレスに E メールが送信されます。

タスクの廃止待ち時間を変更できますか?

Fargate がタスク廃止を開始する時間を設定できます。アップデートをすぐに適用する必要があるワークロードの場合は、即時設定 (0) を選択します。特定の時間帯にしかタスクを停止できない場合など、詳細な制御が必要な場合は、7 日 (7) または 14 日 (14) のオプションを設定します。

新しいプラットフォームバージョンのリビジョンを早く取得できるように、待機時間を短くすることをお勧めします。

待機時間を設定するには、ルートユーザーまたは管理者ユーザーで put-account-setting-default または put-account-setting を実行します。fargateTaskRetirementWaitPeriod オプションを name に使用し、value オプションを次のいずれかの値に設定します。

  • 0 - AWS から通知が送信され、影響を受けたタスクが直ちに廃止されます。

  • 7 - AWS から通知が送信され、7 日間待機してから、影響を受けたタスクの廃止が開始されます。

  • 14 - AWS から通知が送信され、14 日間待機してから、影響を受けたタスクの廃止が開始されます。

デフォルトは 7 日間です。

詳細については、「Amazon Elastic Container Service API リファレンス」の「put-account-setting-default」と「put-account-setting」を参照してください。

詳細については、「AWS Fargate タスク廃止の待機時間」を参照してください。

他の AWS サービスを通じてタスク終了通知を受け取ることはできますか?

AWS は、タスク終了通知を、AWS Health Dashboard および AWS アカウント の主要メール連絡先に送信します。AWS Health Dashboard は、EventBridge を含む他の AWS サービスとのさまざまな統合を提供します。EventBridge を使用して、通知の可視性を自動化できます(たとえば、メッセージを ChatOps ツールに転送するなど)。詳細については、「ソリューションの概要: タスク廃止通知の取得」を参照してください。

タスクの廃止はスケジュールされた後に変更できますか?

いいえ。スケジュールはタスクの廃止待ち時間に基づいており、デフォルトでは 7 日間です。さらに時間が必要な場合は、待機期間を 14 日間に設定することもできます。詳細については、「タスクの廃止待ち時間を変更できますか?」を参照してください。この構成の変更は、今後予定されている廃止に適用されます。現在予定されている廃止には影響しません。ご不明な点がある場合は、AWS Support までお問い合わせください。

タスク交換のタイミングを制御することはできますか?

ローリングデプロイを使用するサービスの場合は、廃止の開始時刻前に force-deployment オプションで update-service を使用してサービスを更新します。

次の update-service 例では、force-deployment オプションを使用しています。

aws ecs update-service —-service service_name \ --cluster cluster_name \ --force-new-deployment

ブルー/グリーンデプロイを使用するサービスの場合は、AWS CodeDeploy で新しいデプロイメントを作成する必要があります。デプロイを作成する方法については、AWS Command Line Interface リファレンスの「create-deployment」を参照してください。

Amazon ECS はサービスの一部であるタスクをどのように処理しますか?

Amazon ECS は、Fargate の廃止期間が始まると、サービス内の影響を受けるタスクを徐々に置き換えます。Amazon ECS がタスクを停止すると、サービスの最小正常稼働率を使用して新しいタスクを起動し、サービスに必要なタスク数を維持します。デフォルトの最小正常稼働率は 100% なので、新しいタスクはタスクが停止される前に開始されます。サービスタスクは、これと同様の方法で、サービスのスケーリング、設定変更のデプロイ、タスク定義リビジョンのデプロイの際に定期的に置き換えられます。最小正常化同率について詳しくは、「デプロイ設定」を参照してください。

Amazon ECS はスタンドアロンタスクを自動的に処理できますか?

いいえ。AWS は、RunTask が開始したスタンドアロンタスク、スケジュールされたタスク (EventBridge Scheduler の使用など)、AWS Batch、AWS Step Functions に対する交換タスクを作成できません。Amazon ECS はサービスの一部であるタスクのみを管理します。