在 CFN 堆栈更新期间将 CIDR 块重新分配给子网

问题描述 投票:0回答:1

我的 VPC 有一个 CFN 堆栈,我首先在其中仅创建公共和私有子网,并为其分配默认 CIDR 块。现在,过了一段时间,我还需要将隔离子网添加到 VPC。当我尝试更新 CFN 堆栈时,出现异常 -

"The CIDR '10.0.0.0/25' conflicts with another subnet

在 CFN 堆栈更新中添加更多子网后,是否可以将 CIDR 块重新分配给子网?

这是示例代码:


    if (<some condition>){
        this.createVpcWithIsolatedSubnets();
    } else {
        this.createVpc() 
    }
createVpc() {
    const vpc = new ec2.Vpc(this, `VPC`, {
        maxAzs: MAX_AZ,
        subnetConfiguration: [
           {
               name: 'Public',
               subnetType: ec2.SubnetType.PUBLIC
           },
           {
               name: 'Private',
               subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS
           }
        ]      
   });
}
createVpcWithIsolatedSubnets() {
            
    const vpc = new ec2.Vpc(this, `VPC`, {
        maxAzs: MAX_AZ,
        subnetConfiguration: [
           {
               name: 'Public',
               subnetType: ec2.SubnetType.PUBLIC
           },
           {
               name: 'Private',
               subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS
           },
           {
               name: 'Isolated',
               subnetType: ec2.SubnetType.PRIVATE_ISOLATED
           }
        ]      
   });
}
aws-cloudformation aws-cdk amazon-vpc subnet cidr
1个回答
0
投票

该错误表明您正在尝试添加一个 CIDR 与已存在的子网重叠的新子网。 在 CloudFormation 模板中,创建子网时,您可以指定要使用的 CIDR 范围。

此外,子网 CIRD 属性的文档提到

如果您更新此属性,我们将创建一个新子网,然后删除 现有的。

因此,您很可能会尝试采用现有子网 CIDR 并将其缩小到更小的值,同时添加使用部分相同范围的新子网。 这将导致重叠,因为 CloudFormation 将尝试首先创建新子网,并且仅在清理阶段删除旧子网。 您需要在堆栈更新中删除现有子网,然后在后续堆栈更新中创建两个具有较小 CIDR 范围的新子网,该堆栈更新将在第一次更新完成后运行。

不可能“将 CIDR 块重新分配给子网”,因为更新实际上意味着删除现有的 CIDR 块并重新创建一个新的。 另请参阅子网大小调整。 如果您可以发布原始 CFN 模板和新模板的相关部分,则可以更轻松地比较您为子网使用的 CIDR。

© www.soinside.com 2019 - 2024. All rights reserved.