DataLife Engine / Создание подсетей в AWS VPC с помощью Terraform

Создание подсетей в AWS VPC с помощью Terraform


В предыдущей статье мы создали в AWS виртуальное частное облако — VPC. Теперь перейдём к следующему шагу — настройке подсетей.

1. Создадим новый файл network.tf, в котором опишем создание подсетей и их привязку к таблице маршрутизации
resource "aws_subnet" "subnet" {
  for_each = var.subnets

  vpc_id                  = aws_vpc.vpc.id
  cidr_block              = each.value.cidr
  map_public_ip_on_launch = each.value.publicipv4

  availability_zone = "${var.aws_region}${each.value.availability_zone}"

  tags = merge({
    Name = "${var.contour_environment["region"]}-${lower(var.contour_environment["company"])}-${each.key}-${split(".", each.value.cidr)[2]}"
  }, each.value.tags)
}

resource "aws_route_table_association" "rt-association" {
  for_each       = var.subnets
  subnet_id      = aws_subnet.subnet[each.key].id
  route_table_id = aws_route_table.public.id
}

2. В существующий файл network_core.tf добавим создание ресурсов для интернет-шлюза и таблицы маршрутизации.

Пояснение:

Интернет-шлюз позволит подсетям выходить во внешнюю сеть Интернет, а таблица маршрутизации будет направлять весь трафик (0.0.0.0/0) через этот шлюз.
# Create Internet gateway
resource "aws_internet_gateway" "internet-gateway" {
  vpc_id = aws_vpc.vpc.id

  tags = {
    Name = "igw-${var.contour_environment["region"]}-${lower(var.contour_environment["company"])}"
  }
}

# Routing tables public
resource "aws_route_table" "public" {
  vpc_id = aws_vpc.vpc.id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.internet-gateway.id
  }

  tags = {
    Name = "rt-${var.contour_environment["region"]}-${lower(var.contour_environment["company"])}-public"
  }
}

3. Добавим в файл outputs.tf вывод ID таблицы маршрутизации
output "rt-public_id" {
  value       = aws_route_table.public.id
  description = "The ID of public route table"
}

4. Добавим в файл variables.tf описание переменных для создания подсетей
variable "subnets" {
  description = "subnets"
  type = map(object({
    cidr              = string
    availability_zone = string
    publicipv4        = bool
    tags              = map(string)
  }))
}

5. Добавим в файл terraform.tfvars собственно значения для самих переменных
subnets = {

  dmz-a = {
    cidr              = "10.1.1.0/24"
    availability_zone = "a"
    publicipv4        = true
    tags = {
      Name = "dmz-subnet-1"
    }
  }

}

6. Применение конфигурации
terraform plan
terraform apply
21-09-2025, 21:29
Вернуться назад