Amazon Elastic Container Service (Amazon ECS) で AWS コマンドラインインターフェイス (AWS CLI) コマンド execute-command を実行しようとすると、"An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: The execute command failed due to an internal error.Try again later" というエラーメッセージが表示されます。
簡単な説明
"ExecuteCommand" というエラーメッセージが表示される理由は次のとおりです。
解決策
注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
Amazon ECS タスクロールのアクセス許可を更新する
次の手順を実行します。
- 次の IAM ポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
注: 設定により、上記のアクセス許可が AWS Organizations レベルでブロックされないことを確認してください。
- ポリシーを Amazon ECS タスクロールにアタッチします。
タスクロールのアクセス許可を更新する際、遅延が発生する可能性があります。ポリシーをタスクロールにアタッチした後、数分間待機してから execute-command コマンドを実行します。
IAM ユーザーまたはロールのアクセス許可を確認する
サインインに使用した IAM ユーザー ID とロールを確認するには、次のコマンドを実行します。
aws sts get-caller-identity
execute-command コマンドを実行する IAM ユーザーまたはロールには、次のアクセス許可が必要です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ecs:ExecuteCommand",
"Resource": "arn:aws:ecs:example-region:example-arn:cluster/example-cluster/*"
}
]
}
上記のアクセス許可を付与するには、新しくポリシーをアタッチするか、既存のポリシーを更新します。
タスク定義で pidMode が task に設定されているかどうかを確認する
各プロセス ID (PID) 名前空間では、1 つの ECS Exec セッションのみを実行できます。タスクで PID 名前空間を共有する場合、ECS Exec セッションは 1 つのコンテナでのみ開始できます。
タスク定義で readonlyRootFilesystem が true に設定されているかどうかを確認する
必要なディレクトリとファイルを作成するには、SSM Agent には書き込み可能なコンテナファイルシステムが必要です。タスク定義パラメータ readonlyRootFilesystem または他の方法により、ルートファイルシステムを読み取り専用に設定することはできません。
タスク定義の更新後にエラーが発生する場合は、GitHub のウェブサイトにある amazon-ecs-exec-checker を実行してください。amazon-ecs-exec-checker スクリプトは、AWS CLI 環境および Amazon ECS クラスターまたはタスクを検証します。このスクリプトは、前提条件を満たしていない場合にも通知を行います。
関連情報
Using ECS Exec (ECS Exec を使用する)