我们有一个带有 Internet 网关的 VPC。我们有 3 个子网(每个 AZ 一个),并且希望对这三个子网使用一个路由表。此 RT 包含一条将 0.0.0.0/0 路由到 igw 的规则,但是当我们尝试将多个子网与此 RT 关联时,堆栈创建在创建路由规则时失败,并显示以下错误消息:
route table rtb-xxxxxxx and network gateway igw-xxxxx belong to different networks.
这很奇怪,因为 igw 没有连接到子网,而是连接到 VPC 本身。
为了使模板正常工作,我需要做的是只与 RT 建立 1 个子网关联,然后再使用另外两个子网更新堆栈。
我尝试添加 2 个等待条件,一个与 RT 的创建相关,另一个与路由规则的创建相关,但它们并不能解决问题 - 我仍然在相同的规则上遇到相同的错误 :(
有人能告诉我该怎么做才能解决这个问题吗?
答案1
正如@Marcus 在回答他自己的问题时所解释的那样;缺乏依赖于取决于属性,当您创建AWS::EC2::路线您指定网关。
对于指定网关的路由条目,必须指定对网关附件资源的依赖关系。
我收到了同样的错误,并且绞尽脑汁想不明白当 IGW 连接到 VPC 时为什么会出现故障,这只是声明中的一个简单的更改AWS::EC2::Route
。
未通过 CFN:
"VPC" : {
"Type" : "AWS::EC2::VPC",
"Properties" : {"CidrBlock" : "10.1.0.0/16"}
},
"InternetGateway" : {
"Type" : "AWS::EC2::InternetGateway"
},
"InternetGatewayAttachment" : {
"Type" : "AWS::EC2::VPCGatewayAttachment",
"Properties" : {
"VpcId" : {"Ref" : "VPC"},
"InternetGatewayId" : {"Ref" : "InternetGateway"}
}
},
"ManagementRouteTable" : {
"Type" : "AWS::EC2::RouteTable",
"Properties" : {
"VpcId" : {"Ref" : "VPC"}
}
},
"NATDefaultRoute" : {
"Type" : "AWS::EC2::Route",
"Properties" : {
"RouteTableId" : {"Ref" : "ManagementRouteTable"},
"DestinationCidrBlock" : "0.0.0.0/0",
"GatewayId" : {"Ref" : "InternetGateway"}
}
}
工作 CFN:
"VPC" : {
"Type" : "AWS::EC2::VPC",
"Properties" : {"CidrBlock" : "10.1.0.0/16"}
},
"InternetGateway" : {
"Type" : "AWS::EC2::InternetGateway"
},
"InternetGatewayAttachment" : {
"Type" : "AWS::EC2::VPCGatewayAttachment",
"Properties" : {
"VpcId" : {"Ref" : "VPC"},
"InternetGatewayId" : {"Ref" : "InternetGateway"}
}
},
"ManagementRouteTable" : {
"Type" : "AWS::EC2::RouteTable",
"Properties" : {
"VpcId" : {"Ref" : "VPC"}
}
},
"NATDefaultRoute" : {
"DependsOn" : "InternetGatewayAttachment",
"Type" : "AWS::EC2::Route",
"Properties" : {
"RouteTableId" : {"Ref" : "ManagementRouteTable"},
"DestinationCidrBlock" : "0.0.0.0/0",
"GatewayId" : {"Ref" : "InternetGateway"}
}
}
答案2
您确定已将 InternetGatway 附加到 VPC(或与路由表相同的 VPC)吗?在云形成中,这看起来像...
"AttachInternetGateway" : {
"Type" : "AWS::EC2::VPCGatewayAttachment",
"Properties" : {
"VpcId" : { "Ref" : "YourVpc" },
"InternetGatewayId" : { "Ref" : "InternetGateway" }
}
},
答案3
我找到了解决办法。我按照等待条件的思路做了,但结果发现我需要添加一个依赖于取决于属性到规则,以便它依赖于首先创建的 igw。
答案4
您应该使用附加网关来连接具有路由表和互联网网关的多个子网。因此,它将互联网网关与 vpc 连接起来