[アップデート] Amazon ECS のアカウント設定でログドライバーのデフォルトブロッキングモードを指定できるようになりました

[アップデート] Amazon ECS のアカウント設定でログドライバーのデフォルトブロッキングモードを指定できるようになりました

Clock Icon2025.04.19

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

Amazon ECS のアカウント設定でログドライバーのデフォルトブロッキングモードを指定できるようになりました。

https://aws.amazon.com/about-aws/whats-new/2025/04/amazon-ecs-set-default-log-driver-blocking-mode/

ログドライバーのブロッキングモード

まず初めにログドライバーのブロッキングモードについておさらいします。

これは、awslogsなどのログドライバーが、 CloudWatch Logs などのログ送信先へ送信不良を起こした際に、どのような挙動を取るか指定するためのオプションです。

image.png
AWSLogs コンテナログドライバーのノンブロッキングモードによるログ損失の防止 | Amazon Web Services ブログ より画像引用

モードは 2 種類あり、次のような違いがあります。

blocking

デフォルトのモードです。標準出力/標準エラー出力への書き込み呼び出しがブロックされ、コードの実行が停止します。ロギングスレッドがブロックされるため、アプリケーションが機能しなくなり、ヘルスチェックの失敗やタスクの終了につながる可能性があります。必要なロググループまたはログストリームを作成できない場合、コンテナの起動に失敗します。

ビジネスクリティカルなトランザクションを記録する場合や、ログの完全性が規制で義務付けられている場合は、こちらのモードを選びます。

non-blocking

送信不良が発生した場合、インメモリバッファにログを格納するモードです。バッファを使い切ると、ログが失われますが、stdout または stderr への書き込み呼び出しはブロックされません。ただし、ECS on Fargate でホストするコンテナの場合、コンテナ起動時にロググループまたはログストリームを作成できない場合、コンテナの起動が失敗します。

ログルーティング先が利用できなくなってもアプリケーションは動作を継続できるため、ログの取得がアプリケーションにとって重要でない場合は可用性が向上します。

バッファサイズはタスク定義内の max-buffer-size で指定します。

"logConfiguration": {
    "logDriver": "awslogs",
    "options": {
        "mode": "non-blocking",
        "max-buffer-size": "25m",
    }
}

https://aws.amazon.com/jp/blogs/news/preventing-log-loss-with-non-blocking-mode-in-the-awslogs-container-log-driver/

このように、アプリケーションの可用性とログ損失にはトレードオフがあります。

アップデート

今まではアカウント設定がなかったため、タスク定義内にて blocking モードがデフォルト設定となっていました。そのため、アカウント内のすべてのログドライバーを non-blocking にしたい場合、各タスク定義の内容を更新する必要がありました。

今回のアップデートで、アカウント全体でのデフォルト値を ECS のアカウント設定(defaultLogDriverMode)で指定できるようになりました。

ドキュメントを読むと、デフォルトのモードは引き続き blocking モードのようです。

The default delivery mode is blocking.

もちろん、この設定値はデフォルトのためタスク定義内で個別に設定されている場合は、そちらが優先されます。

If you don't specify a delivery mode in your container definition's logConfiguration, the mode you specify using this account setting will be used as the default.

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#default-log-driver-mode

内容を確認してみる

ブロッキングモードの設定は Amazon ECS API または AWS CLI 経由で設定します。

The defaultLogDriverMode account setting can only be changed using either the Amazon ECS API or the AWS CLI. For more information, see Modifying Amazon ECS account settings.

マネジメントコンソールを確認してみると、本機能の設定項目は見当たりませんでした。

2025-04-19 at 16.01.23-アカウント設定  Elastic Container Service  ap-northeast-1.png

現状の設定値を見てみると確かに blocking モードで設定されていました。

~ $ aws ecs list-account-settings --name defaultLogDriverMode --effective-settings
{
    "settings": [
        {
            "name": "defaultLogDriverMode",
            "value": "blocking",
            "principalArn": "arn:aws:iam::123456789012:root",
            "type": "user"
        }
    ]
}

defaultLogDriverMode を non-blocking に変更してみました。うまく変更できていますね。

~ $ aws ecs put-account-setting-default --name defaultLogDriverMode --value "non-blocking"
{
    "setting": {
        "name": "defaultLogDriverMode",
        "value": "non-blocking",
        "principalArn": "arn:aws:iam::123456789012:root",
        "type": "user"
    }
}
~ $ aws ecs list-account-settings --name defaultLogDriverMode --effective-settings
{
    "settings": [
        {
            "name": "defaultLogDriverMode",
            "value": "non-blocking",
            "principalArn": "arn:aws:iam::123456789012:root",
            "type": "user"
        }
    ]
}

まとめ

以上、「Amazon ECS のアカウント設定でログドライバーのデフォルトのブロッキングモードを指定できるようになりました。」でした。アプリケーションの可用性とログ損失のどちらを取るかで、使い分けできれば良さそうですね。

このブログがどなたかの参考になれば幸いです。クラウド事業本部コンサルティング部のたかくに(@takakuni_)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.