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

AWS CloudFormation多AZ子网分配:如何用IF-ELSE处理3AZ场景?

解决CloudFormation中基于AZ数量的子网分配逻辑问题

需求场景

  • 1个AZ时,分配PrivateSubnet1到Subnets
  • 2个AZ时,分配PrivateSubnet1和PrivateSubnet2到Subnets
  • 3个AZ时,分配PrivateSubnet1、PrivateSubnet2和PrivateSubnet3到Subnets

解决方案

CloudFormation的!If支持嵌套使用,你可以通过多层嵌套的!If来覆盖3AZ、2AZ和1AZ的所有场景。修改后的完整代码如下:

Conditions:
  SingleZone:
    !Equals [!Ref NumberOfZones, 1]
  TwoZones:
    !Equals [!Ref NumberOfZones, 2]
  ThreeZones:
    !Equals [!Ref NumberOfZones, 3]
Resources:
  # 替换为你实际的资源名称(如ECSCluster、AutoScalingGroup等)
  TargetResource:
    Properties:
      Subnets: !If
        - ThreeZones
        - !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]]
        - !If
          - TwoZones
          - !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2]]
          - !Ref PrivateSubnet1

逻辑说明

  1. 优先判断ThreeZones条件:若匹配3个AZ的场景,直接返回三个子网的逗号分隔字符串
  2. 若不满足3AZ,进入第二层!If判断TwoZones条件:匹配2个AZ时返回两个子网的逗号分隔字符串
  3. 最后默认分支(既非3也非2个AZ),返回单个PrivateSubnet1

如果你的资源Subnets属性需要的是子网ID/ARN的数组列表而非逗号分隔字符串,可去掉!Join直接使用数组形式:

Subnets: !If
  - ThreeZones
  - - !Ref PrivateSubnet1
    - !Ref PrivateSubnet2
    - !Ref PrivateSubnet3
  - !If
    - TwoZones
    - - !Ref PrivateSubnet1
      - !Ref PrivateSubnet2
    - - !Ref PrivateSubnet1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:28:26