我收到以下代码片段的错误,由于某种原因,Cloudformation 不允许我上传我的模板:
“一个或多个 Fn::Sub 内部函数不指定预期参数。指定一个字符串作为第一个参数,并指定一个可选的第二个参数来指定要在字符串中替换的值的映射”
这就是造成这种情况的原因,但我不知道出了什么问题:
它是 ECS 容器定义中的 ENV 变量:
- 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
我没有尝试太多,我想要一些指导,因为我在网上找不到解决方案。
期望 ENV VAR 没有硬编码在 Cloudformation 中,并且它可以具有以下值:
mysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
同时从系统管理器或机密管理器检索大括号中的参数。
应该是这样的:
- 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: !Sub "{{resolve:ssm:/${ParameterStorePrefix}/DB_NAME}}"
DB_PORT: !Sub "{{resolve:ssm:/${ParameterStorePrefix}/DB_PORT}}"
DB_HOST: !Sub "{{resolve:ssm:/${ParameterStorePrefix}/DB_HOST}}"