Orest
Orest

Reputation: 6748

How to combine list from Fn::FindInMap with additional items?

I have next CloudFormation file:

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"]

Everything works fine, however now I need to add an extra role that would be defined for all regions, however simply adding additional role to Resource: section doesn't work, since it fails with template syntax error.

Is there a way to combine list of results from FindInMap and another item? Something like:

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

Upvotes: 1

Views: 1447

Answers (1)

Marcin
Marcin

Reputation: 238467

Yes, you can, but it won't be pretty:

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

Basically, first you join the MyMap list into a string, then you add roleC to the string, and then split it into List of Strings.

Upvotes: 2

Related Questions