You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS CDK TypeScript中为VPC指定自定义子网CIDR

问题

我是AWS CDK TypeScript新手,原本以为实现该功能很简单,但实际遇到了困难。我希望在创建VPC时指定3个子网:2个公有子网、1个私有子网,具体CIDR如下:

  • Public01: 10.10.5.0/24
  • Public02: 10.10.10.0/24
  • Private01: 10.10.15.0/24

但当前代码创建的子网CIDR为10.10.0.0/24、10.10.1.0/24和10.10.2.0/24,并非我想要的。我的代码如下:

const myvpc = new ec2.Vpc(this, 'MyVPC', {
  maxAzs: 1,
  natGateways: 0,
  cidr: '10.10.0.0/16',
  subnetConfiguration: [
    {
      cidrMask: 24,
      name: 'Outside',
      subnetType: ec2.SubnetType.PUBLIC,
    },
    {
      cidrMask: 24,
      name: 'Management',
      subnetType: ec2.SubnetType.PUBLIC,
    },
    {
      cidrMask: 24,
      name: 'Inside',
      subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
    },
  ],
});

请问该如何实现自定义子网CIDR的配置?

解决方案

AWS CDK 默认会自动从VPC的CIDR块中按顺序分配子网CIDR,要指定自定义的子网CIDR,只需在subnetConfiguration的每个子网配置对象中添加cidrBlock属性,直接设置你需要的CIDR值即可,同时可以去掉cidrMask(因为已经通过cidrBlock明确指定了掩码)。

修改后的代码如下:

const myvpc = new ec2.Vpc(this, 'MyVPC', {
  maxAzs: 1,
  natGateways: 0,
  cidr: '10.10.0.0/16',
  subnetConfiguration: [
    {
      cidrBlock: '10.10.5.0/24',
      name: 'Outside',
      subnetType: ec2.SubnetType.PUBLIC,
    },
    {
      cidrBlock: '10.10.10.0/24',
      name: 'Management',
      subnetType: ec2.SubnetType.PUBLIC,
    },
    {
      cidrBlock: '10.10.15.0/24',
      name: 'Inside',
      subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
    },
  ],
});

需要注意:

  • 每个子网的cidrBlock必须完全包含在VPC的CIDR范围内(此处为10.10.0.0/16),否则会触发部署报错。
  • 确保所有子网的CIDR块唯一且无重叠。

内容的提问来源于stack exchange,提问作者slurm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:07:40