如何与返回列表的Fn :: FindInMap合并项目?

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

我有下一个CloudFormation文件:

Mappings:
  MyMap:
    us-east-1:
      Roles:
        - "roleA"
        - "roleB"
    ...

Resources:
  MyPolicy:
    Type: "AWS::IAM::Policy"
    PolicyDocument:
      Statement:
        - Effect: "Allow"
          Action:
            - "sts:AssumeRole"
          Resource:
            Fn::FindInMap: ["MyMap", !Ref AWS::Region, "Roles"]

[一切正常,但是现在我需要为所有区域添加一个额外的角色,但是仅向Resource:部分添加其他角色是行不通的,因为它会因模板语法错误而失败。

是否有一种方法可以合并FindInMap和其他项目的结果列表?类似于:

Resource:
  Fn::FindInMap: ["MyMap", !Ref AWS::Region, "Roles"]
  - "roleC"
amazon-cloudformation
1个回答
0
投票

是的,您可以,但是不会很漂亮:

Resource: 
  Fn::Split:
    - ','
    - Fn::Join:
      - ','
      - - !Join [',', !FindInMap ["MyMap", !Ref "AWS::Region", "Roles"]]
        - 'roleC'     

[基本上,首先将MyMap列表加入字符串,然后将roleC添加到字符串,然后将其拆分为List of Strings

© www.soinside.com 2019 - 2024. All rights reserved.