CloudFormation состояние ленивой оценки - PullRequest
0 голосов
/ 11 февраля 2020

Можно ли избежать оценки условия CloudFormation на основе другого условия? Например ...

У меня есть шаблон AWS CloudFormation с параметром EventSourceArn:

Parameters:
  EventSourceArn:
    Type: String
    Default: ""

... и, используя этот параметр, я хочу определить условия для создание определенных ресурсов:

Conditions:
  IsSqs: !Equals
    - !Select [2, !Split [':', !Ref EventSourceArn]]
    - "sqs"
  IsDynamo: !Equals
    - !Select [2, !Split [':', !Ref EventSourceArn]]
    - "dynamodb"

  # snip

Resources:
  EventSourceMappingForSqs:
    Type: AWS::Lambda::EventSourceMapping
    Condition: IsSqs
    # snip

  EventSourceMappingForDynamo:
    Type: AWS::Lambda::EventSourceMapping
    Condition: IsDynamo
    # snip

Если EventSourceArn не передано и его значение заканчивается как пустая строка по умолчанию, этот шаблон выдает ошибку стека: Template error: Fn::Select cannot select nonexistent value at index 2. Это ожидается согласно Fn::Select документам ... но есть ли способ избежать полного запуска !Select, и просто IsSqs и IsDynamo правильно оценить как ложное?

Я пытался добавить дополнительное условие до !Select, но оно все равно выполняется:

# DOES NOT WORK:
Conditions:
  HasEventSource: !Not [!Equals [!Ref EventSourceArn, "" ]]
  IsSqs: !And [Condition: HasEventSource, !Equals [!Select [2, !Split [':', !Ref EventSourceArn]], "sqs"]]

Что работает, так это значение по умолчанию EventSourceArn равное ":::", но это кажется мне некрасиво, и я хотел бы избежать этого, если есть менее уродливый путь.

...