# Análise: OCI Web Hosting para MFEs ## Base: [Oracle Documentation](https://docs.oracle.com/en/learn/oci-api-gateway-web-hosting/index.html) --- ## Etapas da Documentação vs. Pipeline Atual | Etapa | Documentação OCI | Status Pipeline mfe-user | |-------|------------------|------------------------| | 1 | Create Bucket | ✅ Parcial (cria se não existir) | | 2 | Upload Files | ✅ Feito | | 3 | Create PAR | ✅ Feito | | 4 | Create API Gateway | ⚠️ Parcial (falta VCN/Subnet) | | 5 | Setup Deployment | ⚠️ Parcial | | 6 | Add Routes | ❌ Incompleto | | 7 | Test | ❌ Não testado | --- ## Estado Atual da Infraestrutura OCI (verificado em 2026-02-17) ### VCNs Existentes (Dev) | Nome | CIDR | OCID | |------|------|------| | vcn-oke | 10.120.0.0/16 | `ocid1.vcn.oc1.sa-saopaulo-1.amaaaaaasks3yliatayztbyd6doyk5oglrmrc57jekltu3xnnena6fvruwba` | | vcn-oke | 10.110.0.0/16 | (múltiplas) | ### Subnets Existentes (VCN 10.120.0.0/16) | Nome | CIDR | Tipo | OCID | |------|------|------|------| | sbn-workers-1 | 10.120.0.0/20 | Workers | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaazfomdghi4x4jpluyjooy7ajvsf5y57jq2xcqwf35guodkcn2wrwq` | | sbn-workers-2 | 10.120.16.0/20 | Workers | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaahaqguwt67kzs2dad2vyz3zpjl5ac7ximeqg55gmsnd33c2qikija` | | sbn-workers-3 | 10.120.32.0/20 | Workers | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaafzhmhvz2scr6sfsygixz2gjfnecggiirh3rvyhjcmfn3ohmohj6a` | | sbn-lb-1 | 10.120.128.0/20 | Load Balancer | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaa2ezw57uocis6s2eioypdsnt2p4pwm4fwnjz5jdaqigrm6jaqexeq` | | sbn-lb-2 | 10.120.144.0/20 | Load Balancer | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaav7qtnmgil2qdt3lz6fnqkdcbymjd2dtjjeyo6y7z3s2omq4uvcqa` | ### API Gateways | Nome | Status | |------|--------| | - | ❌ Nenhum criado | ### Buckets (Object Storage) | Nome | Status | |------|--------| | - | ❌ Nenhum criado | --- ## Recomendação: Usar Subnet Existente Para o API Gateway, podemos usar a subnet de Load Balancer existente: - **sbn-lb-1**: `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaa2ezw57uocis6s2eioypdsnt2p4pwm4fwnjz5jdaqigrm6jaqexeq` ## Atividades Necessárias para Completar o Setup OCI ### 🔴 Crítico - Infraestrutura OCI #### 1. Criar/Configurar VCN (Virtual Cloud Network) - **Descrição**: API Gateway precisa de uma VCN com subnets - **Status**: ❌ Precisa ser criado via Terraform - **Responsável**: Infraestrutura #### 2. Obter Subnet OCID para API Gateway - **Descrição**: Cada API Gateway precisa de uma subnet dedicada - **Status**: ❌ Variável `OCI_SUBNET_OCID` não existe no Variable Group #### 3. Criar Variable Group `oci-terraform` no Azure DevOps - **Variáveis necessárias**: - `OCI_USER_OCID` - `OCI_TENANCY_OCID` - `OCI_REGION` - `OCI_FINGERPRINT` - `OCI_PRIVATE_KEY_B64` - `OCI_COMPARTMENT_OCID` - `OCI_SUBNET_OCID` ← **NOVO** --- ### 🟡 Pipeline - Melhorias Necessárias #### 4. Melhorar Routes do API Gateway (SPAs) A pipeline atual usa rota única: ```yaml routes: - path: /{req.*} methods: [GET] backend: type: HTTP url: "${PAR_URL}" ``` **Problema**: Não funciona bem para SPAs (Angular) que precisam de: - `/` → retorna `index.html` - `/route1` → retorna `index.html` (SPA routing) - `*.js` → retorna JavaScript - `*.css` → retorna CSS - `*.html` → retorna HTML **Solução**: Implementar rotas múltiplas conforme documentação: ```yaml routes: # Rota default - index.html para SPA - path: /{req.*} methods: [GET] backend: type: HTTP url: "${PAR_URL}/${request.path[req]}" # Regras específicas por tipo de arquivo - path: /{ext}.js methods: [GET] backend: type: HTTP url: "https://{namespace}.objectstorage.{region}.oci.customer-oci.com/n/{bucket}/o/${request.path[req]}" # wildcard *.js, *.css, etc. ``` #### 5. Suporte a Múltiplos Ambientes | Ambiente | Bucket | API Gateway | |----------|--------|-------------| | Dev | `nexus-{mfe}-dev` | `{mfe}-dev-gateway` | | HML | `nexus-{mfe}-hml` | `{mfe}-hml-gateway` | | PROD | `nexus-{mfe}-prod` | `{mfe}-prod-gateway` | #### 6. Tratar Variáveis por Ambiente ```yaml parameters: - name: environment type: string values: - dev - hml - prod ``` --- ### 🟢 MFEs que Precisam de Pipeline OCI | MFE | Pipeline AWS | Pipeline OCI | Prioridade | |-----|--------------|-------------|------------| | mfe-user | ✅ | ⚠️ Incompleta | Alta | | mfe-shell | ✅ | ❌ Não existe | Alta | | mfe-auth | ✅ | ❌ Não existe | Alta | | mfe-person | ✅ | ❌ Não existe | Média | | mfe-poc | ✅ | ❌ Não existe | Baixa | | mfe-formalization | ❌ | ❌ Não existe | Baixa | --- ## 🔧 Variable Group `oci-terraform` O Variable Group **`oci-terraform`** no Azure DevOps contém as credenciais OCI usadas tanto pelo Terraform (para criar infraestrutura) quanto pelas pipelines de deploy MFE. ### Variáveis Existentes (usadas pelo Terraform) | Variável | Tipo | Descrição | |----------|------|-----------| | `OCI_TENANCY_OCID` | Secret | OCID da Tenancy OCI | | `OCI_USER_OCID` | Secret | OCID do Usuário OCI | | `OCI_FINGERPRINT` | Secret | Fingerprint da chave pública (~47 chars) | | `OCI_PRIVATE_KEY_B64` | Secret | Chave privada (Base64 ou PEM) | | `OCI_REGION` |普通 | Região OCI (ex: sa-saopaulo-1) | | `COMPARTMENT_PARENT_OCID` | Secret | OCID do compartment pai | ### Variáveis FALTANDO para API Gateway (precisam ser adicionadas) | Variável | Tipo | Descrição | |----------|------|-----------| | `OCI_SUBNET_OCID` | Secret | **OCID da Subnet** para API Gateway | ### Onde o `oci-terraform` é usado 1. **Terraform OCI** (`tf_oci_clusters`): - Criar VCNs, Subnets, OKE Clusters - Criar Buckets (se necessário via Terraform) 2. **Pipelines MFE OCI**: - `mfe-user/azure-pipelines-oci.yml` ← usa este grupo - Upload de arquivos para Object Storage - Criar PAR (Pre-Authenticated Request) - Deploy no API Gateway ### Fluxo Completo ``` ┌─────────────────────────────────────────────────────────────────┐ │ 1. Terraform (tf_oci_clusters) usa oci-terraform │ │ └── Cria: VCN, Subnets, OKE Clusters, Buckets │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 2. Pipeline MFE usa oci-terraform │ │ └── Upload → Object Storage │ │ └── Create PAR │ │ └── Deploy → API Gateway │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## Checklist de Atividades ### Infraestrutura (Terraform) - [x] VCN já existe (`vcn-oke` 10.120.0.0/16) - [x] Subnets já existem (sbn-lb-1 pode ser usada para API Gateway) - [ ] Criar subnet dedicada para API Gateway (opcional, pode usar sbn-lb-1) - [ ] Adicionar `OCI_SUBNET_OCID` ao Variable Group `oci-terraform` ### Azure DevOps - [ ] Adicionar `OCI_SUBNET_OCID` ao Variable Group `oci-terraform` - **Valor sugerido**: `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaa2ezw57uocis6s2eioypdsnt2p4pwm4fwnjz5jdaqigrm6jaqexeq` (sbn-lb-1) - [ ] Criar pipelines para todos os MFEs ### Pipeline mfe-user - [ ] Testar pipeline existente - [ ] Corrigir rotas para SPA (Angular) - [ ] Adicionar suporte a múltiplos ambientes (dev/hml/prod) - [ ] Tratar fallback para index.html ### Novos MFEs (criar pipelines) - [ ] mfe-shell → OCI - [ ] mfe-auth → OCI - [ ] mfe-person → OCI - [ ] mfe-poc → OCI - [ ] mfe-formalization → OCI + AWS (primeira pipeline) --- ## Comandos Úteis OCI ```bash # Listar VCNs oci network vcn list --compartment-id # Listar Subnets oci network subnet list --compartment-id --vcn-id # Listar API Gateways oci api-gateway gateway list --compartment-id # Verificar deployment oci api-gateway deployment get --deployment-id ``` --- ## Referências - [Terraform OCI Clusters](../tf_oci_clusters/README.md) - [OCI - Visão Geral](./OCI.md) - [Terraform - Importação](./OCI-TERRAFORM.md) - [API Gateway](./OCI-API-GATEWAY.md)