Skip to main content

Como Gerenciar Rotas na Tabela de Roteamento via Terraform

Este guia demonstra como provisionar e gerenciar rotas na Tabela de Roteamento de uma VPC da Magalu Cloud utilizando o Provider Terraform para MGC. Com o Terraform, você descreve a topologia de rede como código (IaC), garantindo reprodutibilidade, rastreabilidade e integração com pipelines de CI/CD.

Pré-requisito

Certifique-se de que o Provider Terraform para MGC está configurado no seu projeto antes de prosseguir. Consulte a documentação de configuração do provider para os passos iniciais.


Recursos Disponíveis

O provider MGC disponibiliza os seguintes recursos e data sources para gerenciamento de rotas:

TipoNomeDescrição
Resourcemgc_network_vpcs_routeCria e gerencia uma rota na tabela de roteamento da VPC.
Data Sourcemgc_network_vpcs_routeConsulta os detalhes de uma rota existente pelo seu ID.
Data Sourcemgc_network_vpcs_routesLista todas as rotas associadas a uma VPC.

Criando uma Rota

Configuração Básica

O recurso mgc_network_vpcs_route requer três argumentos obrigatórios: o ID da VPC, o ID da porta que atuará como próximo salto e o CIDR de destino.

resource "mgc_network_vpcs_route" "exemplo" {
vpc_id = "seu-vpc-id"
port_id = "seu-port-id"
cidr_destination = "172.20.0.0/16"
description = "Rota para rede interna do tenant A"
}

Schema do Recurso

Argumentos obrigatórios:

ArgumentoTipoDescrição
vpc_idstringID da VPC onde esta rota será criada.
port_idstringID da porta (VNIC) que atuará como próximo salto.
cidr_destinationstringBloco CIDR de destino do tráfego (ex: 172.20.0.0/16).

Argumentos opcionais:

ArgumentoTipoDescrição
descriptionstringTexto descritivo para identificar a finalidade da rota.

Atributos somente leitura (computed):

AtributoTipoDescrição
idstringID único da rota gerado pela plataforma.
next_hopstringEndereço IP privado resolvido a partir da porta informada.
statusstringStatus atual da rota (created, processing, error, etc.).
typestringTipo da rota, conforme definido pelo serviço de rede.
Imutabilidade dos Campos

Todos os campos deste recurso utilizam RequiresReplace, o que significa que qualquer alteração nos valores de vpc_id, port_id, cidr_destination ou description resultará na destruição e recriação da rota. Planeje mudanças com atenção em ambientes de produção.


Exemplo Completo: Referenciando Recursos Existentes

O exemplo abaixo demonstra como criar uma rota referenciando uma VPC e uma porta já existentes no seu ambiente.

# Referência à VPC existente
data "mgc_network_vpcs" "minha_vpc" {
# Use o ID da sua VPC
}

# Referência à porta (VNIC) que atuará como próximo salto
data "mgc_network_vpcs_interface" "firewall_port" {
vpc_id = "seu-vpc-id"
}

# Criação da rota
resource "mgc_network_vpcs_route" "rota_onpremise" {
vpc_id = "seu-vpc-id"
port_id = "seu-port-id"
cidr_destination = "10.100.0.0/24"
description = "Tráfego on-premise via firewall virtual"
}

# Exibindo informações da rota criada
output "rota_id" {
value = mgc_network_vpcs_route.rota_onpremise.id
}

output "next_hop_ip" {
description = "Endereço IP do próximo salto resolvido pela plataforma"
value = mgc_network_vpcs_route.rota_onpremise.next_hop
}

output "rota_status" {
value = mgc_network_vpcs_route.rota_onpremise.status
}

Exemplo Avançado: Múltiplas Rotas para Arquitetura Multi-tenant

O exemplo a seguir demonstra como provisionar múltiplas rotas para direcionar o tráfego de diferentes tenants para firewalls dedicados.

locals {
tenants = {
tenant_a = {
cidr = "192.168.10.0/24"
port_id = "port-id-firewall-a"
description = "Rota tenant A - VPN dedicada"
}
tenant_b = {
cidr = "192.168.20.0/24"
port_id = "port-id-firewall-b"
description = "Rota tenant B - VPN dedicada"
}
tenant_c = {
cidr = "192.168.30.0/24"
port_id = "port-id-firewall-c"
description = "Rota tenant C - VPN dedicada"
}
}
}

resource "mgc_network_vpcs_route" "rotas_tenants" {
for_each = local.tenants

vpc_id = "seu-vpc-id"
port_id = each.value.port_id
cidr_destination = each.value.cidr
description = each.value.description
}

output "rotas_criadas" {
value = {
for key, rota in mgc_network_vpcs_route.rotas_tenants :
key => {
id = rota.id
next_hop = rota.next_hop
status = rota.status
}
}
}

Consultando Rotas com Data Sources

Consultando uma Rota por ID

Use o data source mgc_network_vpcs_route para recuperar informações de uma rota já existente, referenciando-a em outros recursos do seu projeto.

data "mgc_network_vpcs_route" "existente" {
id = mgc_network_vpcs_route.exemplo.id
vpc_id = mgc_network_vpcs_route.exemplo.vpc_id
}

output "detalhes_rota" {
value = data.mgc_network_vpcs_route.existente
}

Listando Todas as Rotas de uma VPC

Use o data source mgc_network_vpcs_routes para obter a lista completa de rotas de uma VPC, útil para auditorias ou validações no pipeline de IaC.

data "mgc_network_vpcs_routes" "todas_rotas" {
vpc_id = "seu-vpc-id"
}

output "lista_rotas" {
value = data.mgc_network_vpcs_routes.todas_rotas.routes
}

Schema do Data Source mgc_network_vpcs_routes:

O atributo routes retorna uma lista de objetos com os seguintes campos:

AtributoTipoDescrição
idstringID único da rota.
port_idstringID da porta usada como próximo salto.
cidr_destinationstringCIDR de destino da rota.
descriptionstringDescrição da rota (se definida).
next_hopstringEndereço IP do próximo salto resolvido.
typestringTipo da rota.
statusstringStatus atual da rota.

Importando Rotas Existentes

Caso você já possua rotas criadas fora do Terraform e queira gerenciá-las como código, utilize o comando de import. O formato de identificação usa vpc_id,route_id separados por vírgula.

terraform import mgc_network_vpcs_route.minha_rota "seu-vpc-id,seu-route-id"

Após o import, execute terraform plan para confirmar que o estado local está sincronizado com a infraestrutura real antes de fazer qualquer alteração.


Boas Práticas

  • Use variáveis para IDs: Evite hardcode de vpc_id e port_id. Utilize variáveis ou referências a outros recursos Terraform para manter o código reutilizável.
  • Planeje antes de aplicar: Execute terraform plan antes de qualquer terraform apply para revisar as mudanças, especialmente em ambientes de produção.
  • Atenção ao RequiresReplace: Como todos os campos da rota são imutáveis, alterações geram recriação do recurso. Em produção, avalie o impacto no tráfego antes de aplicar.
  • Documente com description: Sempre preencha o campo description com informações sobre a finalidade da rota. Isso facilita auditorias e o entendimento da topologia por outros membros do time.

Próximos Passos