- 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>
675 lines
33 KiB
Markdown
675 lines
33 KiB
Markdown
# 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 | 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
|
||
|
||
```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 (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)** | **~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) + 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.
|
||
|
||
```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-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*
|