我尝试在 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 设置为任务
每个进程 ID (PID) 命名空间只能有一个 ECS Exec 会话。如果您在任务中共享 PID 命名空间,则只能在一个容器中启动 ECS Exec 会话。
检查您是否在任务定义中将 readonlyRootFilesystem 设置为 true
要创建所需的目录和文件,SSM Agent 需要一个可写入的容器文件系统。您无法通过 readonlyRootFilesystem 任务定义参数或任何其他方法将根文件系统设置为只读。
如果您在更新任务定义后仍收到错误,请从 GitHub 网站运行 amazon-ecs-exec-checker。amazon-ecs-exec-checker 脚本会验证您的 AWS CLI 环境以及 Amazon ECS 集群或任务。如果您未满足某个先决条件,该脚本也会向您发出通知。
相关信息
使用 ECS Exec