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 が task に設定されているかどうかを確認する
必要なディレクトリとファイルを作成するには、SSM Agent には書き込み可能なコンテナファイルシステムが必要です。タスク定義パラメータ readonlyRootFilesystem または他の方法により、ルートファイルシステムを読み取り専用に設定することはできません。
タスク定義の更新後にエラーが発生する場合は、GitHub のウェブサイトにある amazon-ecs-exec-checker を実行してください。amazon-ecs-exec-checker スクリプトは、AWS CLI 環境および Amazon ECS クラスターまたはタスクを検証します。このスクリプトは、前提条件を満たしていない場合にも通知を行います。
関連情報
ECS Exec を使用する