Buzeli
buzeliSoluções Digitais
SRE

Migrando um app transacional da AWS para a OCI: desenhando a VCN isolada (CIDR, NSGs e as pegadinhas de São Paulo)

Publicado em 13 de julho de 2026

Diagrama de uma rede virtual isolada na nuvem com sub-redes, gateways e grupos de segurança conectando camadas

Fase 0: a rede vem antes da carga

Numa migração AWS→OCI de uma aplicação transacional, a tentação é começar pelo cluster. Errado: a VCN (Virtual Cloud Network) é a fundação. Erros de CIDR, sub-rede ou NSG só aparecem quando a app já está rodando — e aí o custo de corrigir é alto. Desenhamos a malha inteira primeiro, isolada, com OKE/ARM desde o início.

Decisão 1: o CIDR que não pode dar overlap

Escolhemos 10.1.0.0/20 para a VCN — deliberadamente fora de 10.0.0.0/16. Se um dia houver peering com outra rede (a da AWS, durante a coexistência, ou uma VCN futura), CIDRs sobrepostos tornam o peering impossível. Escolher o range pensando no futuro é grátis agora e caríssimo depois.

CIDR é decisão de uma via: trocar depois significa recriar sub-redes e reendereçar tudo. Pense no peering futuro antes de digitar o primeiro /20.

Decisão 2: São Paulo tem uma só Availability Domain

A região SA-SAOPAULO-1 da OCI tem apenas 1 AD. Diferente de regiões com 3 ADs, você não distribui resiliência entre ADs — distribui entre Fault Domains dentro da única AD. Quem desenha esperando multi-AD se frustra; o padrão de alta disponibilidade aqui é fault-domain-aware, não AD-aware.

Decisão 3: o Service Gateway atende por um prefixo inesperado

Para o tráfego interno alcançar serviços da OCI (Object Storage, etc.) sem sair para a internet, usa-se o Service Gateway. A pegadinha: em São Paulo, o service CIDR label é all-gru-services-in-oracle-services-network — não SA-SAOPAULO. Apontar a route rule para o label errado faz o tráfego simplesmente não rotear, sem erro óbvio.

Copiar
# listar os service CIDR labels disponíveis na região (achar o 'gru')
oci network service list --query "data[].{name:name,cidr:\"cidr-block\"}" --output table

# route rule do Service Gateway usa o label 'all-gru-services...', não 'SA-SAOPAULO'
oci network route-table update --rt-id ocid1.routetable.oc1..aaaaEXAMPLE \
  --route-rules '[{"destination":"all-gru-services-in-oracle-services-network",
                   "destinationType":"SERVICE_CIDR_BLOCK",
                   "networkEntityId":"ocid1.servicegateway.oc1..aaaaEXAMPLE"}]'

A matriz de 4 NSGs

Em vez de Security Lists amplas, usamos Network Security Groups por camada, com a regra de menor privilégio — o banco só aceita conexão do NSG da app:

Copiar
nsg-lb    : ingress 80,443  de 0.0.0.0/0           (load balancer público)
nsg-app   : ingress 3000, 30000-32767 (NodePort),    de nsg-lb
            10250 (kubelet)            de dentro da VCN
nsg-wp    : ingress 2028 (SSH custom), 9100 (Prometheus) de IPs de ops
nsg-db    : ingress 3306              SOMENTE de nsg-app/nsg-wp  (sem 0.0.0.0/0)

NSG referenciando NSG (origem = outro NSG, não um CIDR) é o que torna a malha à prova de mudança de IP: escalar a app não exige reabrir o banco para um novo range.

Bônus: a imagem amd64 que não sobe no nó ARM

O cluster OKE é ARM (Ampere). A imagem que rodava no ECS era amd64-only (runtimePlatform nulo no task definition). No nó ARM, o pod fica em CrashLoopBackOff com exec format error. O fix é rebuildar multi-arch — assunto recorrente quando se migra de x86 para Ampere:

Copiar
docker buildx build --platform linux/arm64 -t registry.example.com/myapp/app:arm64 --push .

Lições

1. Desenhe a VCN antes de qualquer workload. CIDR, sub-redes e NSGs são fundação; corrigir com app no ar é caro.

2. CIDR pensando no peering futuro. Evite overlap com 10.0.0.0/16; um /20 fora da faixa hoje salva o peering amanhã.

3. São Paulo = 1 AD, resiliência por Fault Domain. Não desenhe esperando multi-AD; distribua entre fault domains.

4. Service Gateway usa o label 'all-gru-services'. Apontar para SA-SAOPAULO faz o tráfego não rotear, silenciosamente.

Conclusão

Migração de nuvem que começa pelo container começa pelo telhado. A rede certa — CIDR sem overlap, resiliência por fault domain, Service Gateway no label certo e 4 NSGs de menor privilégio — é o que faz o resto da migração ser previsível em vez de uma sequência de surpresas regionais.