infracloud/MFE-USER-PIPELINE.md

13 KiB

mfe-user - Pipeline Multi-Cloud

Visão Geral

O repositório mfe-user possui uma pipeline unificada que suporta deploy para AWS e OCI (Oracle Cloud Infrastructure).

Localização: C:\dev\C:devrepos_mfe\mfe-user\azure-pipelines.yml

Branch: devops


Como Executar a Pipeline

Opção 1: Push na branch devops

cd mfe-user
git checkout devops
# fazer alterações
git add .
git commit -m "sua mensagem"
git push origin devops

A pipeline dispara automaticamente.

Opção 2: Executar manualmente

  1. Acesse Azure DevOps → Pipelines
  2. Selecione mfe-user
  3. Clique em Run pipeline
  4. Selecione branch devops
  5. Escolha cloudProvider:
    • aws → Deploy AWS S3
    • oci → Deploy OCI Object Storage + API Gateway
    • both → Ambos

Fluxo da Pipeline

Diagrama Completo

┌──────────────────────────────────────────────────────────────┐
│  TRIGGER: Push na branch 'devops'                            │
└──────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌──────────────────────────────────────────────────────────────┐
│  PARÂMETRO: cloudProvider                                     │
│  ├── aws (padrão)                                            │
│  ├── oci                                                     │
│  └── both                                                    │
└──────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌──────────────────────────────────────────────────────────────┐
│  STAGE 1: BUILD (sempre executa)                             │
│  ├── Node.js 20.x                                            │
│  ├── npm ci                                                  │
│  ├── npm run build:dev                                       │
│  └── Publica artefato 'dist'                                 │
└──────────────────────────────────────────────────────────────┘
                              │
              ┌───────────────┴───────────────┐
              ▼                               ▼
┌─────────────────────────┐     ┌─────────────────────────────┐
│  DEPLOY_AWS             │     │  UPLOADTOOCI                │
│  (se aws ou both)       │     │  (se oci ou both)           │
│  ├── Download artefato  │     │  ├── Instala OCI CLI        │
│  ├── Sync S3            │     │  ├── Cria bucket            │
│  └── Purge Cloudflare   │     │  └── Upload arquivos        │
└─────────────────────────┘     └─────────────────────────────┘
                                              │
                                              ▼
                                ┌─────────────────────────────┐
                                │  CREATEPAR                  │
                                │  ├── Deleta PAR antigo      │
                                │  └── Cria novo PAR (1 ano)  │
                                └─────────────────────────────┘
                                              │
                                              ▼
                                ┌─────────────────────────────┐
                                │  DEPLOYTOAPIGATEWAY         │
                                │  ├── Cria gateway           │
                                │  └── Cria deployment        │
                                └─────────────────────────────┘

O que é Criado na OCI

1. Bucket (Object Storage)

Propriedade Valor
Nome mfe-user-dev
Namespace grbb7qzeuoag
Compartment Dev (ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a)
Storage Tier Standard

2. Pre-Authenticated Request (PAR)

Propriedade Valor
Nome mfe-user-dev-par
Access Type ObjectRead
Validade 1 ano (31536000 segundos)

O PAR permite que o API Gateway acesse os arquivos do bucket sem autenticação.

3. API Gateway

Propriedade Valor
Nome mfe-user-gateway
Endpoint Type PUBLIC
Subnet sbn-lb-1 (ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaa2ezw57uocis6s2eioypdsnt2p4pwm4fwnjz5jdaqigrm6jaqexeq)
Compartment Dev

4. API Gateway Deployment

Propriedade Valor
Nome mfe-user-deployment
Path Prefix /
Authentication Anonymous
Rota /{req.*} → GET → PAR URL

Resultado Final

URL de Acesso

Após o deploy bem-sucedido, o MFE estará disponível em:

https://<gateway-ocid>.apigateway.sa-saopaulo-1.oci.customer-oci.com/

Como Obter a URL

oci api-gateway gateway list \
  --compartment-id "ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a"

Ou verificar no console OCI:

  1. Acesse OCI Console
  2. Developer Services → API Gateway
  3. Selecione mfe-user-gateway
  4. Copie o Hostname

Pré-requisitos (Variable Groups)

aws-credentials-dev

Variável Descrição
AWS_ACCESS_KEY_ID Access Key AWS
AWS_SECRET_ACCESS_KEY Secret Key AWS
AWS_REGION Região (ex: us-east-1)
CLOUDFLARE_ZONE_ID Zone ID Cloudflare
CLOUDFLARE_API_TOKEN Token Cloudflare

oci-terraform

Variável Descrição Valor Exemplo
OCI_TENANCY_OCID OCID da Tenancy ocid1.tenancy.oc1..xxx
OCI_USER_OCID OCID do Usuário ocid1.user.oc1..xxx
OCI_FINGERPRINT Fingerprint da chave xx:xx:xx:xx:...
OCI_PRIVATE_KEY_B64 Chave privada (base64) (secret)
OCI_REGION Região OCI sa-saopaulo-1
COMPARTMENT_PARENT_OCID Compartment Dev ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a
OCI_SUBNET_OCID Subnet para API Gateway ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaa2ezw57uocis6s2eioypdsnt2p4pwm4fwnjz5jdaqigrm6jaqexeq

