如何基于区域条件从CloudFormation参数中为ELB指定子网列表?
解决CloudFormation ELB子网条件引用报错问题
问题根源
你在Subnets字段下添加了-符号,这会把!If返回的子网列表包装成嵌套列表(列表里套列表),但ELB的Subnets属性要求直接传入字符串列表,因此触发"subnets have to be of list type"报错。
修复代码
直接移除Subnets下的-,让!If的结果直接作为Subnets的值即可——你的两个子网参数本身就是List<String>类型,!If会返回符合条件的完整列表:
BastionELB: Type: AWS::ElasticLoadBalancing::LoadBalancer Properties: ConnectionDrainingPolicy: Enabled: !Ref ELBConfigConnectionDraining Timeout: !Ref ELBConfigConnectionDrainingTimeout SecurityGroups: - !Ref BastionClientsdevELBIntuitSecurityGroup Subnets: !If [ isRegionUS-WEST-2, !Ref PublicSubnetsWestRegion, !Ref PublicSubnetsEastRegion ]
补充说明
- 你的子网参数定义(
PublicSubnetsEastRegion这类)是正确的List<String>类型,无需修改 !If函数会根据区域条件直接返回对应的子网列表,直接赋值给Subnets就能满足ELB的参数要求
内容的提问来源于stack exchange,提问作者Starseamoon
相关产品推荐
相关产品推荐

