infracloud/OCI-MFE-TASKS.md

264 lines
8.7 KiB
Markdown

# 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 <compartment-id>
# Listar Subnets
oci network subnet list --compartment-id <compartment-id> --vcn-id <vcn-id>
# Listar API Gateways
oci api-gateway gateway list --compartment-id <compartment-id>
# Verificar deployment
oci api-gateway deployment get --deployment-id <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)