You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CloudFormation Fn::Sub参数错误:ECS容器环境变量配置问题

问题排查与修复方案

错误核心原因

你的!Sub函数使用格式不符合CloudFormation要求:!Sub的数组语法中,第二个元素必须是单一的键值映射对象(所有变量放在同一个结构里),而不是拆分多个独立的列表项(每个变量单独用-开头)。当前写法把每个变量拆成了单独的数组元素,导致CloudFormation无法识别正确的参数结构,触发报错。

修正后的代码

- Name: 'DB_URL'
  Value: !Sub
    - "mysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}"
    - DB_USER: application_user
      DB_PASSWORD: "{{resolve:ssm-secure:/${Prefix}/database/application_user/password}}"
      DB_NAME: "{{resolve:ssm:/${Prefix}/DB_NAME}}"
      DB_PORT: "{{resolve:ssm:/${Prefix}/DB_PORT}}"
      DB_HOST: "{{resolve:ssm:/${Prefix}/DB_HOST}}"
      Prefix: !Ref ParameterStorePrefix

关键说明

  • 所有需要替换的变量必须放在!Sub数组的第二个元素中,作为一个统一的YAML对象(保持缩进对齐,无需额外的-前缀)。
  • {{resolve:ssm}}和{{resolve:ssm-secure}}可以在!Sub的映射值中直接使用,CloudFormation会先解析!Ref ParameterStorePrefix,替换${Prefix}占位符后,再解析SSM参数值。

额外优化建议

如果你的数据库凭证存储在Secrets Manager而非SSM Secure String,可以改用{{resolve:secretsmanager}},示例:

DB_PASSWORD: "{{resolve:secretsmanager:/${Prefix}/db-creds:SecretString:password}}"

内容的提问来源于stack exchange,提问作者Sadiq hassan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:54:55