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

通过CloudFormation为路由表关联多个子网遇JSON错误

CloudFormation 多子网关联路由表的正确配置方式

错误原因

AWS::EC2::SubnetRouteTableAssociation 资源不支持在单个实例中配置多个SubnetId,每个该类型资源只能关联一个子网与一个路由表——你尝试的两种格式都违背了这个属性定义,SubnetId字段仅接受单个字符串值,而非数组或嵌套结构,这是触发JSON错误的核心原因。

正确配置方式

方式1:为每个子网创建独立的关联资源

直接为每个需要关联的子网单独定义SubnetRouteTableAssociation资源,示例代码如下:

RouteTableAssociationOpsA:
  Type: AWS::EC2::SubnetRouteTableAssociation
  Properties:
    SubnetId: !ImportValue !Sub '${AWS::StackName}-OpsSubA'
    RouteTableId: !Ref PublicRouteTable

RouteTableAssociationProdA:
  Type: AWS::EC2::SubnetRouteTableAssociation
  Properties:
    SubnetId: !ImportValue !Sub '${AWS::StackName}-ProdSubA'
    RouteTableId: !Ref PublicRouteTable

RouteTableAssociationDemoA:
  Type: AWS::EC2::SubnetRouteTableAssociation
  Properties:
    SubnetId: !ImportValue !Sub '${AWS::StackName}-DemoSubA'
    RouteTableId: !Ref PublicRouteTable

RouteTableAssociationDevA:
  Type: AWS::EC2::SubnetRouteTableAssociation
  Properties:
    SubnetId: !ImportValue !Sub '${AWS::StackName}-DevSubA'
    RouteTableId: !Ref PublicRouteTable

方式2:使用批量创建语法(需模板版本≥2021-09-09)

如果子网数量较多,可以用CloudFormation的Fn::ForEach语法批量生成关联资源,简化代码:

AWSTemplateFormatVersion: "2021-09-09"
Resources:
  Fn::ForEach::SubnetAssociations:
    - SubnetName
    - [OpsSubA, ProdSubA, DemoSubA, DevSubA]
    - RouteTableAssociation${SubnetName}:
        Type: AWS::EC2::SubnetRouteTableAssociation
        Properties:
          SubnetId: !ImportValue !Sub '${AWS::StackName}-${SubnetName}'
          RouteTableId: !Ref PublicRouteTable

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:57:05