首页 > 解决方案 > Sub 和 Join 逗号分隔列表

问题描述

我正在尝试构建一个 ECS(Fargate)任务定义,它使用传递给 Command 的可变数量的环境变量。每个变量名称都与 SecretsManager 中的一个密钥匹配。

我无法以有意义的方式组合这些功能。以下代码只是将所有变量作为字符串列表传递给 Command。

 SpecEnvVars:
   Type: CommaDelimitedList
   Default: "greeting,name,title,rank"
   Description: |
     The Environmental Variables to pull into the container, defined by their
     associated Secrets names

 ContainerDefinitions:
   - Name: !Ref 'ServiceName'
     Command: !Split
       - ','
       - !Join
         - ','
         - !Ref SpecEnvVars

但是,我需要将列表中的项目解析为机密 JSON。解决秘密是这样完成的:

!Sub '{{resolve:secretsmanager:test/${greeting}}}'

如何将 Fn::Sub 与 Split/Join 集成以返回 SecretsManager JSON 字符串列表?

标签: amazon-cloudformation

解决方案


我花了一段时间才找到正确的函数组合,但我做到了:

ContainerDefinitions:
  - Name: !Ref 'ServiceName'
    Command: !Split
      - ','
      - !Sub
        - '{{resolve:secretsmanager:test/${inner}}}'
        - inner: !Join
          - '}},{{resolve:secretsmanager:test/'
          - Ref: "SpecEnvVars"

我想为这个答案提供支持:https ://stackoverflow.com/a/50060983/9671763因为它实际上给了我答案——我只需要根据我的用例调整它。


推荐阅读