🧩

起動に失敗するAmazon ECSタスクのデバッグにはtracerを使おう

2022/01/09に公開

Amazon ECSタスクが正常に起動しなかった時、ECSイベントログやらCloudWatch LogsなどAWSコンソールをあちこち巡回するはめになります。
そんなときは、GitHub - fujiwara/tracer: ECS task event/log tracer CLI の出番です。

ECS タスクの 関連ログをまるっと取得できます。

$ tracer クラスターID タスクID と実行します。

クラスターID だけを取得すると、タスクIDの一覧を取得できます。

$ tracer demo-test-Cluster-XCK99q2PJPe8
1671014b153943b4aa29e5ed50c837f7	demo-test:1	RUNNING	RUNNING	2021-12-30T12:46:32+01:00	service:demo-test-Service-XCB1Q6tnRKLS	FARGATE
005f4778e3ba4bbe857ab031a6bfb0a7	demo-test:2	STOPPED	STOPPED	2021-12-30T12:04:01+01:00	service:demo-test-Service-XCB1Q6tnRKLS	FARGATE
08a87f1cc8a14bffb00652a14808fcbb	demo-test:2	STOPPED	STOPPED	2021-12-30T12:33:12+01:00	service:demo-test-Service-XCB1Q6tnRKLS	FARGATE
...

停止したタスクIDを指定します。

$ tracer demo-test-Cluster-XCK99q2PJPe8 005f4778e3ba4bbe857ab031a6bfb0a7
2021-12-30T12:04:01.439+01:00	TASK	Created
2021-12-30T12:04:01.470+01:00	SERVICE	(service demo-test-Service-XCB1Q6tnRKLS) has started 1 tasks: (task 005f4778e3ba4bbe857ab031a6bfb0a7).
2021-12-30T12:04:04.472+01:00	TASK	Connected
2021-12-30T12:04:14.191+01:00	TASK	Pull started
2021-12-30T12:04:28.955+01:00	TASK	Pull stopped
...
2021-12-30T12:04:32.547+01:00	CONTAINER:xx-xxx	Traceback (most recent call last):
2021-12-30T12:04:32.547+01:00	CONTAINER:xx-xxx	  File "/usr/local/bin/flask", line 8, in <module>
2021-12-30T12:04:32.547+01:00	CONTAINER:xx-xxx	    sys.exit(main())
...
2021-12-30T12:04:32.547+01:00	CONTAINER:xx-xxx	  File "/usr/local/lib/python3.8/site-packages/botocore/client.py", line 719, in _make_api_call
2021-12-30T12:04:32.547+01:00	CONTAINER:xx-xxx	    raise error_class(parsed_response, operation_name)
2021-12-30T12:04:32.547+01:00	CONTAINER:xx-xxx	botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
2021-12-30T12:04:33.143+01:00	TASK	Execution stopped
2021-12-30T12:04:43.172+01:00	TASK	Stopping
2021-12-30T12:04:43.172+01:00	TASK	StoppedReason:Essential container in task exited
2021-12-30T12:04:43.172+01:00	TASK	StoppedCode:EssentialContainerExited
2021-12-30T12:04:43.286+01:00	SERVICE	(service demo-test-Service-XCB1Q6tnRKLS) deregistered 1 targets in (target-group arn:aws:elasticloadbalancing:...)
2021-12-30T12:04:43.295+01:00	SERVICE	(service demo-test-Service-XCB1Q6tnRKLS) has begun draining connections on 1 tasks.
2021-12-30T12:05:06.763+01:00	TASK	Stopped
2021-12-30T12:05:06.763+01:00	CONTAINER:xx-xxx	STOPPED (exit code: 1)

ログは時系列順に並んでいます。

S3の権限不足でタスクが停止したと一目瞭然です。

tracer のインストール

Mac からは次のコマンドでインストールできます。

$ brew install fujiwara/tap/tracer

各種アーキテクチャー向けにビルド済みのバイナリも用意されています。

GitHub の Releases からダウンロードしてください。

まとめ

Amazon ECSタスクの異常停止をデバッグするには

  • サービスイベント
  • タスクイベントログ
  • CloudWatch Logsのアプリログ

を確認するために、あちこちの画面(API)を行き来する必要があります。

tracer を使い、コマンド一発で、集約された時系列順のログを確認しましょう。

参考

Discussion