はじめに
Fargateのblockingモードをタスクごとに制御できないか記事にしました。
本記事は2025年5月17時点の記事となります。
手順
詳細に説明されていたため、以下の記事を参考にしました。
https://dev.classmethod.jp/articles/amazon-ecs-set-default-log-driver-blocking-mode/
現在のECSのdefaultLogDriverModeを確認したところ、デフォルトのため「blocking」になっていることを確認しました。
aws ecs list-account-settings --name defaultLogDriverMode --effective-settings
{
"settings": [
{
"name": "defaultLogDriverMode",
"value": "blocking",
"principalArn": "arn:aws:iam::AWSアカウント番号:root",
"type": "user"
}
]
}
[cloudshell-user@ip-10-132-82-52 ~]$
タスク定義のmode non-blockingがどこに設定されるか確認した。
現在の仕様では新規でタスク定義を作成すると自動でmode non-blockingが入ります。
タスク定義のmode non-blockingを誤った文字列で設定して作成してみた
non-brockingで値を設定してタスク定義を作成ボタンを押したらエラーが出力しました。
誤った値を設定するとエラーが出力されることが分かりました。
The non-brocking mode specified for log configuration options is invalid.
ログ構成オプションに指定された非ブロッキング モードが無効です。
タスク定義のmode blockingを誤った文字列で設定して作成してみた
The brocking mode specified for log configuration options is invalid.
ログ構成オプションに指定されたブロッキング モードが無効です
アカウント設定がblockingですがタスク定義もblockingで設定できるか確認した
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/test-apache",
"mode": "blocking", ←タスク定義
"awslogs-create-group": "true",
"max-buffer-size": "25m",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "ecs"
},
"secretOptions": []
},
"systemControls": []
}
補足情報
デプロイタイプ ローリングアップデートでした。
Fargateはサービス更新しても新タスクが正常に実行されるまでは旧タスクは終了しません。
コンテナ内のメタ情報を確認
コンテナに接続設定は以下の記事が大変分かりやすくまとめていました。
ECS Exec
https://qiita.com/okubot55/items/b1fb07b2de08c354275b
以下の記事を参考にしました。
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint-v4-fargate.html
blockingモードを確認しようとしましたが、私が使用しているイメージにcurlコマンドが入っていないことが判明
仮に本番環境のタスクの場合はcurlをインストールを気軽にできないためメタ情報取得は諦めます。
# aws ecs execute-command --region ap-northeast-1 --cluster <クラスタ名> --task <タスクID> --container <コンテナ名> --interactive --command "/bin/sh"
# curl ${ECS_CONTAINER_METADATA_URI_V4}
/bin/sh: 7: curl: not found
#
#
# wget -qO- $ECS_CONTAINER_METADATA_URI_V4
/bin/sh: 10: wget: not found
#
タスク定義
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/test-apache",
"mode": "non-blocking", ← non-blockingモードになっている
"awslogs-create-group": "true",
"max-buffer-size": "25m",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "ecs"
},
"secretOptions": []
まとめ
AWS 公式サイトの引用
blocking2025年6月25日より、Amazon ECSはログ記録よりもタスクの可用性を優先するため、デフォルトのログドライバーモードを から に変更しますnon-blocking。この変更後もこのモードを引き続き使用するにはblocking、次のいずれかを実行してください。
modeコンテナ定義のオプションlogConfigurationを として設定しますblocking。
defaultLogDriverModeアカウント設定を に設定しますblocking。
現在はECSのアカウント設定でデフォルトで「blockingモード」なっており、新規にタスク定義作成で「mode non-blocking」が自動で入ることが分かりました。
2025/6/25からはアカウント設定で「non-blockingモード」になるそうで
各タスク毎にblockingモードにしたい場合は、タスク定義にて「mode blocking」オプションを含める必要があります。