AWS Cloudformation - 无法将多个子网关联添加到公共路由表

AWS Cloudformation - 无法将多个子网关联添加到公共路由表

我们有一个带有 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 连接起来

相关内容