问题:Cloudformation 内部函数 Fn::Sub 映射

问题描述 投票:0回答:1

我收到以下代码片段的错误,由于某种原因,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}

同时从系统管理器或机密管理器检索大括号中的参数。

amazon-web-services aws-cloudformation amazon-ecs
1个回答
0
投票

应该是这样的:

- 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}}"
© www.soinside.com 2019 - 2024. All rights reserved.