infracloud/inventcloud/invista/nexus/OCI-DEV-NEXUS.md
Tiago Ribeiro 566399fb60 docs(nexus): adiciona seção sobre importância do Terraform vs Console OCI
- Comparativo de tempo: 90min manual vs 5min Terraform por cluster
- Demonstração do que 1 apply cria (47 recursos)
- Scale up/down: 1 linha no tfvars vs 3 operações manuais
- Infraestrutura como documentação viva (tfvars)
- Lições aprendidas: custo de não usar Terraform (orphans, duplicatas, etc.)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 13:24:46 -03:00

33 KiB
Raw Blame History

OCI — Ambiente DEV Nexus (cmp-dev-nexus)

Data: 2026-02-25 | Responsável: Tiago Ribeiro Contexto: Documentação completa do ambiente DEV Nexus — recursos OCI e Terraform (tf_oci_clusters)


0. Diagrama Geral — Fluxo de Tráfego e Recursos

0.1 Fluxo Completo: Internet → Cloudflare → OCI → Serviços

┌─────────────────────────────────────────────────────────────────────────────────────┐
│  INTERNET                                                                           │
└──────────────────────────────┬──────────────────────────────────────────────────────┘
                               │
                    ┌──────────▼──────────┐
                    │     CLOUDFLARE      │
                    │  *.invista.com.br   │
                    │  (DNS + Proxy/WAF)  │
                    └──────┬──────────────┘
                           │
          ┌────────────────┼─────────────────────┐
          │ APIs backend   │ MFE (frontend)       │ Acesso direto
          │ (proxied)      │ (planejado ⏳)        │ (public LB)
          ▼                ▼                      ▼
┌─────────────────┐ ┌──────────────────┐ ┌──────────────────────┐
│ LB Test_Crivo   │ │ LB Test_Crivo    │ │  OKE Public LB       │
│ 10.8.4.127      │ │ Dev (VCN-Shared) │ │  137.131.236.202     │
│ VCN-Shared      │ │ (rota pendente)  │ │  cls-dev-nexus       │
│ cmp-shared-inv  │ └──────────────────┘ └──────────────────────┘
│ [MANUAL]        │        │                      │
└────────┬────────┘        │                      │
         │                 │                      │
         │   DRG-Invista-Shared                   │
         │   (VCN-Shared ↔ VCN-DEV)               │
         ▼                 │                      │
┌─────────────────────────────────────────────────┼──────────────────────────────────┐
│  VCN-DEV (10.6.0.0/16) — cmp-dev-inv [MANUAL]   │                                  │
│                                                  │                                  │
│  ┌──────────────────────────────────────────┐   │                                  │
│  │  api-gateway-nexus-dev  [MANUAL]         │   │                                  │
│  │  PRIVATE  ·  IP: 10.6.0.123             │   │                                  │
│  │  Subnet: SBNT-DEV (10.6.0.0/24)         │   │                                  │
│  │                                          │   │                                  │
│  │  Deployments:                            │   │                                  │
│  │  /api/auth        /api/user             │   │                                  │
│  │  /api/person      /api/role             │   │                                  │
│  │  /api/sso         /api/cache            │   │                                  │
│  │  /api/commercial-manager  …             │   │                                  │
│  └────────────────────┬─────────────────────┘   │                                  │
│                       │ DRG (VCN-DEV ↔ vcn-oke) │                                  │
└───────────────────────┼─────────────────────────┼──────────────────────────────────┘
                        │                         │
                        └────────────┬────────────┘
                                     │
