如何获取ECS Fargate容器内指定目录的文件列表?
ECS Fargate ExecuteCommand 报错 TargetNotConnectedException 解决方案
问题背景
已通过amazon-ecs-exec-checker验证核心配置正常:
- 本地AWS CLI及Session Manager Plugin版本达标
- IAM用户拥有
ecs:ExecuteCommand权限 - ECS任务已启用Exec功能,任务状态为RUNNING,Fargate平台版本1.4.0
- 任务角色已配置完整
ssmmessages系列权限 - 容器内ECS代理状态为RUNNING
但执行以下命令时触发错误:
aws ecs execute-command \ --cluster OBFUSCATEED\ --task arn:aws:OBFUSCATED --container restful \ --interactive \ --command "/bin/sh -c 'ls /directory/i/want'"
错误提示:
An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: The execute command failed due to an internal error. Try again later.
已知目标目录真实存在,应用已向该目录写入文件。
解决方案
1. 修正命令语法与拼写
- 检查
--cluster参数值拼写是否与实际集群名一致(示例中OBFUSCATEED疑似拼写错误) - 确保命令换行时的反斜杠完整,
--task行末尾缺失反斜杠会直接导致语法错误 - 简化命令逻辑,先进入容器shell再执行目录列表:
aws ecs execute-command \ --cluster JavaRestStressTest \ --task arn:aws:ecs:us-east-1:OBFUSCATED:task/JavaRestStressTest/OBFUSCATED \ --container restful \ --interactive \ --command "/bin/sh" # 进入shell后执行 ls /directory/i/want
2. 验证容器内Shell可用性
部分轻量基础镜像可能未预装/bin/sh,尝试使用兼容的shell命令:
aws ecs execute-command \ --cluster JavaRestStressTest \ --task arn:aws:OBFUSCATED \ --container restful \ --interactive \ --command "sh"
3. 确认网络连通性
- 若未配置VPC端点,确保Fargate任务拥有公网IP,且子网路由表允许出站访问SSM服务
- 若使用私有网络,需配置
com.amazonaws.us-east-1.ssmmessages和com.amazonaws.us-east-1.ecsVPC端点,同时确保安全组允许相关端口通信
4. 重启ECS任务
ECS Exec代理偶尔会出现连接异常,重启任务可重置代理状态,重新部署后再次尝试执行命令
5. 查看任务日志定位细节
通过CloudWatch日志查看ECS任务的SSM代理日志,获取具体错误原因:
aws logs get-log-events \ --log-group-name /aws/ecs/JavaRestStressTest \ --log-stream-name restful/OBFUSCATED \ --region us-east-1
日志中可能包含代理连接失败的具体信息,如网络阻塞、权限限制等
内容的提问来源于stack exchange,提问作者zaidabuhijleh
相关产品推荐
相关产品推荐

