You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CloudFormation的Conditions块中实现Fn::Contains等效功能?

在CloudFormation Conditions中实现CommaDelimitedList的包含判断

因为CloudFormation的Fn::Contains只能在Rules块里使用,没法直接放到Conditions中判断列表是否包含某个选项,这里给你一个无需新增布尔参数、不用切换Terraform的替代方案——通过字符串拼接+拆分对比实现等效判断。

核心思路

把传入的CommaDelimitedList参数转成首尾都带逗号的格式化字符串(比如将OptionA,OptionB转换为,OptionA,OptionB,),再用目标选项的包裹版本(比如,OptionA,)作为分隔符拆分该字符串。如果拆分后的第一个元素和原字符串完全一致,说明列表里没有匹配项;反之则说明包含目标选项,最后用Fn::Not取反得到最终布尔判断结果。

完整YAML示例

1. 定义参数

Parameters:
  OptionParameterList:
    Type: CommaDelimitedList
    Description: 输入要启用的选项,用逗号分隔,例如OptionA,OptionB

2. 编写Conditions判断

以判断是否包含OptionA为例:

Conditions:
  IsOptionAEnabled:
    Fn::Not:
      - Fn::Equals:
          - !Select [0, !Split [",OptionA,", !Sub ",${OptionParameterList},"]]
          - !Sub ",${OptionParameterList},"

3. 关联到Thing资源

需要控制创建的Thing资源直接绑定这个Condition即可:

Resources:
  OptionAThing:
    Type: AWS::IoT::Thing
    Condition: IsOptionAEnabled
    Properties:
      ThingName: OptionAThing
      # 填写你的Thing资源其他属性

批量处理多个选项

要判断其他选项(比如OptionB),直接复制Condition块并替换目标选项值即可:

Conditions:
  IsOptionAEnabled:
    Fn::Not:
      - Fn::Equals:
          - !Select [0, !Split [",OptionA,", !Sub ",${OptionParameterList},"]]
          - !Sub ",${OptionParameterList},"
  IsOptionBEnabled:
    Fn::Not:
      - Fn::Equals:
          - !Select [0, !Split [",OptionB,", !Sub ",${OptionParameterList},"]]
          - !Sub ",${OptionParameterList},"

注意事项

  • 选项名称不能包含逗号,因为CommaDelimitedList类型本身不允许元素带逗号
  • 字符串匹配是大小写敏感的,传入的选项名称要和判断逻辑里的完全一致

内容的提问来源于stack exchange,提问作者Ti Strga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:09:51