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

如何在AWS CloudFormation中为子资源类型设置创建条件

解决方案

错误原因分析

  • 尝试1:CloudFormation不支持直接在YAML数组的单个元素前添加行内条件判断,语法不生效
  • 尝试2:!If返回的是单个对象,而BackupPlanRule要求必须传入数组类型,触发类型校验报错
  • 尝试3:!If分支逻辑错误,两个分支分别只返回单个规则,没有实现条件为真时同时返回两个规则的要求

正确写法

写法1:无需重复配置(推荐)

利用AWS::NoValue伪参数,条件不满足时CloudFormation会自动删除数组中的对应元素:

Parameters:
  # 注意条件参数必须用String类型,允许值为true/false,不能用Boolean类型
  Createbackuprule2:
    Type: String
    AllowedValues: [true, false]
    Default: false
  RuleName1:
    Type: String
  RuleName2:
    Type: String
  BackupPlanName:
    Type: String

Resources:
  StorageBackupPlan:
    Type: AWS::Backup::BackupPlan
    Properties:
      BackupPlan: 
        BackupPlanName: !Ref BackupPlanName
        BackupPlanRule:
          # 规则1固定存在,完整配置写在这里
          - RuleName: !Ref RuleName1
            # 补充规则1其他配置:ScheduleExpression、RetentionPeriod等
          # 规则2仅当Createbackuprule2为true时保留
          - !If
            - Createbackuprule2
            - RuleName: !Ref RuleName2
              # 补充规则2其他配置
            - !Ref AWS::NoValue

写法2:全量分支返回

通过!If直接返回对应场景的完整规则数组:

Resources:
  StorageBackupPlan:
    Type: AWS::Backup::BackupPlan
    Properties:
      BackupPlan: 
        BackupPlanName: !Ref BackupPlanName
        BackupPlanRule:
          !If
            - Createbackuprule2 
            # 条件为true时返回两个规则
            -
              - RuleName: !Ref RuleName1
                # 补充规则1所有配置
              - RuleName: !Ref RuleName2
                # 补充规则2所有配置
            # 条件为false时仅返回规则1
            -
              - RuleName: !Ref RuleName1
                # 补充规则1所有配置,和上面分支的规则1配置完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:48:01