ecs-cli执行up/compose时如何配置任务访问Parameter Store环境变量
解决方案
你在ecs-cli up/ecs-cli compose命令参数里找不到Parameter Store环境变量相关配置是正常的——这类任务运行时的敏感参数注入配置,不需要通过命令行参数传,是在compose配置文件里声明,配合任务角色权限实现的,具体操作步骤如下:
1. 先补全任务角色的必要权限
这是最容易遗漏的前置配置:
- 找到你ECS任务使用的任务执行角色(Task Execution Role),给角色挂载包含以下权限的策略:
- 允许对目标Parameter Store参数执行
ssm:GetParameters、ssm:GetParameter操作,资源范围建议精确指定你要引用的参数ARN,不要直接开全量SSM权限 - 如果你存的参数用了自定义KMS密钥加密,还要额外给角色加对应密钥的
kms:Decrypt权限,用AWS默认托管的SSM密钥则不需要额外配置
- 允许对目标Parameter Store参数执行
- 注意不要把权限加到ECS实例本身的实例角色上,必须加给任务执行角色,否则任务拉不到参数值
2. 在compose配置文件中声明参数映射
ecs-cli支持扩展docker-compose的字段识别Parameter Store参数,你只需要在对应服务的配置块下加secrets字段即可,示例配置如下:
version: '3' services: # 你要部署的第一个关联容器 app: image: 你的容器镜像地址 # 原有端口、存储、启动命令等配置保持不变 secrets: # value_from填Parameter Store里的参数完整路径,name填注入容器后的环境变量名 - value_from: /prod/db/username name: DB_USER - value_from: /prod/db/password name: DB_PASS # 要和第一个容器协同运行的第二个容器 sidecar: image: 第二个容器的镜像地址 # 原有同实例调度的约束、依赖配置保持不变 secrets: - value_from: /prod/service/api_key name: API_KEY
注意:不需要在compose文件顶层额外定义secrets块,ecs-cli会自动识别服务下的
value_from格式,将其转换为ECS任务定义中引用SSM参数的配置。如果你本地的ecs-cli版本低于1.0.0,先升级到最新稳定版,老版本不支持该字段解析。
3. 配置校验
配置写完后不用直接执行部署命令,先运行ecs-cli compose create生成任务定义,到ECS控制台查看对应任务定义的容器配置,确认“存储在AWS Systems Manager Parameter Store中的环境变量”板块已经正确列出了你配置的参数映射,就说明配置生效了。
如果任务启动时报参数拉取失败,优先排查两个点:一是任务执行角色的SSM/KMS权限是否配置正确,二是Parameter Store的参数路径是否拼写正确。
另外你提到的两个容器需要调度到同一实例的需求,和上述参数注入配置完全不冲突,你之前配置的placement约束、服务调度规则不需要做任何调整。
内容的提问来源于stack exchange,提问作者Franc Amour
相关产品推荐
相关产品推荐

