CloudFormation部署EC2实例时出现路由表与网关关联冲突错误
报错信息:
Route table has a conflicting association with the gateway igw-0d7bbb47c8b4e8875 (Service: AmazonEC2; Status Code: 400; Error Code: RouteConflict; Request ID: 0ca161d0-b58d-4f95-a2f1-01038ccc4cae; Proxy: null)
问题根因
该报错核心是路由规则冲突:你模板中定义的RoutingToInternet资源尝试给新建路由表添加指向互联网网关的0.0.0.0/0默认路由,但是当前AWS环境的同一路由表/同一VPC下,已经存在一条指向报错中igw-0d7bbb47c8b4e8875网关的同目标网段路由,AWS不允许同一路由表内存在两条目标网段完全一致的路由规则。
常见触发场景为之前部署过同模板的CloudFormation栈,删除时没有清理干净残留的IGW、路由表资源,二次部署时新旧资源的路由配置产生冲突。
解决步骤
- 登录AWS控制台,切换到ap-southeast-2区域,进入VPC服务的路由表页面
- 搜索是否存在关联
igw-0d7bbb47c8b4e8875且目标网段为0.0.0.0/0的路由条目,如果是无用的残留配置,直接删除该路由或者对应的废弃路由表 - 检查是否手动给模板创建的VPC的默认主路由表添加过指向该IGW的默认路由,如果有,删除该手动添加的路由即可
- 如果你需要复用现有IGW,可删除模板中新建InternetGateway的相关资源定义,直接引用现有IGW的ID即可
- 确认无残留冲突资源后重新执行CloudFormation栈部署即可
补充优化建议
你当前模板的NACL配置仅允许VPC内网段的出网流量,EC2实例要正常访问公网的话,需要额外添加NACL规则放行公网出入流量,参考配置如下:
# 放行所有公网出网流量 NACLEntryEgressPublic: Type: AWS::EC2::NetworkAclEntry Properties: CidrBlock: "0.0.0.0/0" Egress: true NetworkAclId: !Ref NetworkACL Protocol: -1 RuleAction: "allow" RuleNumber: 101 # 放行所有公网入站流量 NACLEntryIngressPublic: Type: AWS::EC2::NetworkAclEntry Properties: CidrBlock: "0.0.0.0/0" Egress: false NetworkAclId: !Ref NetworkACL Protocol: -1 RuleAction: "allow" RuleNumber: 101
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

