[アップデート] AWS Fargate プラットフォームのメンテナンスで置き換えられるタスクの待機時間を指定可能になりました

Fargate のメンテナンスで発生するタスクの置き換え処理に関して、タスクを待機時間を指定できる様になりました。このアップデートで定期的にタスクの置き換えを実装しているワークロードで Fargate のメンテナンス対応も定期処理の事項に含めやすくなりました。ただし、重要なセキュリティアップデートがある場合は、指定した待機時間を上書き、タスクの置き換えを行うため注意です。
2023.09.21

こんにちは! AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。

What's New with AWS? には、記載されていないのですが、 AWS Fargate プラットフォームのメンテナンスで置き換えられるタスクの待機時間を指定できる様になりました。

AWS Fargate のメンテナンス

AWS Fargate は、セキュリティ上の脆弱性やパフォーマンスの向上等の理由から、 ECS タスクを起動するプラットフォームのメンテナンスを行います。

メンテナンスでは、廃止対象として指定された古いプラットフォームで ECS タスクが起動していた場合、タスクの停止処理が起こり、サービスで起動しているタスクの場合だと、代替タスクが新しいプラットフォームで起動します。

スタンドアロンで起動しているタスクの場合は、代替タスクが自動で起動しないため、別の仕組みを実装して起動してあげる必要があります。

代替タスクの起動

再度の説明になりますが、サービスで起動しているタスクに対して、AWS Fargate のメンテナンスが発生した場合、代替タスクが新しいプラットフォームで起動します。

タスクのスケジューリングには、 ECS サービスの minimumHealthyPercent の値が大きく関係します。

minimumHealthyPercent を 100 % に設定した場合、 新しいプラットフォームリビジョンで ECS タスクの起動が完了した後に、古いプラットフォームリビジョンで起動しているタスクの停止処理を行います。

minimumHealthyPercent が 50%、 desiredCount が 4 タスクの場合、 新しいプラットフォームリビジョンで ECS タスクを2つ起動する前に、古いプラットフォームリビジョンで起動しているタスクを2つ停止してアップデートを行う挙動になります。

minimumHealthyPercent

メンテナンスの通知

廃止対象のプラットフォームリビジョンで起動しているタスクのリタイアについては、 AWS Health Dashboard で事前に確認できます。 また、 AWS Health Dashboard に送信されたイベントをもとに、 EventBridge を利用して SNS 等に通知することも可能です。

アップデート内容

今回のアップデートで、廃止対象のプラットフォームリビジョンで起動しているタスクのリタイアを待機できる様になりました。

コンテナの CPU やメモリが日数経過で断続的に上昇してきたから、定期的にタスクの置き換え処理をしたいなぁ、 Fargate のメンテナンス対応も合わせて定期処理に含めたいけど、タスクの待機時間が指定できないからコントロール難しいなぁ」と言った、ツラミを持った方向けのアップデートです。

タスクの待機は 最大 14 日間待機可能で、以下の 3 択で待機時間を指定できます。

  • 0日:AWS から通知が送信され、影響を受けたタスクを直ちに廃止
  • 7日:AWS から通知が送信され、 7 日間待機してから、影響を受けたタスクの廃止が開始
  • 14日:AWS から通知が送信され、 14 日間待機してから、影響を受けたタスクの廃止が開始

ただし、重要なセキュリティアップデートがある場合は、指定した待機時間を問わず、 AWS から通知が送信され、タスクが直ちに廃止されるため注意です。

設定してみた

Fargate タスクの待機時間の指定は ECS のアカウント設定で行います。執筆時点(2023年9月)では、マネジメントコンソールに反映されていなかったため、 AWS CLI から設定してみます。

まずは、 list-account-settings で現在の様子を確認してみます。デフォルトは 14 日であることがわかります。

[cloudshell-user@ip-10-4-2-169 ~]$ aws ecs list-account-settings --effective-settings
{
    "settings": [
        {
            "name": "awsvpcTrunking",
            "value": "disabled",
            "principalArn": "arn:aws:iam::000000000000:role/takakuni"
        },
        {
            "name": "containerInsights",
            "value": "disabled",
            "principalArn": "arn:aws:iam::000000000000:role/takakuni"
        },
        {
            "name": "containerInstanceLongArnFormat",
            "value": "enabled",
            "principalArn": "arn:aws:iam::000000000000:role/takakuni"
        },
        {
            "name": "containerLongArnFormat",
            "value": "enabled",
            "principalArn": "arn:aws:iam::000000000000:role/takakuni"
        },
        {
            "name": "dualStackIPv6",
            "value": "enabled",
            "principalArn": "arn:aws:iam::000000000000:role/takakuni"
        },
        {
            "name": "fargateTaskRetirementWaitPeriod",
            "value": "14",
            "principalArn": "arn:aws:iam::000000000000:role/takakuni"
        },
        {
            "name": "fargateVCPULimit",
            "value": "enabled",
            "principalArn": "arn:aws:iam::000000000000:role/takakuni"
        },
        {
            "name": "serviceLongArnFormat",
            "value": "enabled",
            "principalArn": "arn:aws:iam::000000000000:role/takakuni"
        },
        {
            "name": "serviceLongArnFormat",
            "value": "enabled",
            "principalArn": "arn:aws:iam::000000000000:role/takakuni"
        },
        {
            "name": "tagResourceAuthorization",
            "value": "off",
            "principalArn": "arn:aws:iam::000000000000:role/takakuni"
        },
        {
            "name": "taskLongArnFormat",
            "value": "enabled",
            "principalArn": "arn:aws:iam::000000000000:role/takakuni"
        }
    ]
}

では、14日から0日に変更してみましょう。

リージョン固有に設定したい場合は put-account-setting 、 デフォルトで設定(リージョンに固有の設定がない場合に適用)したい場合は put-account-setting-default で行います。

今回は put-account-setting-default で試してみます。無事設定できていることが確認できました。

[cloudshell-user@ip-10-4-2-169 ~]$ aws ecs put-account-setting-default --name fargateTaskRetirementWaitPeriod --value 0
{
    "setting": {
        "name": "fargateTaskRetirementWaitPeriod",
        "value": "0",
        "principalArn": "arn:aws:iam::000000000000:root"
    }
}
[cloudshell-user@ip-10-4-2-169 ~]$ aws ecs list-account-settings --name fargateTaskRetirementWaitPeriod --effective-settings
{
    "settings": [
        {
            "name": "fargateTaskRetirementWaitPeriod",
            "value": "0",
            "principalArn": "arn:aws:iam::000000000000:root"
        }
    ]
}

まとめ

以上、「AWS Fargate プラットフォームのメンテナンスで置き換えられるタスクの待機時間を指定できる様になりました」でした。

この記事がどなたかの参考になれば幸いです。

AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!