Можно ли избежать оценки условия 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
равное ":::"
, но это кажется мне некрасиво, и я хотел бы избежать этого, если есть менее уродливый путь.