如何将Fn::FindInMap中的列表与附加项合并?

问题描述 投票:1回答: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个回答
1
投票

是的,您可以但它不会是美丽的。

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.