В предыдущей статье мы создали в 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