# OCI — Ambiente DEV Nexus (cmp-dev-nexus) > **Atualizado:** 2026-03-03 (sessão 2) | **Responsável:** Tiago Ribeiro > **Foco:** Compartment `cmp-dev-nexus` — o que existe, o que o Terraform sobe e o que se comunica com o quê. --- ## 1. Compartments ``` invistacloud (root) └── cmp-top-invista └── cmp-dev-inv (OCID: aaaaaaaa76x3...) ← compartment pai — rede, observabilidade └── cmp-dev-nexus (OCID: aaaaaaaahycc62za...) ← clusters, API gateways, buckets MFE ``` | Compartment | OCID | Papel | |---|---|---| | `cmp-dev-inv` | `ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a` | Rede (`vcn-oke`), Observabilidade, Bastion | | `cmp-dev-nexus` | `ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma` | Clusters OKE, API Gateways, Buckets MFE, tfstate | > **Regra no Terraform:** > - `local.compartment_id` → `cmp-dev-inv` (variável `existing_compartment_id` no `terraform.ci.tfvars`) > - `local.cluster_compartment_id` → `cmp-dev-nexus` (derivado de `cluster_compartment_id_map`) --- ## 2. O que existe em cmp-dev-nexus ### 2.1 Clusters OKE — Terraform | Cluster | OCID (sufixo) | K8s | Node Pool | Nodes | |---|---|---|---|---| | `cls-dev-nexus` | `…cobrewkvc3a` | v1.34.1 | `np-dev-1` | 3× VM.Standard.E4.Flex (2 OCPU / 16 GB) | | `cls-dev-barramento` | `…cifn2eknv6q` | v1.34.1 | `np-dev-2` | 3× VM.Standard.E4.Flex | | `cls-dev-observabilidade` | `…crszb62robq` | v1.34.1 | `np-dev-3` | 3× VM.Standard.E4.Flex | Workers usam subnets em **`cmp-dev-inv` / `vcn-oke`** (`sbn-workers-1/2/3`). O compartment dos workers é `cmp-dev-nexus`. ### 2.2 Load Balancers OKE — OKE-managed Criados automaticamente pelo Kubernetes (Services do tipo `LoadBalancer`). Ficam nas subnets `sbn-lb-1/2` da `vcn-oke`. | IP | Visibilidade | Cluster | |---|---|---| | `10.110.133.131` | Privado | cls-dev-barramento | | `10.110.135.3` | Privado | cls-dev-nexus | | `10.110.129.64` | Privado | cls-dev-observabilidade | | `10.110.143.54` | Privado | cls-dev-nexus | | `137.131.236.202` | **Público** | cls-dev-nexus | ### 2.3 API Gateways PUBLIC por MFE — Terraform Criados pelo módulo `modules/api_gateway_mfe`. **Um gateway por MFE** (OCI restrição: só um deployment com `path_prefix="/"` por gateway). Servem arquivos estáticos dos MFEs via Object Storage. | Nome | Compartment | Subnet | Hostname OCI | |---|---|---|---| | `api-gw-mfe-shell-dev` | `cmp-dev-nexus` | `sbn-lb-1` | `la6rwvy7aelvtkhemy4mvicprq.apigateway.sa-saopaulo-1.oci.customer-oci.com` | | `api-gw-mfe-auth-dev` | `cmp-dev-nexus` | `sbn-lb-1` | `imz5toeub62yeomplgnq3yrwgm.apigateway.sa-saopaulo-1.oci.customer-oci.com` | | `api-gw-mfe-user-dev` | `cmp-dev-nexus` | `sbn-lb-1` | `gstnru35evwvofk7ptgsfa6uwa.apigateway.sa-saopaulo-1.oci.customer-oci.com` | | `api-gw-mfe-person-dev` | `cmp-dev-nexus` | `sbn-lb-1` | `e3yyi4vpyp7awgkac7d46hmfsq.apigateway.sa-saopaulo-1.oci.customer-oci.com` | | `api-gw-mfe-poc-dev` | `cmp-dev-nexus` | `sbn-lb-1` | `in3a3xf2c5ndft6nrzsvla7z6u.apigateway.sa-saopaulo-1.oci.customer-oci.com` | | `api-gw-mfe-formalization-dev` | `cmp-dev-nexus` | `sbn-lb-1` | `ptv42bse7jtql4txgrr7p4sqyq.apigateway.sa-saopaulo-1.oci.customer-oci.com` | Cada gateway tem **1 deployment** com `path_prefix="/"` contendo: - `GET /` → `mfe-{name}-dev/o/index.html` - `GET /{path*}` → `mfe-{name}-dev/o/{path}` > Módulo TF: `tf_oci_clusters/modules/api_gateway_mfe` > Após `terraform apply`, hostnmaes disponíveis no output `mfe_gateway_hostnames` da pipeline. > Cada MFE tem CNAME no Cloudflare apontando para seu hostname único. ### 2.4 API Gateway PRIVATE — Manual (`api-gateway-nexus-dev`) Serve o backend dos MSes. **Não gerenciado pelo Terraform.** | Campo | Valor | |---|---| | Nome | `api-gateway-nexus-dev` | | Tipo | **PRIVATE** | | Compartment | `cmp-dev-nexus` | | Subnet | `SBNT-DEV` (10.6.0.0/24) — **VCN-DEV** (manual) | | Hostname | `dnqe6ufrommkqxtfp7k2ehrbmu.apigateway.sa-saopaulo-1.oci.customer-oci.com` | | Gerenciado por | **Manual** (OCI Console) | **11 deployments ativos:** | Path | Serviço | |---|---| | `/api/auth` | ms-auth | | `/api/user` | ms-user | | `/api/user-external` | ms-user (externo) | | `/api/user-internal` | ms-user (interno) | | `/api/person` | ms-person | | `/api/sso` | ms-auth-sso | | `/api/role` | ms-role | | `/api/poc` | ms-poc | | `/api/cache` | ms-cache | | `/api/commercial-manager` | ms-commercial-manager | | `/mfe-shell` | mfe-shell (legado — substituído pelo `api-gateway-dev`) | ### 2.5 Object Storage — Buckets MFE — Terraform Criados pelo módulo `api_gateway_mfe` junto com o gateway. Namespace: `grbb7qzeuoag`. | Bucket | Acesso | Conteúdo | |---|---|---| | `mfe-auth-dev` | ObjectReadWithoutList | Build Angular do mfe-auth | | `mfe-user-dev` | ObjectReadWithoutList | Build Angular do mfe-user | | `mfe-person-dev` | ObjectReadWithoutList | Build Angular do mfe-person | | `mfe-poc-dev` | ObjectReadWithoutList | Build Angular do mfe-poc | | `mfe-shell-dev` | ObjectReadWithoutList | Build Angular do mfe-shell | | `mfe-formalization-dev` | ObjectReadWithoutList | Build Angular do mfe-formalization | > O conteúdo dos buckets é publicado pelas **pipelines dos repos de MFE** (branch `devops`), usando o template `azure-pipelines-templates/mfe/deploy-mfe-oci.yaml`. ### 2.6 Object Storage — Buckets Manuais | Bucket | Uso | |---|---| | `tfstate-gqysee` | Terraform remote state | | `tfstate-inidhr` | Terraform remote state | | `tfstate-terraform` | Terraform remote state principal | | `invista-inventcloud-bucket3` | Uso geral | --- ## 3. Rede — O que cmp-dev-nexus usa Os recursos de rede ficam em **`cmp-dev-inv`** mas os clusters e gateways de `cmp-dev-nexus` se comunicam através delas. ### 3.1 VCN `vcn-oke` — Terraform (em `cmp-dev-inv`) | Subnet | CIDR | Tipo | Usado por | |---|---|---|---| | `sbn-workers-1` | `10.110.0.0/20` | Pública | Worker nodes (cls-dev-nexus) | | `sbn-workers-2` | `10.110.16.0/20` | Pública | Worker nodes (cls-dev-barramento) | | `sbn-workers-3` | `10.110.32.0/20` | Pública | Worker nodes (cls-dev-observabilidade) | | `sbn-lb-1` | `10.110.128.0/20` | Pública | OKE LBs + **api-gateway-dev** (PUBLIC) | | `sbn-lb-2` | `10.110.144.0/20` | Pública | OKE LBs | | `sbn-api-gateway` | `10.110.192.0/20` | **Privada** | Disponível — não usada atualmente | **Gateways de rede (vcn-oke):** | Recurso | Tipo | Função | |---|---|---| | `igw-oke` | Internet Gateway | Saída para internet (workers públicos, LBs, api-gateway) | | `nat-oke` | NAT Gateway | Saída privada (sbn-api-gateway) | | `sgw-oke` | Service Gateway | Acesso a OCI Object Storage (sem internet) | | DRG | Dynamic Routing | Interconexão `vcn-oke` ↔ `VCN-DEV` | ### 3.2 VCN `VCN-DEV` — Manual (em `cmp-dev-inv`) | Campo | Valor | |---|---| | CIDR | `10.6.0.0/16` | | Subnet relevante | `SBNT-DEV` — `10.6.0.0/24` (usada pelo `api-gateway-nexus-dev`) | | Conectividade | DRG ↔ `vcn-oke` (roteamento para OKE workers) | --- ## 4. Diagrama de Comunicação ``` INTERNET │ ▼ [Cloudflare CNAME proxied] api-gw-mfe-{name}-dev (PUBLIC · sbn-lb-1 · vcn-oke · cmp-dev-nexus) [um por MFE] │ ├── GET /index.html → Object Storage (mfe-{name}-dev bucket · cmp-dev-nexus) └── GET /{path*} → Object Storage (arquivo estático do MFE) INTERNET │ ▼ [Cloudflare → LB Test_Crivo_Dev (VCN-Shared)] │ DRG: VCN-Shared → VCN-DEV ▼ api-gateway-nexus-dev (PRIVATE · SBNT-DEV · VCN-DEV · cmp-dev-nexus) │ DRG: VCN-DEV → vcn-oke ▼ OKE Load Balancers (sbn-lb-1/2 · vcn-oke · cmp-dev-nexus) │ ▼ K8s Services / Ingress (cls-dev-nexus) │ ▼ Pods (sbn-workers-1/2/3 · vcn-oke · cmp-dev-nexus) ``` --- ## 5. Terraform vs Manual vs OKE-managed | Recurso | Gerenciado por | Onde criar/alterar | |---|---|---| | VCN `vcn-oke` + subnets + gateways + route tables | **Terraform** | `tf_oci_clusters/modules/network` | | 3× OKE clusters + node pools (9 workers) | **Terraform** | `tf_oci_clusters/modules/oke_cluster` | | 6× `api-gw-mfe-*-dev` (PUBLIC, um por MFE) + 6 deployments | **Terraform** | `tf_oci_clusters/modules/api_gateway_mfe` | | 6× buckets `mfe-*-dev` (Object Storage) | **Terraform** | `tf_oci_clusters/modules/api_gateway_mfe` | | ArgoCD (Helm v7.3.0) nos 3 clusters | **Terraform** | `tf_oci_clusters/environments/dev/argocd.tf` | | Kubeconfigs `~/.kube/config-dev-{1,2,3}` | **Terraform** (local-exec) | Gerados no `terraform apply` | | Observabilidade (alarms CPU, log group, dashboard) | **Terraform** | `tf_oci_clusters/modules/observability` | | `api-gateway-nexus-dev` (PRIVATE) + 11 deployments | **Manual** (OCI Console) | Console OCI | | `VCN-DEV` (10.6.0.0/16) + SBNT-DEV | **Manual** | Console OCI | | DRG-Invista-Shared + attachments | **Manual** | Console OCI | | LB `Test_Crivo_Dev` (10.8.4.127, VCN-Shared) | **Manual** | Console OCI | | DNS Cloudflare (`*.invista.com.br`) | **Manual** | Cloudflare Dashboard | | Conteúdo dos buckets MFE (builds Angular) | **Pipeline CI** | Repos `mfe-*` branch `devops` | | 5× OKE Load Balancers | **OKE-managed** | K8s YAML (Services) | | Buckets `tfstate-*` | **Manual** | Console OCI (criados uma vez) | --- ## 6. Terraform — Como executar ### 6.1 Repositório | Campo | Valor | |---|---| | Azure DevOps | CN-Squad / Invista FIDC - Nexus | | Repo | `tf_oci_clusters` | | Pipeline | `terraform-tf_oci_clusters` (ID 51) | | Variable Group | `oci-terraform` (ID 34) | | Backend (remote state) | Object Storage OCI — bucket `tfstate-terraform` em `cmp-dev-nexus` | ### 6.2 Estrutura de arquivos ``` tf_oci_clusters/ ├── environments/dev/ │ ├── main.tf # Clusters OKE, rede, bastion, observabilidade │ ├── api_gateway_mfe.tf # API Gateway PUBLIC + deployments + buckets MFE │ ├── argocd.tf # ArgoCD Helm install + kubeconfig gerado │ ├── backend.tf # Remote state (S3-compat Object Storage) │ ├── providers.tf # OCI provider (região, tenancy, user, key) │ ├── variables.tf # Declaração de todas as variáveis │ └── terraform.ci.tfvars # Valores do ambiente DEV (usado pela pipeline) │ ├── modules/ │ ├── network/ # VCN, subnets, IGW, NAT, SGW, route tables, security lists │ ├── oke_cluster/ # OKE cluster + node pool │ ├── api_gateway_mfe/ # API Gateway PUBLIC + buckets Object Storage + deployments │ ├── observability/ # OCI Monitoring alarms, Log Group, dashboards │ ├── compartment/ # Criação de compartment │ ├── iam_domain/ # IAM Domain (OIDC/IDCS) │ └── iam_service_accounts/ # IAM service accounts │ └── argocd/ ├── values.yaml # Helm values do ArgoCD └── application-dev.yaml # ArgoCD Application GitOps manifest ``` ### 6.3 terraform.ci.tfvars DEV — Campos obrigatórios e o que significam ```hcl # ── Ambiente ──────────────────────────────────────────────── env_name = "dev" # Sufixo em todos os recursos (ex: api-gateway-dev) # ── Compartments (preencher com OCIDs do Console OCI) ─────── create_compartment = false # cmp-dev-inv já existe — não recriar create_cluster_compartment = false # cmp-dev-nexus já existe — não recriar existing_compartment_id = "ocid1.compartment.oc1..aaaaaaaa76x3..." # cmp-dev-inv cluster_compartment_id_map = { "1" = "ocid1.compartment.oc1..aaaaaaaahycc62za..." # cmp-dev-nexus "2" = "ocid1.compartment.oc1..aaaaaaaahycc62za..." "3" = "ocid1.compartment.oc1..aaaaaaaahycc62za..." } # ── Rede ──────────────────────────────────────────────────── vcn_cidr = "10.110.0.0/16" # CIDR da vcn-oke # ── Clusters OKE ──────────────────────────────────────────── kubernetes_version = "v1.34.1" node_shape = "VM.Standard.E4.Flex" ocpus = 2 memory_in_gbs = 16 node_pool_size_up = 3 # Workers ativos node_pool_size_down = 0 # Workers no scale-down (desliga todos) scale_mode = "up" # "up" = produtivo, "down" = econômico # ── Bastion (debug/acesso SSH) ─────────────────────────────── enable_bastion = true admin_cidr = "SEU_IP_PUBLICO/32" # IP liberado para SSH no bastion ssh_public_key_path = "../../config/ssh/ci_ssh_key.pub" # arquivo em config/ssh/ # ── API Gateway MFE ───────────────────────────────────────── enable_api_gateway_mfe = true mfe_object_namespace = "grbb7qzeuoag" # namespace fixo do tenancy # ── Observabilidade ───────────────────────────────────────── observability_enable_dashboards = true observability_dashboard_import_file = "../../dashboards/oke-observability-import.json" ``` ### 6.4 Variáveis sensíveis — Variable Group `oci-terraform` (Azure DevOps) Estas variáveis **não ficam no tfvars** — são injetadas pela pipeline via Variable Group: | Variável | Descrição | De onde pegar | |---|---|---| | `TF_VAR_tenancy_ocid` | OCID do tenancy | Console OCI → Perfil → Tenancy | | `TF_VAR_user_ocid` | OCID do usuário de serviço | Console OCI → IAM → Users | | `TF_VAR_fingerprint` | Fingerprint da chave API | Console OCI → IAM → Users → API Keys | | `TF_VAR_private_key_path` | Caminho da chave privada no agent | Arquivo no Azure DevOps agent | | `TF_VAR_oci_region` | Região OCI | `sa-saopaulo-1` | | `TF_VAR_compartment_parent_ocid` | OCID do compartment pai (cmp-top-invista) | Console OCI → IAM → Compartments | | `OCI_CLI_KEY_FILE` | Caminho da chave para OCI CLI (kubeconfig) | Mesmo arquivo da chave privada | ### 6.5 Fluxo da pipeline ``` Push para main (tf_oci_clusters) └─► Stage: Bootstrap terraform init -backend-config=... terraform validate Stage: DEV — Plan terraform plan -var-file=terraform.ci.tfvars -out=plan.tfplan Stage: DEV — Approval ← aprovação manual no Azure DevOps Stage: DEV — Apply terraform apply plan.tfplan ``` ### 6.6 O que o terraform apply cria no cmp-dev-nexus ``` 6 API Gateways PUBLIC (um por MFE, sbn-lb-1, vcn-oke, cmp-dev-nexus): api-gw-mfe-shell-dev → deploy-mfe-shell-dev api-gw-mfe-auth-dev → deploy-mfe-auth-dev api-gw-mfe-user-dev → deploy-mfe-user-dev api-gw-mfe-person-dev → deploy-mfe-person-dev api-gw-mfe-poc-dev → deploy-mfe-poc-dev api-gw-mfe-formalization-dev → deploy-mfe-formalization-dev 6 buckets Object Storage: mfe-auth-dev / mfe-user-dev / mfe-person-dev mfe-poc-dev / mfe-shell-dev / mfe-formalization-dev (namespace: grbb7qzeuoag · acesso: ObjectReadWithoutList) 3 clusters OKE (em cmp-dev-nexus, usando vcn-oke de cmp-dev-inv): cls-dev-nexus → np-dev-1 (3× VM.Standard.E4.Flex) cls-dev-barramento → np-dev-2 (3× VM.Standard.E4.Flex) cls-dev-observabilidade → np-dev-3 (3× VM.Standard.E4.Flex) ArgoCD v7.3.0 em cada cluster (Helm, namespace argocd) Kubeconfigs: ~/.kube/config-dev-{1,2,3} ``` --- ## 7. URLs de acesso ### 7.1 API Gateways PUBLIC — MFEs (um por MFE) Hostnames gerados pelo OCI após o `terraform apply`. Ver output `mfe_gateway_hostnames` na pipeline. > Cada MFE tem seu **próprio gateway** (OCI restringe a 1 deployment com `path_prefix="/"` por gateway). > Cada DNS (Cloudflare CNAME) aponta para o hostname exclusivo do gateway do seu MFE. | MFE | DNS (Cloudflare proxied CNAME) | Status | |---|---|---| | Shell | `mfe-shell-dev-oci.invista.com.br` | ✅ CNAME configurado | | Auth | `mfe-auth-dev-oci.invista.com.br` | ✅ CNAME configurado | | User | `mfe-user-dev-oci.invista.com.br` | ✅ CNAME configurado | | Person | `mfe-person-dev-oci.invista.com.br` | ✅ CNAME configurado | | PoC | `mfe-poc-dev-oci.invista.com.br` | ✅ CNAME configurado | | Formalization | `mfe-formalization-dev-oci.invista.com.br` | ✅ CNAME configurado | > Retornam 404 até que a pipeline de cada MFE (branch `devops`) publique o build no bucket. > Se o gateway for recriado pelo Terraform, os hostnames OCI mudam → atualizar os CNAMEs. ### 7.2 API Gateway PRIVATE (`api-gateway-nexus-dev`) — Backend MS Acessado via Cloudflare → LB Test_Crivo_Dev → DRG → VCN-DEV → gateway. | Path | Serviço | URL interna | |---|---|---| | `/api/auth` | ms-auth | `*.invista.com.br/api/auth` | | `/api/user` | ms-user | `*.invista.com.br/api/user` | | `/api/person` | ms-person | `*.invista.com.br/api/person` | | `/api/sso` | ms-auth-sso | `*.invista.com.br/api/sso` | | `/api/role` | ms-role | `*.invista.com.br/api/role` | | `/api/poc` | ms-poc | `*.invista.com.br/api/poc` | | `/api/cache` | ms-cache | `*.invista.com.br/api/cache` | | `/api/commercial-manager` | ms-commercial-manager | `*.invista.com.br/api/commercial-manager` | | `/api/user-external` | ms-user-external | `*.invista.com.br/api/user-external` | | `/api/user-internal` | ms-user-internal | `*.invista.com.br/api/user-internal` | ### 7.3 ArgoCD (somente via VPN/Bastion) | Cluster | URL | |---|---| | `cls-dev-nexus` | `https://argocd.dev-01.interno.invista.com.br` | | `cls-dev-barramento` | `https://argocd.dev-02.interno.invista.com.br` | | `cls-dev-observabilidade` | `https://argocd.dev-03.interno.invista.com.br` | ### 7.4 OKE público direto | Recurso | Endereço | |---|---| | OKE LB público (cls-dev-nexus) | `137.131.236.202` | --- ## 8. O que é manual e precisa ser preenchido manualmente | Item | Onde preencher | Observação | |---|---|---| | `admin_cidr` no tfvars | Seu IP público `/32` | Mudar quando IP mudar | | Variable Group `oci-terraform` no Azure DevOps | DevOps → Pipelines → Library | OCIDs, fingerprint, chave privada | | DNS Cloudflare dos MFEs | Cloudflare Dashboard | CNAME → hostname do `api-gateway-dev` (output do pipeline) | | `api-gateway-nexus-dev` deployments | OCI Console | Adicionar/remover MSes manualmente | | Conteúdo dos buckets MFE | Pipeline MFE (branch `devops`) | Automático após push no repo do MFE | | Kubeconfig local | `terraform apply` (automático) ou `oci ce cluster create-kubeconfig ...` | Precisa de OCI CLI configurado | --- ## 9. Referências — OCIDs e Endpoints | Recurso | OCID / Valor | |---|---| | Tenancy | `ocid1.tenancy.oc1..aaaaaaaasks3yliaqansozrmkfwyi3z2bwlpx6yrd7mxnjukcgxazlqtxurq` | | Compartment `cmp-dev-inv` | `ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a` | | Compartment `cmp-dev-nexus` | `ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma` | | VCN `vcn-oke` | `ocid1.vcn.oc1.sa-saopaulo-1.amaaaaaasks3yliapqrmikfzagpgqohuzjqik3hx63w7r2uajiqv5krvxkda` | | VCN `VCN-DEV` | `ocid1.vcn.oc1.sa-saopaulo-1.amaaaaaasks3yliatoq6uvqqak3kax775ksd2jastvgsbiki7mgj6jzue6dq` | | API Gateway `api-gateway-nexus-dev` | `ocid1.apigateway.oc1.sa-saopaulo-1.amaaaaaasks3yliabohvp4fqav5pansi57thnunkyons52idvpfjppyzugeq` | | API Gateways MFE (6×) | `api-gw-mfe-{shell,auth,user,person,poc,formalization}-dev` — ver seção 2.3 | | Object Storage Namespace | `grbb7qzeuoag` | | Região | `sa-saopaulo-1` | | Pipeline Terraform | ID 51 — `terraform-tf_oci_clusters` | | Variable Group | ID 34 — `oci-terraform` |