使用 CommaDelimitedList 参数时 Fn::Equals 抛出错误

adi*_*k96 5 amazon-web-services amazon-elasticache aws-cloudformation

我正在编写一个 CF 模板来创建 Elasticache 复制组。其中,我有一个名为SnapshotsofCommaDelimitedList类型的参数,用于将存储在 s3 中的 RDB 快照文件作为 ARN 列表传递 -

Snapshots:
    Description: >-
      List of ARNs of Redis RDB snapshot files to populate the Elasticache
      cluster (optional)
    Type: CommaDelimitedList
Run Code Online (Sandbox Code Playgroud)

我正在尝试有一个如下所示的条件,它将检查是否Snapshots为空 -

Conditions:
  HasSnapshots: !Not 
    - !Equals 
      - !Ref Snapshots
      - ''
Run Code Online (Sandbox Code Playgroud)

当我尝试在 CloudFormation Designer 中验证我的模板时,它会抛出错误 -

29/07/2020, 22:50:33 - Template contains errors.: Template error: every Fn::Equals object requires a list of 2 string parameters.
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?我必须使用 String 类型而Snapshots 不是 CommaDelimitedList 吗?或者还有其他更好的方法吗?

我需要如下所示的Resource类型参数,以便使用参数中以 ARN 列表形式给出的快照文件填充 ElastiCache 集群(如果提供的话) -AWS::ElastiCache::ReplicationGroupSnapshots

RedisReplicationGroup:
  Type: 'AWS::ElastiCache::ReplicationGroup'
  Properties:
    ...
    ...
    SnapshotArns: !If 
      - HasSnapshots
      - !Ref Snapshots
      - !Ref 'AWS::NoValue'
Run Code Online (Sandbox Code Playgroud)

Mar*_*cin 9

您可以使用Join执行以下操作:

Conditions:

  HasSnapshots: !Not 
    - !Equals 
      - !Join ["", !Ref Snapshots]
      - ''
Run Code Online (Sandbox Code Playgroud)