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

如何用Terraform为AWS每个可用区生成唯一CIDR块?

解决Terraform中每个可用区生成唯一CIDR块的问题

你当前遇到的情况是:循环生成可用区对应的CIDR块时,所有结果都是重复的10.0.101.0/24,但你需要每个可用区对应唯一的子网,比如10.0.101.0/24、10.0.102.0/24这类依次递增的CIDR。

问题根源

你使用的cidrsubnet("10.0.0.0/16", 8, 101)里,第三个参数是固定的子网索引值101,不管循环多少次,生成的都是同一个子网。要让每个可用区对应不同的子网,必须让这个索引值随循环动态变化。

解决方案

修改public_subnets的for循环,引入索引变量,用当前循环的索引 + 初始值101作为cidrsubnet的第三个参数。这样每个可用区会对应递增的子网索引,生成唯一的CIDR块。

修正后的public_subnets代码:

public_subnets = [for idx, az in data.aws_availability_zones.available.names : cidrsubnet("10.0.0.0/16", 8, 101 + idx)]

完整修正后的示例代码

data "aws_ami" "app_ami" {
  most_recent = true

  filter {
    name   = "name"
    values = ["bitnami-tomcat-*-x86_64-hvm-ebs-nami"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  owners = ["979382823631"] # Bitnami
}

data "aws_availability_zones" "available" {
  state = "available"
}

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"

  name = "my-vpc"
  cidr = "10.0.0.0/16"

  azs            = data.aws_availability_zones.available.names
  public_subnets = [for idx, az in data.aws_availability_zones.available.names : cidrsubnet("10.0.0.0/16", 8, 101 + idx)]

  enable_nat_gateway = true
}

resource "aws_instance" "blog" {
  ami           = data.aws_ami.app_ami.id
  instance_type = "t3.nano"

  vpc_security_group_ids = [module.blog_security_group.security_group_id]

  tags = {
    Name = "HelloWorld"
  }
}

module "blog_security_group" {
  source      = "terraform-aws-modules/security-group/aws"
  version     = "5.1.0"
  name        = "blog"
  description = "Allow HTTP and HTTPS from my IP in."

  vpc_id = data.aws_vpc.default.id

  ingress_rules       = ["http-80-tcp", "https-443-tcp"]
  ingress_cidr_blocks = ["0.0.0.0/0"]

  egress_rules       = ["all-all"]
  egress_cidr_blocks = ["0.0.0.0/0"]
}

修改后,循环会根据每个可用区的索引(从0开始),依次生成101+0=101、101+1=102、101+2=103等索引的子网,正好匹配你期望的CIDR序列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:12:10