📚
ECS + Django + Nginx でECS Execがうまくいかなかった
ECS Exec自体は色々記事がありますが、An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: The execute command failed due to an internal error. Try again later.
のエラーが出て解決に少し手こずりましたので、まとめてみることにしました。
上記の記事など、参考にさせていただきました
確認したこと
- ECSタスクロールにssmの権限がついているかどうか
- ssm周りのエンドポイントが設定されているか
-
amazon-ecs-exec-checker
で引っかかっていないか - Reachability Analyzer で接続エラーが出ていないか
ロールの設定
以下の設定が問題なくされている
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
amazon-ecs-exec-checker
以下のコマンドを実行して確認
./check-ecs-exec.sh test-cluster xxxxxxxxxxxxxxxxxxxxxxxa
特に異常はなさそう
-------------------------------------------------------------
Prerequisites for check-ecs-exec.sh v0.7
-------------------------------------------------------------
jq | OK (/Users/test/opt/anaconda3/bin/jq)
AWS CLI | OK (/usr/local/bin/aws)
-------------------------------------------------------------
Prerequisites for the AWS CLI to use ECS Exec
-------------------------------------------------------------
AWS CLI Version | OK (aws-cli/2.13.33 Python/3.11.6 Darwin/23.4.0 exe/x86_64 prompt/off)
Session Manager Plugin | OK (1.2.553.0)
-------------------------------------------------------------
Checks on ECS task and other resources
-------------------------------------------------------------
Region : ap-northeast-1
Cluster: test-cluster
Task : xxxxxxxxxxxxxxxxxxxxxxxa
-------------------------------------------------------------
Cluster Configuration |
KMS Key : Not Configured
Audit Logging : DEFAULT
S3 Bucket Name: Not Configured
CW Log Group : Not Configured
Can I ExecuteCommand? | arn:aws:iam::xxxxxxxxxxxxxx:user/test
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 "test-app"
2. RUNNING for "test-nginx"
----------
Init Process Enabled (test-task:11)
----------
1. Disabled - "test-nginx"
2. Disabled - "test-app"
----------
Read-Only Root Filesystem (test-task:11)
----------
1. Disabled - "test-nginx"
2. Disabled - "test-app"
Task Role Permissions | arn:aws:iam::xxxxxxxxxxxxx:role/ecs-task-role
ssmmessages:CreateControlChannel: allowed
ssmmessages:CreateDataChannel: allowed
ssmmessages:OpenControlChannel: allowed
ssmmessages:OpenDataChannel: allowed
VPC Endpoints |
Found existing endpoints for vpc-xxxxxxxxxxxxxx:
- com.amazonaws.ap-northeast-1.ecr.dkr
- com.amazonaws.ap-northeast-1.ecr.api
- com.amazonaws.ap-northeast-1.s3
- com.amazonaws.ap-northeast-1.logs
- com.amazonaws.ap-northeast-1.ssmmessages
Environment Variables | (test-task:11)
1. container "test-nginx"
- AWS_ACCESS_KEY: not defined
- AWS_ACCESS_KEY_ID: not defined
- AWS_SECRET_ACCESS_KEY: not defined
2. container "test-app"
- AWS_ACCESS_KEY: not defined
- AWS_ACCESS_KEY_ID: not defined
- AWS_SECRET_ACCESS_KEY: not defined
Reachability Analyzer
- パスの送信元
- 送信元タイプ: Network Interfaces
- 送信元: ECSタスクのENI
- パスの送信先
- 送信先タイプ: VPC Endpoints
- 送信先: ssmmessages
- 送信先ポート: 443
結論解決
ここまでやってもエラーが変わらずだったが、ECSの方再デプロイしたら反映され、問題なく接続ができた。ロールの設定など必要なものは基本的にデプロイしてチェックをしていたが、どこかで実施し忘れていたのかもしれない。ただここまでチェックしていれば、大方疎通はできるとは思いました。
Discussion