使用 CDK 是否可以在创建默认子网后对其进行修改?

With CDK is it possible to modify the default subnets after they have been created?

我创建了这样一个 VPC

    vpc = new Vpc(theStack, vpcName,
        VpcProps.builder()
            .cidr("10.0.0.0/16")
            .build());

在 eu-west-1 中,默认情况下我得到 3 个 public 和 3 个私有子网。私有子网将有一个 NAT 网关。

现在,我们正试图删除 NAT 网关(因为成本),所以我尝试了这个

    vpc = new Vpc(theStack, vpcName,
        VpcProps.builder()
            .maxAzs(3)
            .cidr("10.0.0.0/16")
            .subnetConfiguration(List.of(
                SubnetConfiguration.builder()
                    .subnetType(SubnetType.PUBLIC)
                    .name("Public")
                    .cidrMask(24)
                    .build(),
                SubnetConfiguration.builder()
                    .subnetType(SubnetType.ISOLATED)
                    .name("Private")
                    .cidrMask(24)
                    .build()))
            .build());

在新堆栈中创建它工作正常。我得到一个 VPC,其子网与以前相同,但没有 NAT GW:s。但是,运行 修改上面创建的 VPC,导致名称冲突。

有什么方法可以让我cdk/cloudformation明白我想修改现有的私有子网而不是创建新的?

我仔细检查了在没有指定子网的情况下创建的子网。 cdir-mask 是 /19 而不是我在第二个版本中输入的 /24。

因此,将 cidrMask 更改为 19 就可以了。现在 CloudFormation 不会创建新的子网并删除 NAT 网关。