4.2 CIDR em Variáveis
Nesta etapa, vamos tirar os cidr_block do código fixo e colocar esses valores em variáveis do projeto.
⚡ Visão rápida: a VPC e as subnets usam CIDRs diferentes, então vamos declarar variáveis distintas para cada uma delas. O CIDR da VPC será um valor simples, e os CIDRs das subnets serão uma lista.
4.2.1 Declarar as variáveis
No variables.tf, adicione estes blocos:
variable "vpc_cidr_block" {
type = string
}
variable "subnet_cidr_blocks" {
type = list(string)
}
Aqui a separação é proposital:
vpc_cidr_blockrepresenta a rede principal da VPC;subnet_cidr_blocksrepresenta as três redes menores das subnets.
Ou seja: a VPC e as subnets não compartilham a mesma variável, porque exercem papéis diferentes no projeto.
🧠 Mergulho profundo
Documentação oficial:
Abrir documentação do blocovariable
Abrir documentação do recursoaws_subnet
4.2.2 Preencher os valores no terraform.tfvars
Agora ajuste o terraform.tfvars:
vpc_cidr_block = "10.0.0.0/16"
subnet_cidr_blocks = [
"10.0.1.0/24",
"10.0.2.0/24",
"10.0.3.0/24"
]
Nesse desenho:
- o CIDR da VPC continua sendo um único valor;
- os CIDRs das subnets formam uma lista com três posições.
4.2.3 Ajustar a VPC e as subnets
Agora atualize os arquivos que usam esses valores.
No recurso da VPC em main.tf, substitua o valor fixo por:
cidr_block = var.vpc_cidr_block
No subnet.tf, ajuste manualmente as três subnets para usar a lista:
resource "aws_subnet" "subnet_a" {
vpc_id = aws_vpc.main.id
cidr_block = var.subnet_cidr_blocks[0]
availability_zone = data.aws_availability_zones.available.names[0]
tags = {
Name = "${var.vpc_name}-${data.aws_availability_zones.available.names[0]}"
}
}
resource "aws_subnet" "subnet_b" {
vpc_id = aws_vpc.main.id
cidr_block = var.subnet_cidr_blocks[1]
availability_zone = data.aws_availability_zones.available.names[1]
tags = {
Name = "${var.vpc_name}-${data.aws_availability_zones.available.names[1]}"
}
}
resource "aws_subnet" "subnet_c" {
vpc_id = aws_vpc.main.id
cidr_block = var.subnet_cidr_blocks[2]
availability_zone = data.aws_availability_zones.available.names[2]
tags = {
Name = "${var.vpc_name}-${data.aws_availability_zones.available.names[2]}"
}
}
Aqui a ideia é fazer a referência ao array de forma manual e explícita.
Ou seja:
subnet_ausa a posição[0];subnet_busa a posição[1];subnet_cusa a posição[2].- a
tag Namecontinua sendo montada com o prefixo da VPC e o nome da AZ correspondente.
Trocas de cidr_block em cada subnet:
subnet_a
cidr_block = var.subnet_cidr_blocks[0]
subnet_b
cidr_block = var.subnet_cidr_blocks[1]
subnet_c
cidr_block = var.subnet_cidr_blocks[2]
4.2.4 Aplicar
Agora execute:
tofu apply
Se você manteve exatamente os mesmos CIDRs que já estavam no projeto, a expectativa é não haver mudança real na infraestrutura.
Nesse caso, a vantagem obtida aqui é organização e parametrização.
4.2.5 Resultado esperado
Na prática, esta etapa reforça quatro ideias:
- 📦 valores importantes do projeto podem sair do código fixo e virar variáveis;
- 🌐 o CIDR da VPC é uma entrada diferente do CIDR das subnets;
- 📚 uma lista funciona bem quando várias subnets seguem a mesma lógica;
- 🧭 mesmo usando lista, ainda podemos ligar cada subnet manualmente a uma posição específica.