Amazon web services 云形成条件惰性评价

Amazon web services 云形成条件惰性评价,amazon-web-services,yaml,amazon-cloudformation,Amazon Web Services,Yaml,Amazon Cloudformation,是否有可能避免根据另一个条件评估云形成条件?例如 我有一个AWS CloudFormation模板,带有参数EventSourceArn: Parameters: EventSourceArn: Type: String Default: "" …并且,使用此参数,我想定义创建某些资源的条件: Conditions: IsSqs: !Equals - !Select [2, !Split [':', !Ref EventSourceArn]] - "sq

是否有可能避免根据另一个条件评估云形成条件?例如

我有一个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无法选择索引2处不存在的值
。根据……这是预期的,但是,有没有办法避免运行
!完全选择
,然后让
IsSqs
IsDynamo
正确计算为false

我尝试在
之前添加一个额外的条件!选择
,但仍会运行:

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

工作原理是将
EventSourceArn
值默认为
:“
,但这对我来说似乎很难看,如果有一种不那么难看的方法,我想避免它。

我认为这是不可能的。条件相当有限。您可能可以根据数据进行更改条件的转换。参数的默认值是多少!选择“永不失败”?