Fargate任务未执行aws configure无法调用AWS服务如何解决
排查步骤
- 先确认任务定义中配置的任务角色(Task Role)为
pipeline-task,而非仅配置了ecsTaskExecutionRole。两个角色的作用完全不同:ecsTaskExecutionRole是供ECS控制平面使用的,负责拉取ECR镜像、注入 Secrets Manager 到任务环境变量等操作;容器内部运行的代码调用AWS服务时,使用的是单独配置的任务角色,而非执行角色。 - 检查容器内安装的AWS CLI/SDK版本:过旧的版本不支持Fargate内置凭证端点的识别逻辑,例如AWS CLI v1版本低于1.16.140就会出现无法自动获取凭证的问题,执行
aws --version查看版本,可升级到最新v1版或直接使用v2版解决。 - 排查容器内的环境变量冲突:如果容器内手动配置了
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_PROFILE等环境变量(即使值为空),AWS SDK会优先读取这些变量的配置,不会自动调用Fargate的凭证接口,可执行env | grep AWS确认是否存在多余的凭证相关环境变量,删除后重试。 - 确认Fargate使用的平台版本:低于1.4.0的老旧平台版本存在凭证获取异常的已知问题,建议升级到最新的LTS平台版本。
- 检查网络配置:Fargate必须使用
awsvpc网络模式才能访问元数据服务获取凭证;同时要确认任务关联的安全组出方向规则允许访问169.254.170.2的80端口,该地址是ECS元数据服务的固定地址,禁止访问会导致凭证获取失败。 - 排查基础镜像限制:如果使用了自定义的Docker基础镜像,部分镜像会默认禁用链路本地地址的路由规则,执行
ip route查看是否存在169.254.0.0/16的路由,无对应路由可手动添加,或替换为AWS官方基础镜像验证。
内容的提问来源于stack exchange,提问作者Ashwin
相关产品推荐
相关产品推荐

