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.
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:
| Tipo | Nome | Descrição |
|---|---|---|
| Resource | mgc_network_vpcs_route | Cria e gerencia uma rota na tabela de roteamento da VPC. |
| Data Source | mgc_network_vpcs_route | Consulta os detalhes de uma rota existente pelo seu ID. |
| Data Source | mgc_network_vpcs_routes | Lista 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:
| Argumento | Tipo | Descrição |
|---|---|---|
vpc_id | string | ID da VPC onde esta rota será criada. |
port_id | string | ID da porta (VNIC) que atuará como próximo salto. |
cidr_destination | string | Bloco CIDR de destino do tráfego (ex: 172.20.0.0/16). |
Argumentos opcionais:
| Argumento | Tipo | Descrição |
|---|---|---|
description | string | Texto descritivo para identificar a finalidade da rota. |
Atributos somente leitura (computed):
| Atributo | Tipo | Descrição |
|---|---|---|
id | string | ID único da rota gerado pela plataforma. |
next_hop | string | Endereço IP privado resolvido a partir da porta informada. |
status | string | Status atual da rota (created, processing, error, etc.). |
type | string | Tipo da rota, conforme definido pelo serviço de rede. |
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:
| Atributo | Tipo | Descrição |
|---|---|---|
id | string | ID único da rota. |
port_id | string | ID da porta usada como próximo salto. |
cidr_destination | string | CIDR de destino da rota. |
description | string | Descrição da rota (se definida). |
next_hop | string | Endereço IP do próximo salto resolvido. |
type | string | Tipo da rota. |
status | string | Status 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_ideport_id. Utilize variáveis ou referências a outros recursos Terraform para manter o código reutilizável. - Planeje antes de aplicar: Execute
terraform planantes de qualquerterraform applypara 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 campodescriptioncom informações sobre a finalidade da rota. Isso facilita auditorias e o entendimento da topologia por outros membros do time.
Próximos Passos
- Consulte o guia de Gerenciamento de Rotas via CLI para operações manuais ou scripts pontuais.
- Para entender a configuração da porta usada como próximo salto, veja Como Definir um Endereço IP Privado na Criação de VNIC.