mfe-credentials

Variável Descrição
(variáveis específicas do MFE)

Comparação: AWS vs OCI

Aspecto AWS OCI
Armazenamento S3 Bucket Object Storage Bucket
CDN/Proxy CloudFront (opcional) API Gateway
Cache Cloudflare -
Autenticação AWS Access Key OCI API Key
URL Final S3 URL ou CloudFront API Gateway URL
Custo ~$0.023/GB + requests ~$0.0255/GB + API Gateway

Troubleshooting

O que acontece se disparar a pipeline sem infraestrutura?

Recursos Criados Automaticamente

Recurso Se não existir Comportamento
Bucket Pipeline cria oci os bucket create funciona
PAR Pipeline cria Cria automaticamente
API Gateway Pipeline cria Funciona SE subnet existir
Deployment Pipeline cria Funciona SE gateway existir

Recursos que DEVEM Existir

Recurso Obrigatório Motivo
VCN Sim API Gateway precisa de rede
Subnet Sim API Gateway precisa de subnet
Variable OCI_SUBNET_OCID Sim Pipeline precisa saber qual subnet usar

Fluxo de Execução sem Infraestrutura

┌─────────────┐
│   BUILD     │ → ✅ Sempre funciona
└─────────────┘
      │
      ▼
┌─────────────┐
│  UPLOADTOOCI│ → ✅ Cria bucket automaticamente
│             │    (se não existir)
└─────────────┘
      │
      ▼
┌─────────────┐
│  CREATEPAR  │ → ✅ Cria PAR automaticamente
└─────────────┘
      │
      ▼
┌─────────────┐
│  DEPLOY API │ → ❌ FALHA se:
│  GATEWAY    │    • OCI_SUBNET_OCID não configurado
│             │    • Subnet não existe
│             │    • VCN não existe
└─────────────┘

Erros Comuns

Erro Causa Solução
Variable OCI_SUBNET_OCID not found Variável não configurada Adicionar no Variable Group oci-terraform
Subnet not found OCID inválido ou subnet não existe Verificar OCID da subnet
VCN not found VCN não existe Criar VCN via Terraform
NotAuthorizedOrNotFound Permissões insuficientes Verificar políticas OCI

Cenário: Disparar sem OCI_SUBNET_OCID

Resultado:

  • Bucket mfe-user-dev será criado
  • PAR será criado
  • API Gateway falhará
  • Deployment não será criado

Como recuperar:

  1. Adicionar OCI_SUBNET_OCID no Variable Group
  2. Reexecutar a pipeline
  3. API Gateway será criado

Cenário: Subnet Não Existe

Resultado:

  • Bucket criado
  • PAR criado
  • API Gateway falha com erro de subnet

Como recuperar:

  1. Criar subnet via Terraform ou Console OCI
  2. Atualizar OCI_SUBNET_OCID com novo OCID
  3. Reexecutar pipeline

Pipeline falha no Build

Erro Solução
npm ci falha Verificar package-lock.json
npm run build:dev falha Verificar script no package.json
Artefato vazio Verificar se dist/ foi gerado

Pipeline falha no Upload OCI

Erro Solução
OCI_PRIVATE_KEY_B64 inválido Regenerar chave e atualizar Variable Group
Authentication failed Verificar fingerprint e user OCID
Compartment not found Verificar COMPARTMENT_PARENT_OCID

Pipeline falha no API Gateway

Erro Solução
OCI_SUBNET_OCID não configurado Adicionar variável no Variable Group
Subnet not found Verificar se subnet existe
Quota exceeded Verificar limites da tenancy

MFE não carrega no navegador

Erro Solução
403 Forbidden PAR expirou, reexecutar pipeline
404 Not Found Verificar rotas do deployment
Arquivos JS não carregam Verificar Content-Type no bucket

Comandos Úteis

Verificar recursos OCI

# Listar buckets
oci os bucket list --compartment-id "ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a"

# Listar objetos no bucket
oci os object list --namespace-name "grbb7qzeuoag" --bucket-name "mfe-user-dev"

# Listar API Gateways
oci api-gateway gateway list --compartment-id "ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a"

# Ver deployment
oci api-gateway deployment list --gateway-id "<gateway-id>"

# Listar PARs
oci os preauth-request list --namespace-name "grbb7qzeuoag" --bucket-name "mfe-user-dev"

Deletar recursos (se necessário)

# Deletar PAR
oci os preauth-request delete --namespace-name "grbb7qzeuoag" --bucket-name "mfe-user-dev" --par-id "<par-id>"

# Deletar bucket (vazio)
oci os bucket delete --namespace-name "grbb7qzeuoag" --bucket-name "mfe-user-dev"

# Deletar deployment
oci api-gateway deployment delete --deployment-id "<deployment-id>"

# Deletar gateway
oci api-gateway gateway delete --gateway-id "<gateway-id>"

Referências