Document completed Terraform provisioning of api-gateway-mfe-dev (IP 10.110.198.250), VCN peering requirements, LB routing plan, updated Variable Group info, and checklist status. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
6.3 KiB
6.3 KiB
OCI API Gateway - Configuração para MFEs
Visão Geral
Este documento detalha como configurar o OCI API Gateway para servir Micro Frontends (MFEs) via Object Storage.
Arquitetura
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Usuário │ ───► │ API Gateway │ ───► │ Object Storage │
│ (navegador) │ │ (URL pública) │ │ (PAR URL) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
Fluxo Completo
1. Criar Bucket no Object Storage
# Via OCI CLI
oci os bucket create \
--namespace-name "grbb7qzeuoag" \
--name "mfe-user-dev" \
--compartment-id "ocid1.compartment.oc1..xxx" \
--storage-tier "Standard"
2. Fazer Upload dos Arquivos
# Upload via OCI CLI
cd dist/mfe-user/browser/
find . -type f | while read file; do
oci os object put \
--namespace-name "grbb7qzeuoag" \
--bucket-name "nexus-mfe-user-dev" \
--file "$file" \
--object-name "${file#./}" \
--content-type auto
done
3. Criar Pre-Authenticated Request (PAR)
# Criar PAR para acesso público
oci os preauth-request create \
--namespace-name "grbb7qzeuoag" \
--bucket-name "nexus-mfe-user-dev" \
--name "mfe-user-par" \
--access-type "ObjectRead" \
--time-expiry 31536000
4. Criar API Gateway
# Verificar/criar subnet
oci network subnet list \
--compartment-id "compartment-ocid" \
--vcn-id "vcn-ocid"
# Criar API Gateway
oci api-gateway gateway create \
--compartment-id "compartment-ocid" \
--display-name "nexus-mfe-user-gateway" \
--subnet-id "subnet-ocid" \
--endpoint-type "PUBLIC"
5. Criar Deployment com Rotas
O deployment precisa de rotas específicas para SPAs (Angular):
routes:
# Rota principal - tudo para index.html (SPA)
- path: /{req.*}
methods: [GET]
backend:
type: HTTP
url: "${PAR_URL}/${request.path[req]}"
# Arquivos estáticos específicos
- path: /{ext}.js
methods: [GET]
backend:
type: HTTP
url: "https://grbb7qzeuoag.objectstorage.sa-saopaulo-1.oci.customer-oci.com/n/grbb7qzeuoag/b/nexus-mfe-user-dev/o/${request.path[req]}"
- path: /{ext}.css
methods: [GET]
backend:
type: HTTP
url: "https://grbb7qzeuoag.objectstorage.sa-saopaulo-1.oci.customer-oci.com/n/grbb7qzeuoag/b/nexus-mfe-user-dev/o/${request.path[req]}"
Configuracao via Terraform (Implementado)
O API Gateway MFE e provisionado via Terraform no repositorio tf_oci_clusters.
Repositorio: tf_oci_clusters
tf_oci_clusters/
├── modules/
│ ├── api_gateway_mfe/ # Modulo API Gateway MFE
│ │ ├── main.tf # Gateway + Deployment (rotas SPA)
│ │ ├── variables.tf # Inputs
│ │ ├── outputs.tf # gateway_id, ip, hostname, endpoints
│ │ └── versions.tf # oracle/oci ~> 7.0
│ └── network/
│ └── main.tf # Subnet sbn-api-gateway (condicional)
├── environments/
│ └── dev/
│ ├── main.tf # enable_api_gateway_subnet
│ ├── api_gateway_mfe.tf # Integracao do modulo
│ └── terraform.ci.tfvars # enable_api_gateway_mfe = true
Uso do modulo
# environments/dev/api_gateway_mfe.tf
module "api_gateway_mfe" {
count = var.enable_api_gateway_mfe ? 1 : 0
source = "../../modules/api_gateway_mfe"
compartment_id = local.compartment_id
subnet_id = module.network.api_gateway_subnet_id
env_name = var.env_name
display_name = "api-gateway-mfe"
mfe_deployments = [
{
name = "mfe-user"
bucket_name = "nexus-mfe-user-development"
region = "sa-saopaulo-1"
object_namespace = var.mfe_object_namespace # grbb7qzeuoag
},
# Adicionar mais MFEs aqui:
# { name = "mfe-shell", bucket_name = "nexus-mfe-shell-development", ... },
# { name = "mfe-auth", bucket_name = "nexus-mfe-auth-development", ... },
]
}
Rotas SPA (Angular)
O deployment cria duas rotas para cada MFE:
/(GET) ->index.htmlno Object Storage (SPA entry point)/{path*}(GET) -> arquivos estaticos no Object Storage (JS, CSS, assets)
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)
-> Manual Approval
-> Apply (terraform apply)
Pipeline: terraform-tf_oci_clusters (ID 51)
Variable Group: oci-terraform (ID 34)
URLs de Acesso
DEV
| Tipo | URL |
|---|---|
| API Gateway (privado) | https://guhal72tzyekzchzamhhi3lvgi.apigateway.sa-saopaulo-1.oci.customer-oci.com/ |
| Planejado (publico) | https://mfe-user-dev.invista.com.br (pendente) |
Troubleshooting
Problema: Arquivos não carregam
- Verificar se PAR está ativa
- Verificar tipos de conteúdo (content-type)
- Verificar rotas no deployment
Problema: SPA routing não funciona
- Garantir rota catch-all
/{req.*} - Backend deve resolver para index.html
Problema: 403 Forbidden
- Verificar se PAR não expirou
- Verificar se bucket está público ou PAR está válida
Comandos Úteis
# Listar API Gateways
oci api-gateway gateway list --compartment-id <compartment-id>
# Ver deployment
oci api-gateway deployment get --deployment-id <deployment-id>
# Atualizar deployment
oci api-gateway deployment update \
--deployment-id <deployment-id> \
--spec file://deployment-spec.yaml
# Listar PARs
oci os preauth-request list \
--namespace-name "grbb7qzeuoag" \
--bucket-name "nexus-mfe-user-dev"
# Deletar PAR
oci os preauth-request delete \
--namespace-name "grbb7qzeuoag" \
--bucket-name "nexus-mfe-user-dev" \
--par-id <par-id>
Referências
Atualizado em: 2026-02-23