- ECS Exec で An error occurred (TargetNotConnectedException)
- Amazon ECS Exec Checker でトラブルシューティング
- 実行例
- 各項目の説明
- Prerequisites for check-ecs-exec.sh
- Prerequisites for the AWS CLI to use ECS Exec
- Cluster Configuration
- Can I ExecuteCommand?
- Task Status
- Launch Type, Platform Version
- Exec Enabled for Task
- Managed Agent Status
- Init Process Enabled
- Read-Only Root Filesystem
- Task Role Permissions
- VPC Endpoints
- Environment Variables
ECS Exec で An error occurred (TargetNotConnectedException)
ECS + Fargate の構成で、 ECS Exec を使ったときに、以下のエラーが出る場合がある。
An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: The execute command failed due to an internal error. Try again later.
AWSの設定ミスなどは全部このエラーになるため、何がエラーになっているかわからない。
Try again later. と言われているが、殆どの場合は設定ミスのため、Try again しても勝手に復旧することはない。
Amazon ECS Exec Checker でトラブルシューティング
エラーでぐぐると以下の記事がヒットした。 ECS Exec Checker というものがあるようだ。しかし、結果が分かりづらかったため、ECS Exec Checker の結果の各項目について説明する。
コマンドの実行には jq コマンドが必要なのでインストールしておく。
brew install jq
実行例
実行すると、エラー箇所が赤く、Warning が黄色で表示される。
$ ./check-ecs-exec.sh <クラスター名> <タスクID> ------------------------------------------------------------- Prerequisites for check-ecs-exec.sh v0.7 ------------------------------------------------------------- jq | OK (/opt/homebrew/bin/jq) AWS CLI | OK (/opt/homebrew/bin/aws) ------------------------------------------------------------- Prerequisites for the AWS CLI to use ECS Exec ------------------------------------------------------------- AWS CLI Version | OK (aws-cli/2.6.0 Python/3.9.12 Darwin/21.4.0 source/arm64 prompt/off) Session Manager Plugin | OK (1.2.295.0) ------------------------------------------------------------- Checks on ECS task and other resources ------------------------------------------------------------- Region : ap-northeast-1 Cluster: xxxxxxxx Task : a9a7de33ebdb42dd9e8ef840d812f2fc ------------------------------------------------------------- Cluster Configuration | Audit Logging Not Configured Can I ExecuteCommand? | arn:aws:iam::236053997432:user/xxxxxxxx ecs:ExecuteCommand: allowed ssm:StartSession denied?: allowed Task Status | RUNNING Launch Type | Fargate Platform Version | 1.4.0 Exec Enabled for Task | OK Container-Level Checks | ---------- Managed Agent Status ---------- 1. RUNNING for "php" 2. RUNNING for "nginx" ---------- Init Process Enabled (xxxxxxxx:47) ---------- 1. Disabled - "nginx" 2. Disabled - "php" ---------- Read-Only Root Filesystem (xxxxxxxx:47) ---------- 1. Disabled - "nginx" 2. Disabled - "php" Task Role Permissions | arn:aws:iam::236053997432:role/XxxxxRole ssmmessages:CreateControlChannel: allowed ssmmessages:CreateDataChannel: allowed ssmmessages:OpenControlChannel: allowed ssmmessages:OpenDataChannel: allowed VPC Endpoints | Found existing endpoints for vpc-0e1a2c059e33c9a70: - com.amazonaws.ap-northeast-1.ecr.api - com.amazonaws.ap-northeast-1.ecr.dkr - com.amazonaws.ap-northeast-1.ssmmessages Environment Variables | (xxxxxxxx:47) 1. container "nginx" - AWS_ACCESS_KEY: not defined - AWS_ACCESS_KEY_ID: not defined - AWS_SECRET_ACCESS_KEY: not defined 2. container "php" - AWS_ACCESS_KEY: not defined - AWS_ACCESS_KEY_ID: not defined - AWS_SECRET_ACCESS_KEY: not defined
各項目の説明
Prerequisites for check-ecs-exec.sh
そもそも check-ecs-exec コマンドを実行するのに必要なライブラリがインストールされているかを確認してくれている
Prerequisites for the AWS CLI to use ECS Exec
ECS Exec を実行するためには、バージョン 2.4.1 以降の AWS CLI と、 Session Manager Plugin が必要なため、バージョンのチェックをしてくれている。
Cluster Configuration
ちゃんと調べてないけど、あんま機にしなくて良い
Can I ExecuteCommand?
AWS CLI を実行しているユーザーに、 ECS Exec の権限が与えられているかどうかをチェックしている。
ecs:ExecuteCommand
が allowed になっていない場合は、AWS IAMアカウントに権限が付与されていないでの、付与する必要がある。
ssm:StartSession denied?
については、 denied が推奨とのこと。allowed になっていても ECS Exec 自体は問題なく動くが、 Warning になる。
詳細は AWS ドキュメントを見ると良い。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/ecs-exec.html
Task Status
そもそも、ECS のタスクが正常に動いているかどうかを確認する
Launch Type, Platform Version
Launch Type は Fargate または EC2 のいずれか
Fargate の場合、 ECS Exec を実行するためには、 Platform Version は 1.4.0 以降でないといけない。
Exec Enabled for Task
タスクの設定で、ECS Exec が有効になっているかどうかを返す。
無効になっている場合は、 enableExecuteCommand を true に設定して上げる必要がある。
Managed Agent Status
ECS Exec を実行するためには、コンテナで Managed Agent が実行されている必要がある。
RUNNING になっていれば問題無い。
Init Process Enabled
ECS Exec している際、操作ミスなどで Docker のメインプロセスを終了しても、コンテナがゾンビ化するのを防ぐための設定。
Allowed が推奨だが、 Disabled になっていても、 ECS Exec を実行することはできる。
Read-Only Root Filesystem
Read-Only Root Filesystem が Enabled になっていると、 ECS Exec が実行できない。
Read-Only Root Filesystem は、 Docker コンテナのファイルの書き込みができなくなるという設定。 Disabled 担っていれば問題ない。
Task Role Permissions
ECS のタスクに、 ECS Exec を実行するのに必要なポリシーがアタッチされているかどうかを確認してくれる。
必要なポリシーについてはこの辺も合わせて読むとよい。
VPC Endpoints
ECS Exec を実行するために必要な VPC Endpoint の設定がされているかどうかを確認してくれる。
この辺を参考
Environment Variables
ここに出力されている環境変数が設定されていると、ECS Exec の環境変数と衝突して、ECS Exec が正常に動作しない。
not defined になっていれば問題ない
defined になっていると、黄色(Warning)で表示されるが、たいてい ECS Exec が動かないので、名前を変えたり、環境変数を削除する必要がある。