┌────────────────────────────────────▼────────────────────────────────────────────────┐
│  vcn-oke (10.110.0.0/16) — cmp-dev-inv  [TERRAFORM ✅]                              │
│                                                                                     │
│  ┌─────────────────────────────────────────────────────────────────────────────┐   │
│  │  sbn-lb-1 (10.110.128.0/20) · sbn-lb-2 (10.110.144.0/20) — PÚBLICAS       │   │
│  │                                                                             │   │
│  │  ┌───────────────┐  ┌───────────────┐  ┌───────────────┐  ┌─────────────┐ │   │
│  │  │  OKE LB       │  │  OKE LB       │  │  OKE LB       │  │ OKE LB pub  │ │   │
│  │  │ 10.110.133.131│  │ 10.110.135.3  │  │ 10.110.129.64 │  │137.131.236.2│ │   │
│  │  │ cls-barramento│  │  cls-nexus    │  │  cls-obs.     │  │  cls-nexus  │ │   │
│  │  └───────┬───────┘  └──────┬────────┘  └──────┬────────┘  └──────┬──────┘ │   │
│  └──────────┼─────────────────┼──────────────────┼─────────────────┼─────────┘   │
│             │                 │                  │                  │             │
│  ┌──────────┼─────────────────┼──────────────────┼─────────────────┼─────────┐   │
│  │  sbn-workers-1/2/3 (10.110.032.0/20) — PÚBLICAS — cmp-dev-nexus         │   │
│  │                                                                           │   │
│  │  ┌─────────────────────┐  ┌─────────────────────┐  ┌─────────────────┐   │   │
│  │  │   cls-dev-nexus     │  │ cls-dev-barramento   │  │ cls-dev-obs.    │   │   │
│  │  │   [TERRAFORM ✅]    │  │  [TERRAFORM ✅]      │  │ [TERRAFORM ✅]  │   │   │
│  │  │  np-dev-1 (x3 VMs) │  │  np-dev-2 (x3 VMs)  │  │ np-dev-3 (x3)  │   │   │
│  │  │  ArgoCD ✅          │  │  ArgoCD ✅           │  │  ArgoCD ✅     │   │   │
│  │  │  K8s v1.34.1        │  │  K8s v1.34.1        │  │  K8s v1.34.1  │   │   │
│  │  └─────────────────────┘  └─────────────────────┘  └─────────────────┘   │   │
│  └───────────────────────────────────────────────────────────────────────────┘   │
│                                                                                     │
│  ┌─────────────────────────────────────────────────────────────────────────────┐   │
│  │  sbn-api-gateway (10.110.192.0/20) — PRIVADA  [TERRAFORM ✅]               │   │
│  │                                                                             │   │
│  │  ┌──────────────────────────────────────────────────────────────────────┐  │   │
│  │  │  api-gateway-mfe-dev  [TERRAFORM ✅]                                 │  │   │
│  │  │  PRIVATE · IP: 10.110.198.250                                        │  │   │
│  │  │  Deployments: mfe-user → nexus-mfe-user-development (Object Storage) │  │   │
│  │  └──────────────────────────────────────────────────────────────────────┘  │   │
│  └─────────────────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────────────────┘
                                          │
                              ┌───────────▼──────────────┐
                              │  OCI Object Storage       │
                              │  Namespace: grbb7qzeuoag  │
                              │  nexus-mfe-user-dev       │
                              │  mfe-shell-dev            │
                              │  [MANUAL / Pipeline CI]   │
                              └───────────────────────────┘

0.2 Fluxo API Backend (atual)

Browser
  │
  └─► Cloudflare (*.invista.com.br) [DNS Proxy + WAF]
          │
          ▼
      LB Test_Crivo_Dev  (10.8.4.127 — VCN-Shared — cmp-shared-inv)
      Cert: *.invista.com.br (Cloudflare Origin CA)
          │  roteamento por hostname
          ▼
      api-gateway-nexus-dev  (PRIVATE — 10.6.0.123 — VCN-DEV)
      /api/auth  /api/user  /api/person  /api/sso  …
          │
          │  DRG: VCN-DEV ↔ vcn-oke
          ▼
      OKE Load Balancers internos  (10.110.128-143.x — sbn-lb-1/2)
          │
          ▼
      K8s Services / Ingress  (cls-dev-nexus)
          │
          ▼
      Pods  (worker nodes — sbn-workers-1/2/3 — cmp-dev-nexus)

0.3 Fluxo MFE Frontend (planejado )

Browser
  │
  └─► Cloudflare (mfe-user-dev.invista.com.br) [DNS Proxy]
          │
          ▼  ⏳ PENDENTE: DRG attach vcn-oke → DRG-Invista-Shared
      LB Test_Crivo_Dev  (10.8.4.127 — VCN-Shared)
          │  rota: mfe-user-dev.invista.com.br → 10.110.198.250:443
          │
          │  DRG: VCN-Shared → vcn-oke
          ▼
      api-gateway-mfe-dev  (PRIVATE — 10.110.198.250 — sbn-api-gateway)
          │  / → index.html   /{path*} → arquivos estáticos
          ▼
      OCI Object Storage
      nexus-mfe-user-development  (namespace: grbb7qzeuoag)

  Atual (sem DNS):
      https://guhal72tzyekzchzamhhi3lvgi.apigateway.sa-saopaulo-1.oci.customer-oci.com/

0.4 Mapa de Compartments e Recursos

invistacloud (root)
│
├── cmp-top-invista
│   └── cmp-dev-inv  ──────────────────────────────────────────────────────────────┐
│       │                                                                          │
│       │  [TERRAFORM ✅] vcn-oke (10.110.0.0/16)                                  │
│       │  [TERRAFORM ✅] api-gateway-mfe-dev (10.110.198.250)                     │
│       │  [TERRAFORM ✅] observability (alarms, log group, dashboards)            │
│       │  [MANUAL]       VCN-DEV (10.6.0.0/16)                                   │
│       │  [MANUAL]       api-gateway-nexus-dev (PRIVATE, 10.6.0.123)             │
│       │  [MANUAL]       DRG attachments (VCN-DEV ↔ vcn-oke)                    │
│       │  [PIPELINE CI]  buckets: mfe-shell-dev                                  │
│       │                                                                          │
│       └── cmp-dev-nexus  ────────────────────────────────────────────────────┐  │
│               │                                                               │  │
│               │  [TERRAFORM ✅] cls-dev-nexus         (k8s v1.34.1, x3 VMs) │  │
│               │  [TERRAFORM ✅] cls-dev-barramento    (k8s v1.34.1, x3 VMs) │  │
│               │  [TERRAFORM ✅] cls-dev-observabilidade (k8s v1.34.1, x3 VMs)│  │
│               │  [OKE-managed]  5x Load Balancers (OKE Services)             │  │
│               │  [MANUAL]       buckets: tfstate-*, invista-inventcloud-bucket3│  │
│               └───────────────────────────────────────────────────────────────┘  │
│                                                                                   │
└── cmp-shared-inv                                                                  │
        [MANUAL]  LB Test_Crivo_Dev (10.8.4.127, VCN-Shared 10.8.0.0/16)          │
        [MANUAL]  DRG-Invista-Shared                                                │
                                                                                    │
OKE > DEV  ←── VCNs orphans deletadas em 2026-02-25 ────────────────────────────┘

0.5 O que é Terraform vs Manual vs Pipeline CI

Recurso Gerenciado por Repositório
VCN vcn-oke (10.110.0.0/16) + subnets + gateways Terraform tf_oci_clusters/modules/network
OKE clusters (x3) + node pools Terraform tf_oci_clusters/modules/oke_cluster
api-gateway-mfe-dev + deployments MFE Terraform tf_oci_clusters/modules/api_gateway_mfe
ArgoCD (Helm v7.3.0) em cada cluster Terraform (null_resource) tf_oci_clusters/environments/dev/argocd.tf
Observabilidade (alarms, log group, dashboards) Terraform tf_oci_clusters/modules/observability
Compartments cmp-dev-nexus / cmp-dev-inv Terraform (flags create_*=false = não recria) tf_oci_clusters
VCN-DEV (10.6.0.0/16) + subnets + gateways Manual (OCI Console)
api-gateway-nexus-dev (PRIVATE) + deployments Manual (OCI Console)
LB Test_Crivo_Dev (10.8.4.127) Manual
DRG-Invista-Shared + attachments Manual
DNS Cloudflare (*.invista.com.br) Manual (API Cloudflare)
Object Storage buckets (mfe-*) Pipeline CI (azure-pipelines.yml) Repos dos MFEs
OKE Load Balancers (5x) OKE-managed (K8s Service) Apps no cluster
Kubeconfigs (~/.kube/config-dev-*) Terraform (local-exec) Gerado no apply

1. Compartments

Hierarquia

invistacloud (root)
└── cmp-top-invista
    └── cmp-dev-inv  ← compartment pai (local.compartment_id no Terraform)
        └── cmp-dev-nexus  ← clusters OKE, node pools, LBs
Compartment OCID Uso
cmp-dev-inv ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a VCN, API Gateway, Object Storage, Observabilidade
cmp-dev-nexus ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma Clusters OKE, Node Pools, Load Balancers

Nota: O Terraform usa cmp-dev-inv como compartment raiz do ambiente (existing_compartment_id) e cmp-dev-nexus como compartment dos clusters (cluster_compartment_id_map).


2. OKE Clusters

Clusters Ativos

# Cluster OCID (sufixo) Versão K8s Node Pool Nodes
1 cls-dev-nexus …cobrewkvc3a v1.34.1 np-dev-1 3x VM.Standard.E4.Flex
2 cls-dev-barramento …cifn2eknv6q v1.34.1 np-dev-2 3x VM.Standard.E4.Flex
3 cls-dev-observabilidade …crszb62robq v1.34.1 np-dev-3 3x VM.Standard.E4.Flex

Configuração dos Node Pools

Parâmetro Valor
Shape VM.Standard.E4.Flex
OCPUs 2
Memória 16 GB
Nodes por pool 3 (node_pool_size_up = 3)
Modo de escala up (escala zero: node_pool_size_down = 0)
Autoscaler Desabilitado
Pods CIDR 10.244.0.0/16
Services CIDR 10.96.0.0/16

Worker Nodes (Compute Instances)

Instância Cluster Shape Estado
oke-cifn2eknv6q-* (x3) cls-dev-barramento VM.Standard.E4.Flex RUNNING
oke-cobrewkvc3a-* (x3) cls-dev-nexus VM.Standard.E4.Flex RUNNING
oke-crszb62robq-* (x3) cls-dev-observabilidade VM.Standard.E4.Flex RUNNING

Kubeconfig

Os kubeconfigs são gerados automaticamente pelo Terraform via null_resource.kubeconfig:

~/.kube/config-dev-1  → cls-dev-nexus
~/.kube/config-dev-2  → cls-dev-barramento
~/.kube/config-dev-3  → cls-dev-observabilidade

Gerar manualmente:

oci ce cluster create-kubeconfig \
  --cluster-id <CLUSTER_OCID> \
  --file ~/.kube/config-dev-<N> \
  --token-version 2.0.0

3. Rede

VCN

VCN CIDR Compartment Gerenciada por
vcn-oke 10.110.0.0/16 cmp-dev-inv / OKE > DEV Terraform (tf_oci_clusters)
VCN-DEV 10.6.0.0/16 cmp-dev-inv Manual

Subnets vcn-oke (10.110.0.0/16)

Subnet CIDR Tipo Uso
sbn-workers-1 10.110.0.0/20 Pública OKE worker nodes
sbn-workers-2 10.110.16.0/20 Pública OKE worker nodes
sbn-workers-3 10.110.32.0/20 Pública OKE worker nodes
sbn-lb-1 10.110.128.0/20 Pública Load Balancers OKE + API Gateway MFE
sbn-lb-2 10.110.144.0/20 Pública Load Balancers OKE
sbn-api-gateway 10.110.192.0/20 Privada Criada pelo Terraform (disponível — não usada atualmente)

Gateways de Rede

Gateway Tipo Uso
igw-oke Internet Gateway Egress público para workers e LBs
nat-oke NAT Gateway Egress privado para sbn-api-gateway
sgw-oke Service Gateway Acesso a serviços OCI (Object Storage, etc.)
DRG Dynamic Routing Gateway Cross-VCN: vcn-okeVCN-DEV

4. Load Balancers

Todos os LBs são criados e gerenciados pelo OKE (via Services do tipo LoadBalancer no Kubernetes):

Display Name (ID OKE) IP Shape Cluster Criado em
35adee2d-… 10.110.133.131 100Mbps cls-dev-barramento 2026-01-26
b8344bb7-… 10.110.135.3 100Mbps cls-dev-nexus 2026-01-26
bc0548de-… 10.110.129.64 100Mbps cls-dev-observabilidade 2026-01-26
177c06f0-… 10.110.143.54 100Mbps cls-dev-nexus 2026-01-29
029cfee6-… 137.131.236.202 (público) 100Mbps cls-dev-nexus 2026-02-09

Os IPs privados (10.110.x) estão na subnet sbn-lb-1 ou sbn-lb-2. O único IP público (137.131.236.202) pertence a um Service exposto externamente no cls-dev-nexus.


5. API Gateways

api-gateway-mfe-dev — Terraform-managed

Campo Valor
Nome api-gateway-mfe-dev
Compartment cmp-dev-inv
Tipo PUBLIC
Subnet sbn-lb-1 (10.110.128.0/20) — vcn-oke
Gerenciado por Terraform (modules/api_gateway_mfe)
Hostname guhal72tzyekzchzamhhi3lvgi.apigateway.sa-saopaulo-1.oci.customer-oci.com

Deployments configurados:

MFE Bucket Path Backend
mfe-user mfe-user-dev /{path*} Object Storage grbb7qzeuoag
mfe-user mfe-user-dev / (fallback SPA) index.html no bucket

api-gateway-nexus-dev — Manual

Campo Valor
Nome api-gateway-nexus-dev
Compartment cmp-dev-inv
Subnet SBNT-DEV (10.6.0.0/24) — VCN-DEV
Gerenciado por Manual
Conectividade OKE Via DRG (cross-VCN: VCN-DEV ↔ vcn-oke)

Pendência: Migrar api-gateway-nexus-dev para sbn-api-gateway na vcn-oke (ver OCI-NETWORK-ANALYSIS.md — Opção A).


6. Object Storage

Buckets em cmp-dev-nexus

Bucket Uso Criado em
invista-inventcloud-bucket3 Uso geral 2026-02-06
tfstate-gqysee Terraform remote state 2025-12-30
tfstate-inidhr Terraform remote state 2025-12-30
tfstate-terraform Terraform remote state 2025-12-30

Buckets em cmp-dev-inv

Bucket Uso Criado em
mfe-shell-dev MFE Shell (frontend) 2026-02-24

Namespace do Object Storage: grbb7qzeuoag


7. ArgoCD

ArgoCD instalado em todos os 3 clusters via Helm pelo Terraform:

Parâmetro Valor
Chart Version 7.3.0 (argo/argo-cd)
Namespace argocd
LB tipo Interno (annotation oci-load-balancer-internal=true)
OIDC OCI IDCS (integrado via outputs do módulo identity)

URLs internas (somente acesso via VCN):

Cluster URL
cls-dev-nexus (1) https://argocd.dev-01.interno.invista.com.br
cls-dev-barramento (2) https://argocd.dev-02.interno.invista.com.br
cls-dev-observabilidade (3) https://argocd.dev-03.interno.invista.com.br

RBAC OCI IDCS:

Grupo OCI Role ArgoCD
invista-oke-admin admin
invista-oke-dev readonly
invista-oke-readonly readonly

8. Observabilidade

Gerenciada pelo módulo modules/observability em cmp-dev-inv:

Recurso Tipo Configuração
Alarmes OCI Monitoring oci_computeagent CPU > 90% (PT10M) → CRITICAL; CPU > 75% (PT15M) → WARNING
Log Group OCI Logging
Dashboard OCI Management Dashboard Import de dashboards/oke-observability-import.json

9. Terraform — tf_oci_clusters

Repositório

Campo Valor
Organização Azure DevOps — CN-Squad
Projeto Invista FIDC - Nexus
Repositório tf_oci_clusters
Pipeline terraform-tf_oci_clusters (ID 51)
Variable Group oci-terraform (ID 34)
Backend Object Storage OCI (S3-compatible) — bucket tfstate-* em cmp-dev-nexus

Estrutura de Arquivos

tf_oci_clusters/
├── environments/
│   ├── dev/
│   │   ├── main.tf               # Clusters, rede, bastion, observabilidade
│   │   ├── api_gateway_mfe.tf    # API Gateway MFE + deployments
│   │   ├── argocd.tf             # ArgoCD Helm install + kubeconfig
│   │   ├── backend.tf            # Remote state config
│   │   ├── providers.tf          # OCI provider
│   │   ├── variables.tf          # Todas as variáveis
│   │   └── terraform.ci.tfvars  # Valores do ambiente DEV (pipeline CI)
│   ├── hml/                      # Ambiente HML (estrutura similar)
│   └── prod/                     # Ambiente PROD (estrutura similar)
│
├── modules/
│   ├── oke_cluster/              # OKE cluster + node pool
│   │   ├── main.tf               # oci_containerengine_cluster + node_pool
│   │   └── variables.tf
│   ├── network/                  # VCN, subnets, gateways, route tables, security lists
│   │   ├── main.tf
│   │   └── variables.tf
│   ├── api_gateway_mfe/          # API Gateway PUBLIC para MFEs estáticos
│   │   ├── main.tf               # oci_apigateway_gateway + deployments por MFE
│   │   └── variables.tf
│   ├── compartment/              # Criação de compartment
│   ├── observability/            # ONS + OCI Logging + Alarms + Dashboards
│   └── iam_service_accounts/     # IAM para service accounts
│
├── compartments/                 # Gerenciamento top-level de compartments
├── dns/                          # DNS OCI
├── iam/                          # IAM policies
├── identity/                     # OIDC / IDCS (usado pelo ArgoCD)
├── argocd/
│   ├── values.yaml               # Helm values do ArgoCD
│   └── application-dev.yaml      # ArgoCD Application manifest (GitOps)
└── dashboards/
    └── oke-observability-import.json

terraform.ci.tfvars DEV — Valores Principais

env_name                   = "dev"
create_compartment         = false
create_cluster_compartment = false  # removido manualmente 2026-02-25
existing_compartment_id    = "ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a" # cmp-dev-inv

cluster_compartment_id_map = {
  "1" = "ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma" # cmp-dev-nexus
  "2" = "ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma"
  "3" = "ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma"
}

kubernetes_version = "v1.34.1"
node_shape         = "VM.Standard.E4.Flex"
ocpus              = 2
memory_in_gbs      = 16
vcn_cidr           = "10.110.0.0/16"

scale_mode          = "up"
node_pool_size_up   = 3
node_pool_size_down = 0

enable_bastion         = true
admin_cidr             = "187.65.249.125/32"
enable_api_gateway_mfe = true

Pipeline CI/CD

Push to main (tf_oci_clusters)
  → Bootstrap (init + validate)
    → Detect Changes (diff por environment)
      → Plan (terraform plan -var-file=terraform.ci.tfvars)
        → Aprovação Manual
          → Apply (terraform apply)

10. Fluxo de Dependências

tf_oci_clusters (pipeline ID 51)
    │
    ├── module.network             → VCN vcn-oke (10.110.0.0/16)
    │       └── subnets, IGW, NAT, SGW, route tables, security lists
    │
    ├── module.cluster[1,2,3]     → cls-dev-nexus / cls-dev-barramento / cls-dev-observabilidade
    │       └── node_pool         → np-dev-1/2/3 (VM.Standard.E4.Flex 2cpu/16gb x3)
    │
    ├── module.api_gateway_mfe    → api-gateway-mfe-dev (PUBLIC, sbn-lb-1)
    │       └── deployment mfe-user → bucket mfe-user-dev
    │
    ├── null_resource.kubeconfig  → ~/.kube/config-dev-{1,2,3}
    │
    ├── null_resource.argocd_setup → ArgoCD v7.3.0 em cada cluster
    │
    └── module.observability      → Alarms + Log Group + Dashboards

11. Por que Terraform — Importância e Comparativo com Console OCI

11.1 O problema de provisionar manualmente

Criar o ambiente DEV Nexus via OCI Console exige navegar por dezenas de telas, preencher formulários e decorar dependências entre recursos. Qualquer erro (subnet errada, CIDR conflitante, security list faltando uma porta) só aparece quando algo não funciona — e não existe histórico do que foi feito nem como desfazer de forma controlada.

Exemplo real desse ambiente: as 8 VCNs orphans encontradas em 2026-02-25 existiam porque clusters foram criados/destruídos manualmente sem deletar os recursos de rede. Resultado: 104 recursos abandonados consumindo cota sem nenhum registro.


11.2 Comparativo: Console OCI vs Terraform

Criar 1 cluster OKE completo (cluster + node pool + rede)

Etapa Via Console OCI Via Terraform
Criar VCN ~5 min (telas: VCN, CIDR, DNS) terraform apply
Criar subnets (5x) ~20 min (cada subnet: nome, CIDR, tipo, route table, security list) já incluso no apply
Criar IGW + NAT + SGW ~10 min (3 recursos separados) já incluso
Criar route tables (3x) + regras ~15 min já incluso
Criar security lists (3x) + regras de portas ~20 min já incluso
Criar cluster OKE ~10 min (escolher versão, VCN, subnets, endpoint) já incluso
Criar node pool ~10 min (shape, imagem, placement, SSH key) já incluso
Total (1 cluster) ~90 min · propenso a erros ~5 min · repetível
Total (3 clusters como no DEV) ~45 horas ~5 min (mesma execução)

Recriar o ambiente do zero (ex.: novo ambiente HML/PROD)

Cenário Console OCI Terraform
Tempo estimado 12 dias (com documentação detalhada) 1520 min (cp -r environments/dev environments/staging + ajuste de tfvars)
Risco de divergência entre ambientes Alto — cada clique pode ser diferente Zero — mesmos módulos, variáveis diferentes
Rastreabilidade Nenhuma — "alguém clicou em alguma coisa" Git blame, PR, histórico de apply
Rollback Manual — deletar na ordem certa terraform destroy ou reverter commit

11.3 O que o Terraform garante nesse ambiente

Um único comando:
terraform apply -var-file=terraform.ci.tfvars

Cria/garante automaticamente:
  ✅  1 VCN (vcn-oke 10.110.0.0/16)
  ✅  6 subnets (workers x3, LB x2, api-gateway x1)
  ✅  3 gateways (IGW + NAT + SGW)
  ✅  3 route tables com regras corretas
  ✅  3 security lists com portas OKE (6443, 10250, NodePort, etc.)
  ✅  3 clusters OKE (cls-dev-nexus / barramento / observabilidade)
  ✅  3 node pools (np-dev-1/2/3 · VM.Standard.E4.Flex · 2cpu/16gb · 3 nodes)
  ✅  ArgoCD v7.3.0 instalado via Helm nos 3 clusters
  ✅  Kubeconfigs gerados em ~/.kube/config-dev-{1,2,3}
  ✅  API Gateway MFE (api-gateway-mfe-dev) + deployment mfe-user
  ✅  Alarms de CPU (WARNING 75% / CRITICAL 90%)
  ✅  Log Group + Dashboard de observabilidade OKE

  Total: ~47 recursos OCI · 1 comando · ~12 min de pipeline

11.4 Scale up / Scale down em segundos

Um dos maiores benefícios práticos: ligar e desligar os node pools sem recriar os clusters.

# Desligar workers (economizar custo fora do horário):
# terraform.ci.tfvars:
scale_mode = "down"   # node_pool_size_down = 0

# Ligar workers:
scale_mode = "up"     # node_pool_size_up = 3

Via Console: editar cada node pool individualmente (3 clusters × 1 node pool = 3 operações manuais, ~15 min). Via Terraform: alterar 1 linha no tfvars + push → pipeline aplica em todos os 3 clusters automaticamente.


11.5 Infraestrutura como código = documentação viva

O arquivo terraform.ci.tfvars documenta exatamente o estado atual do ambiente:

kubernetes_version = "v1.34.1"   # versão do K8s nos 3 clusters
node_shape         = "VM.Standard.E4.Flex"
ocpus              = 2            # CPU por worker
memory_in_gbs      = 16           # RAM por worker
vcn_cidr           = "10.110.0.0/16"
node_pool_size_up  = 3            # workers ativos
enable_bastion     = true         # bastion habilitado
admin_cidr         = "187.65.249.125/32"  # IP liberado para acesso admin

Qualquer pessoa com acesso ao repositório sabe exatamente o que está rodando — sem precisar abrir o Console OCI.


11.6 Custo de não usar Terraform (lição aprendida)

Problema encontrado em 2026-02-25 Causa Se fosse Terraform
2 compartments cmp-dev-nexus (um vazio, um ativo) Ciclo anterior criou manualmente fora do state Terraform teria gerenciado 1 único compartment
8 VCNs orphans + 104 sub-recursos abandonados Clusters destruídos via console sem destruir rede terraform destroy teria removido tudo
VCN-DEV usada para API Gateway (arquitetura incorreta) API Gateway criado manualmente na VCN errada Terraform teria posto na subnet correta (sbn-api-gateway)
Sem rastreabilidade de quando/por quê recursos foram criados Console não deixa histórico Git commit com autor, data e motivo

Atualizado em: 2026-02-25


Referências

Recurso OCID / URL
Compartment cmp-dev-nexus ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma
Compartment cmp-dev-inv ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a
VCN vcn-oke ocid1.vcn.oc1.sa-saopaulo-1.amaaaaaasks3yliapqrmikfzagpgqohuzjqik3hx63w7r2uajiqv5krvxkda
VCN VCN-DEV ocid1.vcn.oc1.sa-saopaulo-1.amaaaaaasks3yliatoq6uvqqak3kax775ksd2jastvgsbiki7mgj6jzue6dq
API Gateway MFE hostname guhal72tzyekzchzamhhi3lvgi.apigateway.sa-saopaulo-1.oci.customer-oci.com
Repo Terraform Azure DevOps — CN-Squad / Invista FIDC - Nexus / tf_oci_clusters
Região sa-saopaulo-1
Object Storage Namespace grbb7qzeuoag

Atualizado em: 2026-02-25