Cloud Formation Logic Split Parameter Array Elements

0

I have a could formation template with a parameter that contains a list of elements e.g.

Parameter_Name: "a,b,c,d"

I need to split the list into single elements so that I can specify a list of values for a Resource entity. So far I have used the !Select and !Split functions to separate the list of elements into single values e.g.

- !Select [0, !Split [",", !Ref Paramter_Name]]
- !Select [1, !Split [",", !Ref Paramter_Name]]
- !Select [2, !Split [",", !Ref Paramter_Name]]
- !Select [3, !Split [",", !Ref Paramter_Name]]

This works providing I know the number of elements in the list. Can anyone suggest a way to handle lists with variable numbers of elements?

gefragt vor einem Jahr646 Aufrufe
3 Antworten
0
Akzeptierte Antwort

Hi, AFAIK, the best of what you can do is use !If like in HACK VI of https://garbe.io/blog/2017/07/17/cloudformation-hacks/ I would not say that it is ideal in syntax ;-) but at least you can deal with a list of variable length...

Parameters:
  Env1:
    Type: String
    Description: An item of possible environment variables
    Default: ''

  Env2:
    Type: String
    Description: An item of possible environment variables
    Default: ''

  Env3:
    Type: String
    Description: An item of possible environment variables
    Default: ''


Conditions:
  Env1Exist: !Not [ !Equals [!Ref Env1, '']]
  Env2Exist: !Not [ !Equals [!Ref Env2, '']]
  Env3Exist: !Not [ !Equals [!Ref Env3, '']]


  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      TaskRoleArn: !Ref TaskRole
      ContainerDefinitions:
      - Name: !Ref AWS::StackName
        Image: !Ref ImageName

        Environment:
          'Fn::If':
            - Env1Exist
            -
              - Name: !Select [0, !Split ["|", !Ref Env1]]
                Value: !Select [1, !Split ["|", !Ref Env1]]
              - 'Fn::If':
                - Env2Exist
                -
                  Name: !Select [0, !Split ["|", !Ref Env2]]
                  Value: !Select [1, !Split ["|", !Ref Env2]]
                - !Ref "AWS::NoValue"
              - 'Fn::If':
                - Env3Exist
                -
                  Name: !Select [0, !Split ["|", !Ref Env3]]
                  Value: !Select [1, !Split ["|", !Ref Env3]]
                - !Ref "AWS::NoValue"

            - !Ref "AWS::NoValue"
profile pictureAWS
EXPERTE
beantwortet vor einem Jahr
0

I "solved" this once by just including a "reserved" word for empty entries, like "none", and passed the full array in. Then tested whether the element was the reserved word or not. Not very elegant but got the job done. Also, I used a parameter type of CommaDelimitedList.

profile pictureAWS
EXPERTE
kentrad
beantwortet vor einem Jahr
0

Thanks @Diddler_AWS the solution using conditions will work for me.

beantwortet vor einem Jahr

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen