# 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.0–32.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:
```bash
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-oke` ↔ `VCN-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 | PRIVATE |
| IP | 10.110.198.250 |
| Subnet | `sbn-api-gateway` (10.110.192.0/20) — vcn-oke |
| Gerenciado por | Terraform (`modules/api_gateway_mfe`) |
| OCID | `ocid1.apigateway.oc1.sa-saopaulo-1.amaaaaaasks3yliabdiquogy2pqyohas4wjopizv2xzgzrclmsvsh4x7ewea` |
| Hostname | `guhal72tzyekzchzamhhi3lvgi.apigateway.sa-saopaulo-1.oci.customer-oci.com` |

**6 deployments configurados (um por MFE) — atualizado em 2026-02-25:**

| MFE | Bucket | Rotas | DNS futuro |
|---|---|---|---|
| `mfe-shell` | `mfe-shell-dev` | `GET /` → index.html · `GET /{path*}` → static | mfe-shell-dev.invista.com.br |
| `mfe-auth` | `mfe-auth-dev` | `GET /` → index.html · `GET /{path*}` → static | mfe-auth-dev.invista.com.br |
| `mfe-user` | `mfe-user-dev` | `GET /` → index.html · `GET /{path*}` → static | mfe-user-dev.invista.com.br |
| `mfe-person` | `mfe-person-dev` | `GET /` → index.html · `GET /{path*}` → static | mfe-person-dev.invista.com.br |
| `mfe-formalization` | `mfe-formalization-dev` | `GET /` → index.html · `GET /{path*}` → static | mfe-formalization-dev.invista.com.br |
| `mfe-poc` | `mfe-poc-dev` | `GET /` → index.html · `GET /{path*}` → static | mfe-poc-dev.invista.com.br |

> Todos os buckets usam namespace `grbb7qzeuoag` e `public-access-type=ObjectReadWithoutList`.

### `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` — MFEs (Pipeline CI)

| Bucket | MFE | Acesso | Criado por |
|---|---|---|---|
| `mfe-shell-dev` | mfe-shell | ObjectReadWithoutList | Pipeline CI (branch devops) |
| `mfe-auth-dev` | mfe-auth | ObjectReadWithoutList | Pipeline CI (branch devops) |
| `mfe-user-dev` | mfe-user | ObjectReadWithoutList | Pipeline CI (branch devops) |
| `mfe-person-dev` | mfe-person | ObjectReadWithoutList | Pipeline CI (branch devops) |
| `mfe-formalization-dev` | mfe-formalization | ObjectReadWithoutList | Pipeline CI (branch devops) |
| `mfe-poc-dev` | mfe-poc | ObjectReadWithoutList | Pipeline CI (branch devops) |

> **Namespace do Object Storage:** `grbb7qzeuoag`
> Template CI/CD: `azure-pipelines-templates/mfe/deploy-mfe-oci.yaml`

---

## 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

```hcl
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 (PRIVATE, sbn-api-gateway, 10.110.198.250)
    │       └── 6 deployments: mfe-shell/auth/user/person/formalization/poc → buckets mfe-*-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)** | **~4–5 horas** | **~5 min (mesma execução)** |

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

| Cenário | Console OCI | Terraform |
|---|---|---|
| Tempo estimado | 1–2 dias (com documentação detalhada) | 15–20 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, PRIVATE) + 6 deployments (mfe-shell/auth/user/person/formalization/poc)
  ✅  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.

```bash
# 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:

```hcl
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-28*

---

## 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-28*
