docs: add OCI documentation and resolve merge conflicts
This commit is contained in:
parent
3eead39ce8
commit
3a615e195c
7 changed files with 1434 additions and 0 deletions
365
MFE-USER-PIPELINE.md
Normal file
365
MFE-USER-PIPELINE.md
Normal file
|
|
@ -0,0 +1,365 @@
|
|||
# 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
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
- [OCI-MFE-TASKS.md](./OCI-MFE-TASKS.md) - Checklist de atividades
|
||||
- [OCI-MFE-STEPBYSTEP.md](./OCI-MFE-STEPBYSTEP.md) - Passo a passo
|
||||
- [OCI-API-GATEWAY.md](./OCI-API-GATEWAY.md) - Configuração API Gateway
|
||||
- [Oracle Documentation](https://docs.oracle.com/en/learn/oci-api-gateway-web-hosting/index.html)
|
||||
190
OCI-API-GATEWAY.md
Normal file
190
OCI-API-GATEWAY.md
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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):
|
||||
|
||||
```yaml
|
||||
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]}"
|
||||
```
|
||||
|
||||
## Configuração via Terraform
|
||||
|
||||
### Módulo API Gateway
|
||||
|
||||
```hcl
|
||||
module "api_gateway" {
|
||||
source = "./modules/api_gateway"
|
||||
|
||||
compartment_id = var.compartment_id
|
||||
subnet_id = var.subnet_id
|
||||
name = "nexus-mfe-user"
|
||||
environment = "dev"
|
||||
}
|
||||
|
||||
module "api_gateway_deployment" {
|
||||
source = "./modules/api_gateway_deployment"
|
||||
|
||||
gateway_id = module.api_gateway.gateway_id
|
||||
bucket_name = "nexus-mfe-user-dev"
|
||||
namespace = "grbb7qzeuoag"
|
||||
region = "sa-saopaulo-1"
|
||||
}
|
||||
```
|
||||
|
||||
## Pipeline Azure DevOps - Fluxo
|
||||
|
||||
```
|
||||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||
│ Build │ ─► │ Upload │ ─► │ CreatePAR │ ─► │ Deploy API │
|
||||
│ (npm build)│ │ (OCI OS) │ │ (OCI) │ │ (Gateway) │
|
||||
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
|
||||
```
|
||||
|
||||
## URLs de Acesso
|
||||
|
||||
### Por Ambiente
|
||||
|
||||
| Ambiente | URL API Gateway |
|
||||
|----------|----------------|
|
||||
| Dev | `https://gateway-ocid.apigateway.sa-saopaulo-1.oci.customer-oci.com` |
|
||||
| HML | `https://gateway-ocid.apigateway.sa-saopaulo-1.oci.customer-oci.com` |
|
||||
| PROD | `https://gateway-ocid.apigateway.sa-saopaulo-1.oci.customer-oci.com` |
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Problema: Arquivos não carregam
|
||||
|
||||
1. Verificar se PAR está ativa
|
||||
2. Verificar tipos de conteúdo (content-type)
|
||||
3. Verificar rotas no deployment
|
||||
|
||||
### Problema: SPA routing não funciona
|
||||
|
||||
1. Garantir rota catch-all `/{req.*}`
|
||||
2. Backend deve resolver para index.html
|
||||
|
||||
### Problema: 403 Forbidden
|
||||
|
||||
1. Verificar se PAR não expirou
|
||||
2. Verificar se bucket está público ou PAR está válida
|
||||
|
||||
## Comandos Úteis
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
- [OCI API Gateway Docs](https://docs.oracle.com/en-us/iaas/Content/APIGateway/apigateway.htm)
|
||||
- [Static Website Hosting](https://docs.oracle.com/en/learn/oci-api-gateway-web-hosting/index.html)
|
||||
191
OCI-MFE-STEPBYSTEP.md
Normal file
191
OCI-MFE-STEPBYSTEP.md
Normal file
|
|
@ -0,0 +1,191 @@
|
|||
# Passo a Passo: Deploy mfe-user para OCI
|
||||
|
||||
## Visão Geral
|
||||
|
||||
Este guia mostra como fazer o deploy do **mfe-user** (Micro Frontend) para a OCI usando:
|
||||
- **Object Storage** para arquivos estáticos
|
||||
- **API Gateway** para servir o MFE
|
||||
- **OCI CLI** via Azure DevOps
|
||||
|
||||
---
|
||||
|
||||
## Estado Atual da Infraestrutura
|
||||
|
||||
| Recurso | Status | Ação Necessária |
|
||||
|---------|--------|-----------------|
|
||||
| VCN (Dev) | ✅ Existe | Nenhuma |
|
||||
| Subnet (sbn-lb-1) | ✅ Existe | Nenhuma |
|
||||
| API Gateway | ❌ Não existe | Pipeline cria |
|
||||
| Bucket | ❌ Não existe | Pipeline cria |
|
||||
| PAR | ❌ Não existe | Pipeline cria |
|
||||
|
||||
---
|
||||
|
||||
## Passo 1: Configurar Variable Group
|
||||
|
||||
No Azure DevOps: **Project Settings** → **Pipelines** → **Library** → **Variable Groups**
|
||||
|
||||
### Variáveis necessárias no `oci-terraform`
|
||||
|
||||
| Variável | Tipo | Valor |
|
||||
|----------|------|-------|
|
||||
| `OCI_TENANCY_OCID` | Secret | OCID da tenancy |
|
||||
| `OCI_USER_OCID` | Secret | OCID do usuário |
|
||||
| `OCI_FINGERPRINT` | Secret | Fingerprint da chave |
|
||||
| `OCI_PRIVATE_KEY_B64` | Secret | Chave privada (base64) |
|
||||
| `OCI_REGION` | 普通 | `sa-saopaulo-1` |
|
||||
| `COMPARTMENT_PARENT_OCID` | Secret | `ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a` |
|
||||
| `OCI_SUBNET_OCID` | Secret | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaa2ezw57uocis6s2eioypdsnt2p4pwm4fwnjz5jdaqigrm6jaqexeq` |
|
||||
|
||||
---
|
||||
|
||||
## Passo 2: Executar Pipeline
|
||||
|
||||
A pipeline cria automaticamente:
|
||||
1. Bucket `mfe-user-dev` no Object Storage
|
||||
2. Upload dos arquivos do build
|
||||
3. Pre-Authenticated Request (PAR)
|
||||
4. API Gateway com deployment
|
||||
|
||||
### Via Azure DevOps
|
||||
|
||||
1. Vá no repositório `mfe-user`
|
||||
2. Faça push para branch `devops`
|
||||
3. Execute a pipeline `azure-pipelines.yml`
|
||||
4. Parâmetro `cloudProvider`: `oci`
|
||||
|
||||
### Fluxo da Pipeline
|
||||
|
||||
```
|
||||
┌─────────────┐
|
||||
│ BUILD │ → npm ci + npm run build:dev
|
||||
└─────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────┐
|
||||
│ UPLOAD │ → Upload para OCI Object Storage
|
||||
│ (OCI) │ Bucket: mfe-user-dev
|
||||
└─────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────┐
|
||||
│ CREATEPAR │ → Cria Pre-Authenticated Request
|
||||
└─────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────┐
|
||||
│ DEPLOY API │ → Cria/Atualiza API Gateway
|
||||
│ GATEWAY │ Gateway: mfe-user-gateway
|
||||
└─────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Passo 3: Obter URL do API Gateway
|
||||
|
||||
```bash
|
||||
oci api-gateway gateway list \
|
||||
--compartment-id "ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a"
|
||||
```
|
||||
|
||||
URL: `https://<gateway-ocid>.apigateway.sa-saopaulo-1.oci.customer-oci.com`
|
||||
|
||||
---
|
||||
|
||||
## Passo 4: Testar
|
||||
|
||||
Acesse no navegador:
|
||||
```
|
||||
https://<gateway-ocid>.apigateway.sa-saopaulo-1.oci.customer-oci.com/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Ambientes
|
||||
|
||||
| Ambiente | Bucket | Subnet |
|
||||
|----------|--------|--------|
|
||||
| Dev | `mfe-user-dev` | sbn-lb-1 |
|
||||
| HML | `mfe-user-hml` | (definir) |
|
||||
| PROD | `mfe-user-prod` | (definir) |
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### O que acontece se disparar a pipeline sem configuração?
|
||||
|
||||
| Estágio | Se faltar configuração | Resultado |
|
||||
|---------|------------------------|-----------|
|
||||
| BUILD | - | ✅ Sempre funciona |
|
||||
| UPLOADTOOCI | - | ✅ Bucket criado automaticamente |
|
||||
| CREATEPAR | - | ✅ PAR criado automaticamente |
|
||||
| DEPLOYTOAPIGW | `OCI_SUBNET_OCID` não configurado | ❌ ERRO |
|
||||
| DEPLOYTOAPIGW | Subnet não existe | ❌ ERRO |
|
||||
|
||||
### Recursos Criados Automaticamente pela Pipeline
|
||||
|
||||
| Recurso | Criado Automaticamente? |
|
||||
|---------|------------------------|
|
||||
| Bucket `mfe-user-dev` | ✅ Sim |
|
||||
| PAR `mfe-user-dev-par` | ✅ Sim |
|
||||
| API Gateway `mfe-user-gateway` | ✅ Sim (se subnet existir) |
|
||||
| Deployment `mfe-user-deployment` | ✅ Sim |
|
||||
|
||||
### Recursos Obrigatórios (devem existir antes)
|
||||
|
||||
| Recurso | Status Dev |
|
||||
|---------|------------|
|
||||
| VCN | ✅ Já existe |
|
||||
| Subnet (sbn-lb-1) | ✅ Já existe |
|
||||
| `OCI_SUBNET_OCID` no Variable Group | ❌ Precisa adicionar |
|
||||
|
||||
### Cenário: Disparar sem `OCI_SUBNET_OCID`
|
||||
|
||||
```
|
||||
BUILD → ✅ Sucesso
|
||||
UPLOADTOOCI → ✅ Sucesso (bucket criado)
|
||||
CREATEPAR → ✅ Sucesso (PAR criado)
|
||||
DEPLOYTOAPIGW → ❌ ERRO: subnet não encontrada
|
||||
```
|
||||
|
||||
**Resultado**: Bucket e PAR criados, mas API Gateway falha.
|
||||
|
||||
**Solução**: Adicionar `OCI_SUBNET_OCID` e reexecutar a pipeline.
|
||||
|
||||
### Problemas Comuns
|
||||
|
||||
| Problema | Causa | Solução |
|
||||
|----------|-------|---------|
|
||||
| Pipeline falha no API Gateway | `OCI_SUBNET_OCID` não configurada | Adicionar no Variable Group |
|
||||
| 403 Forbidden | PAR expirou | Executar pipeline novamente |
|
||||
| Arquivos não carregam (404) | Rotas incorretas | Verificar rota `/{req.*}` |
|
||||
|
||||
---
|
||||
|
||||
## Comandos Úteis
|
||||
|
||||
```bash
|
||||
# Listar buckets
|
||||
oci os bucket list --compartment-id <compartment-id>
|
||||
|
||||
# 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 <compartment-id>
|
||||
|
||||
# Ver deployment
|
||||
oci api-gateway deployment get --deployment-id <deployment-id>
|
||||
|
||||
# Deletar PAR antigo
|
||||
oci os preauth-request delete --namespace-name "grbb7qzeuoag" --bucket-name "mfe-user-dev" --par-id <par-id>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Referências
|
||||
|
||||
- [OCI-MFE-TASKS.md](./OCI-MFE-TASKS.md)
|
||||
- [OCI-API-GATEWAY.md](./OCI-API-GATEWAY.md)
|
||||
- [Oracle Documentation](https://docs.oracle.com/en/learn/oci-api-gateway-web-hosting/index.html)
|
||||
264
OCI-MFE-TASKS.md
Normal file
264
OCI-MFE-TASKS.md
Normal file
|
|
@ -0,0 +1,264 @@
|
|||
# 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)
|
||||
183
OCI-TERRAFORM.md
Normal file
183
OCI-TERRAFORM.md
Normal file
|
|
@ -0,0 +1,183 @@
|
|||
# Terraform OCI - Importação de Recursos
|
||||
|
||||
## Visão Geral
|
||||
|
||||
Este documento explica como importar recursos OCI criados manualmente (via console/CLI) para o Terraform.
|
||||
|
||||
## Por que Importar?
|
||||
|
||||
Recursos criados fora do Terraform podem ser gerenciados posteriormente com Terraform através da importação.
|
||||
|
||||
## Como Importar Recursos
|
||||
|
||||
### 1. Import via CLI
|
||||
|
||||
```bash
|
||||
# Buckets
|
||||
terraform import oci_objectstorage_bucket.bucket "compartment-ocid/bucket-name"
|
||||
|
||||
# API Gateway
|
||||
terraform import oci_apigateway_gateway.gateway "gateway-ocid"
|
||||
|
||||
# API Gateway Deployment
|
||||
terraform import oci_apigateway_deployment.deployment "gateway-ocid/deployment-ocid"
|
||||
|
||||
# VCN
|
||||
terraform import oci_core_vcn.vcn "vcn-ocid"
|
||||
|
||||
# Subnet
|
||||
terraform import oci_core_subnet.subnet "subnet-ocid"
|
||||
|
||||
# OKE Cluster
|
||||
terraform import oci_containerengine_cluster.cluster "cluster-ocid"
|
||||
|
||||
# Load Balancer
|
||||
terraform import oci_load_balancer_loadbalancer.lb "lb-ocid"
|
||||
```
|
||||
|
||||
### 2. Estrutura do Código Terraform
|
||||
|
||||
#### Bucket
|
||||
|
||||
```hcl
|
||||
resource "oci_objectstorage_bucket" "nexus_mfe_user_dev" {
|
||||
# ID no formato: compartment-ocid/bucket-name
|
||||
bucket_name = "nexus-mfe-user-dev"
|
||||
compartment_id = var.compartment_id
|
||||
namespace = "grbb7qzeuoag" # namespace OCI
|
||||
|
||||
storage_tier = "Standard"
|
||||
|
||||
# metadata = {}
|
||||
}
|
||||
```
|
||||
|
||||
#### API Gateway
|
||||
|
||||
```hcl
|
||||
resource "oci_apigateway_gateway" "mfe_user_gateway" {
|
||||
compartment_id = var.compartment_id
|
||||
endpoint_type = "PUBLIC"
|
||||
subnet_id = var.subnet_id
|
||||
|
||||
display_name = "nexus-mfe-user-gateway"
|
||||
|
||||
# certificate_id - opcional
|
||||
|
||||
timeouts {
|
||||
create = "30m"
|
||||
update = "30m"
|
||||
delete = "30m"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### API Gateway Deployment
|
||||
|
||||
```hcl
|
||||
resource "oci_apigateway_deployment" "mfe_user_deployment" {
|
||||
gateway_id = oci_apigateway_gateway.mfe_user_gateway.id
|
||||
|
||||
display_name = "nexus-mfe-user-deployment"
|
||||
path_prefix = "/"
|
||||
|
||||
specification = jsonencode({
|
||||
routes = [
|
||||
{
|
||||
path = "/{req.*}"
|
||||
methods = ["GET"]
|
||||
backend = {
|
||||
type = "HTTP"
|
||||
url = "https://namespace.objectstorage.region.oci.customer-oci.com/n/namespace/b/bucket/o"
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
## Pipeline de Import
|
||||
|
||||
Para importar recursos automaticamente via Azure DevOps:
|
||||
|
||||
```yaml
|
||||
# azure-pipelines-import.yml
|
||||
trigger: none
|
||||
|
||||
parameters:
|
||||
- name: resourceType
|
||||
type: string
|
||||
displayName: Tipo de recurso
|
||||
values:
|
||||
- bucket
|
||||
- api-gateway
|
||||
- subnet
|
||||
|
||||
variables:
|
||||
- group: oci-terraform
|
||||
|
||||
stages:
|
||||
- stage: Import_Resource
|
||||
jobs:
|
||||
- job: Import
|
||||
pool:
|
||||
vmImage: ubuntu-latest
|
||||
steps:
|
||||
- task: Terraform@1
|
||||
inputs:
|
||||
provider: 'oci'
|
||||
command: 'custom'
|
||||
customCommand: 'import'
|
||||
# Resource address no TF
|
||||
resourceAddress: 'oci_objectstorage_bucket.bucket_name'
|
||||
# ID do recurso no OCI
|
||||
resourceId: '$(COMPARTMENT_ID)/bucket-name'
|
||||
```
|
||||
|
||||
## Recursos que Podem Ser Importados
|
||||
|
||||
### Object Storage
|
||||
|
||||
| Recurso | Terraform Resource |
|
||||
|---------|------------------|
|
||||
| Bucket | `oci_objectstorage_bucket` |
|
||||
| Object | `oci_objectstorage_object` |
|
||||
| Pre-Auth Request | Não suportado (criar via pipeline) |
|
||||
|
||||
### API Gateway
|
||||
|
||||
| Recurso | Terraform Resource |
|
||||
|---------|------------------|
|
||||
| Gateway | `oci_apigateway_gateway` |
|
||||
| Deployment | `oci_apigateway_deployment` |
|
||||
|
||||
### Networking
|
||||
|
||||
| Recurso | Terraform Resource |
|
||||
|---------|------------------|
|
||||
| VCN | `oci_core_vcn` |
|
||||
| Subnet | `oci_core_subnet` |
|
||||
| Security List | `oci_core_security_list` |
|
||||
| Route Table | `oci_core_route_table` |
|
||||
| Internet Gateway | `oci_core_internet_gateway` |
|
||||
| NAT Gateway | `oci_core_nat_gateway` |
|
||||
|
||||
### Container Engine (OKE)
|
||||
|
||||
| Recurso | Terraform Resource |
|
||||
|---------|------------------|
|
||||
| Cluster | `oci_containerengine_cluster` |
|
||||
| Node Pool | `oci_containerengine_node_pool` |
|
||||
|
||||
## Checklist de Importação
|
||||
|
||||
- [ ] Identificar recursos criados manualmente
|
||||
- [ ] Criar código Terraform para o recurso
|
||||
- [ ] Executar `terraform import`
|
||||
- [ ] Executar `terraform plan` para validar
|
||||
- [ ] Commit no repositório Terraform
|
||||
|
||||
## Referências
|
||||
|
||||
- [Terraform OCI Provider](https://registry.terraform.io/providers/hashicorp/oci/latest)
|
||||
- [OCI CLI Import](https://docs.oracle.com/en-us/iaas/Content/Terraform/tf_import.htm)
|
||||
200
OCI.md
Normal file
200
OCI.md
Normal file
|
|
@ -0,0 +1,200 @@
|
|||
# OCI - Oracle Cloud Infrastructure
|
||||
|
||||
Este documento documenta a configuração e deployments relacionados à Oracle Cloud Infrastructure (OCI) para os projetos **Invent Cloud** e **Nexus**.
|
||||
|
||||
## Projetos
|
||||
|
||||
### Invent Cloud
|
||||
- **Empresa**: Invista
|
||||
- **Projeto**: Invent Finance
|
||||
- **Local**: `C:\dev\inventcloud\invent-finance\`
|
||||
- **Repositório Azure DevOps**: Invent-finance
|
||||
|
||||
### Nexus (MFE - Micro Frontends)
|
||||
- **Empresa**: Invista
|
||||
- **Repositório Base**: `C:\dev\C:devrepos_mfe\`
|
||||
- **Templates Pipeline**: `C:\dev\repos_mfe\azure-pipelines-templates\`
|
||||
|
||||
## Compartimentos OCI
|
||||
|
||||
| Ambiente | Compartment OCID |
|
||||
|----------|------------------|
|
||||
| Dev | `ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a` |
|
||||
| HML | `ocid1.compartment.oc1..aaaaaaaawc3hj6isbiibbiuokijw7le72ga3qa3qyblsdhrkj5gdygskzmwq` |
|
||||
| PROD | `ocid1.compartment.oc1..aaaaaaaazjxk5dkwleol3hjq7huojevotvnjhvy5ngro4jtwcqx2fn2ujara` |
|
||||
|
||||
### Namespace OCI
|
||||
- **Namespace**: `grbb7qzeuoag`
|
||||
|
||||
---
|
||||
|
||||
## Infraestrutura Existente (Dev)
|
||||
|
||||
### VCN - Virtual Cloud Network
|
||||
|
||||
| Nome | CIDR | OCID |
|
||||
|------|------|------|
|
||||
| vcn-oke | 10.120.0.0/16 | `ocid1.vcn.oc1.sa-saopaulo-1.amaaaaaasks3yliatayztbyd6doyk5oglrmrc57jekltu3xnnena6fvruwba` |
|
||||
|
||||
### Subnets
|
||||
|
||||
| Nome | CIDR | Tipo | OCID |
|
||||
|------|------|------|------|
|
||||
| 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` |
|
||||
| sbn-workers-1 | 10.120.0.0/20 | OKE Workers | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaazfomdghi4x4jpluyjooy7ajvsf5y57jq2xcqwf35guodkcn2wrwq` |
|
||||
| sbn-workers-2 | 10.120.16.0/20 | OKE Workers | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaahaqguwt67kzs2dad2vyz3zpjl5ac7ximeqg55gmsnd33c2qikija` |
|
||||
| sbn-workers-3 | 10.120.32.0/20 | OKE Workers | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaafzhmhvz2scr6sfsygixz2gjfnecggiirh3rvyhjcmfn3ohmohj6a` |
|
||||
|
||||
### Subnet para API Gateway
|
||||
|
||||
Usar **sbn-lb-1** para deploy do API Gateway:
|
||||
```
|
||||
OCI_SUBNET_OCID=ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaa2ezw57uocis6s2eioypdsnt2p4pwm4fwnjz5jdaqigrm6jaqexeq
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Buckets OCI
|
||||
|
||||
**Status**: ❌ Nenhum bucket criado ainda para MFEs
|
||||
|
||||
## API Gateways
|
||||
|
||||
**Status**: ❌ Nenhum API Gateway criado ainda
|
||||
|
||||
## API Gateways
|
||||
|
||||
**Status**: ❌ Nenhum API Gateway criado ainda.
|
||||
|
||||
## VCNs e Subnets (Dev)
|
||||
|
||||
### VCN Principal
|
||||
- **Nome**: vcn-oke
|
||||
- **CIDR**: 10.120.0.0/16
|
||||
- **OCID**: `ocid1.vcn.oc1.sa-saopaulo-1.amaaaaaasks3yliatayztbyd6doyk5oglrmrc57jekltu3xnnena6fvruwba`
|
||||
|
||||
### Subnets Disponíveis
|
||||
|
||||
| Nome | CIDR | Uso | OCID |
|
||||
|------|------|-----|------|
|
||||
| sbn-lb-1 | 10.120.128.0/20 | Load Balancer (pode ser usada para API Gateway) | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaa2ezw57uocis6s2eioypdsnt2p4pwm4fwnjz5jdaqigrm6jaqexeq` |
|
||||
| sbn-lb-2 | 10.120.144.0/20 | Load Balancer | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaav7qtnmgil2qdt3lz6fnqkdcbymjd2dtjjeyo6y7z3s2omq4uvcqa` |
|
||||
| sbn-workers-1 | 10.120.0.0/20 | Workers OKE | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaazfomdghi4x4jpluyjooy7ajvsf5y57jq2xcqwf35guodkcn2wrwq` |
|
||||
| sbn-workers-2 | 10.120.16.0/20 | Workers OKE | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaahaqguwt67kzs2dad2vyz3zpjl5ac7ximeqg55gmsnd33c2qikija` |
|
||||
| sbn-workers-3 | 10.120.32.0/20 | Workers OKE | `ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaafzhmhvz2scr6sfsygixz2gjfnecggiirh3rvyhjcmfn3ohmohj6a` |
|
||||
|
||||
### Recomendação para API Gateway
|
||||
Usar **sbn-lb-1** como subnet para o API Gateway:
|
||||
```
|
||||
OCI_SUBNET_OCID=ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaa2ezw57uocis6s2eioypdsnt2p4pwm4fwnjz5jdaqigrm6jaqexeq
|
||||
```
|
||||
|
||||
### Comandos para verificar buckets
|
||||
|
||||
```bash
|
||||
# Verificar namespace
|
||||
oci os ns get
|
||||
|
||||
# Listar buckets (dev)
|
||||
oci os bucket list --compartment-id "ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a" --all
|
||||
|
||||
# Listar buckets (hml)
|
||||
oci os bucket list --compartment-id "ocid1.compartment.oc1..aaaaaaaawc3hj6isbiibbiuokijw7le72ga3qa3qyblsdhrkj5gdygskzmwq" --all
|
||||
|
||||
# Listar buckets (prod)
|
||||
oci os bucket list --compartment-id "ocid1.compartment.oc1..aaaaaaaazjxk5dkwleol3hjq7huojevotvnjhvy5ngro4jtwcqx2fn2ujara" --all
|
||||
```
|
||||
|
||||
## MFEs - Micro Frontends
|
||||
|
||||
### Repositórios MFE
|
||||
|
||||
| Repositório | Branch Principal | Pipeline OCI |
|
||||
|-------------|------------------|--------------|
|
||||
| mfe-auth | dev/devops | ❌ Não |
|
||||
| mfe-shell | dev/devops | ❌ Não |
|
||||
| mfe-person | dev/devops | ❌ Não |
|
||||
| mfe-poc | dev/devops | ❌ Não |
|
||||
| mfe-user | dev/devops | ✅ Sim |
|
||||
| mfe-formalization | dev | ❌ Sem pipeline |
|
||||
|
||||
### Pipeline OCI - mfe-user
|
||||
|
||||
**Arquivo**: `C:\dev\C:devrepos_mfe\mfe-user\azure-pipelines-oci.yml`
|
||||
|
||||
**Trigger**: Branch `devops`
|
||||
|
||||
**Estágios**:
|
||||
1. **Build** - Compila o projeto Angular
|
||||
2. **UploadToOCI** - Faz upload para OCI Object Storage (bucket: `nexus-mfe-user-dev`)
|
||||
3. **CreatePAR** - Cria Pre-Authenticated Request (PAR)
|
||||
4. **DeployToAPIGateway** - Faz deploy no OCI API Gateway
|
||||
|
||||
**Variable Groups Required**:
|
||||
- `oci-terraform`
|
||||
- `mfe-credentials`
|
||||
|
||||
**Bucket**: `nexus-mfe-user-dev` (ainda não criado)
|
||||
|
||||
**API Gateway**:
|
||||
- Nome: `nexus-mfe-user-gateway`
|
||||
- Deployment: `nexus-mfe-user-deployment`
|
||||
|
||||
### Pipeline AWS (Padrão) - mfe-user
|
||||
|
||||
**Arquivo**: `C:\dev\C:devrepos_mfe\mfe-user\azure-pipelines.yml`
|
||||
|
||||
**Trigger**: Branch `dev`
|
||||
|
||||
**Template**: `mfe/deploy-mfe.yaml@templates`
|
||||
|
||||
**Deploy**: S3/AWS (não OCI)
|
||||
|
||||
## MS-POC - Microservice POC
|
||||
|
||||
**Status**: ❌ **NÃO PUBLICADO EM OBJECT STORAGE**
|
||||
|
||||
O `ms-poc` está configurado no cluster Kubernetes (OKE) conforme `ingresses.yaml`, mas **NÃO foi publicado em nenhum Object Storage**.
|
||||
|
||||
### Ingressos ms-poc (Kubernetes)
|
||||
|
||||
```yaml
|
||||
# Internal
|
||||
- host: ms-poc.dev-01.interno.invista.com.br
|
||||
namespace: nexus-services
|
||||
|
||||
# External
|
||||
- host: ms-poc.dev.invista.com.br
|
||||
namespace: nexus-services
|
||||
```
|
||||
|
||||
### Próximos Passos para ms-poc
|
||||
|
||||
Para publicar no OCI Object Storage:
|
||||
|
||||
1. Criar bucket: `nexus-ms-poc-dev`
|
||||
2. Criar pipeline Azure DevOps para build e upload
|
||||
3. Configurar API Gateway ou usar OKE para deploy
|
||||
|
||||
## Clusters OKE (Oracle Kubernetes Engine)
|
||||
|
||||
### Clusters Disponíveis
|
||||
|
||||
| Ambiente | Cluster OCID |
|
||||
|----------|--------------|
|
||||
| Dev Cluster 1 | `ocid1.cluster.oc1.sa-saopaulo-1.aaaaaaaaxernqctehleyduukfuyfgcnmm6fuk5l4mkgdaocsdcobrewkvc3a` |
|
||||
| Dev Cluster 2 | `ocid1.cluster.oc1.sa-saopaulo-1.aaaaaaaancdtl3rrcblzsifl6h3vguxhj5byqldtzakgg7tv5cifn2eknv6q` |
|
||||
| Dev Cluster 3 | `ocid1.cluster.oc1.sa-saopaulo-1.aaaaaaaaxbelg5ztrdn3ca3tm5mohq363c5v6yhmjhbwlgyndcrszb62robq` |
|
||||
| HML Cluster 1 | `ocid1.cluster.oc1.sa-saopaulo-1.aaaaaaaaf26wiaoq2arf66a6jfah3ywbuyreik5mvcdxazyz2cwmskgdnxja` |
|
||||
| HML Cluster 2 | `ocid1.cluster.oc1.sa-saopaulo-1.aaaaaaaadquto7tpcrqx6k7i7bz5ufyxg7o423ekkbcagpy3tcx3w46e6rfa` |
|
||||
| HML Cluster 3 | `ocid1.cluster.oc1.sa-saopaulo-1.aaaaaaaais3nc43lvmestqxmj2tvay4jva4eqihjf55mn72yvc5tbieh3qgq` |
|
||||
| PROD Cluster 1 | `ocid1.cluster.oc1.sa-saopaulo-1.aaaaaaaasseprhgtgw7chdhrlo362vsqcmr3j6reeomvy6ahyc7geg5htaga` |
|
||||
| PROD Cluster 2 | `ocid1.cluster.oc1.sa-saopaulo-1.aaaaaaaa4zzx3jxqsf2asqlvvvbfrmi3birowx4mrc4xcwjklc5wbegb6xea` |
|
||||
| PROD Cluster 3 | `ocid1.cluster.oc1.sa-saopaulo-1.aaaaaaaalazuvvqgci4zd6b473mpbrpxhrznqp7i3an6kae62cuugdaohyra` |
|
||||
|
||||
## Referências
|
||||
|
||||
- Templates Pipeline: `C:\dev\repos_mfe\azure-pipelines-templates\`
|
||||
- Infra Terraform: `C:\dev\tf_oci_clusters\`
|
||||
- Clusters Config: `C:\dev\repos_mfe\azure-pipelines-templates\config\oke-clusters.json`
|
||||
41
README.md
41
README.md
|
|
@ -4,6 +4,47 @@ Este repositorio contem a documentacao e os manifestos de Infraestrutura como Co
|
|||
|
||||
## Estrutura do Projeto
|
||||
|
||||
### OCI - Oracle Cloud Infrastructure
|
||||
|
||||
Infraestrutura OCI para projetos **Invista** (Nexus, MFEs, MSs).
|
||||
|
||||
#### Documentação
|
||||
|
||||
| Documento | Descrição |
|
||||
|-----------|-----------|
|
||||
| [Visao Geral OCI](./OCI.md) | Configuracao, compartimentos, VCN, subnets |
|
||||
| [Tarefas OCI - MFEs](./OCI-MFE-TASKS.md) | Checklist e atividades para MFEs |
|
||||
| [Passo a Passo mfe-user](./OCI-MFE-STEPBYSTEP.md) | Guia de deploy do mfe-user |
|
||||
| [Pipeline mfe-user](./MFE-USER-PIPELINE.md) | Como funciona a pipeline multi-cloud |
|
||||
| [Terraform OCI](./OCI-TERRAFORM.md) | Importacao de recursos, melhores praticas |
|
||||
| [API Gateway](./OCI-API-GATEWAY.md) | Configuracao para hosting de MFEs |
|
||||
|
||||
#### Estado Atual da Infraestrutura OCI
|
||||
|
||||
| Recurso | Status | Detalhes |
|
||||
|---------|--------|----------|
|
||||
| VCN (Dev) | ✅ Existe | `vcn-oke` - CIDR: 10.120.0.0/16 |
|
||||
| Subnets (Dev) | ✅ Existe | 5 subnets (lb + workers) |
|
||||
| API Gateways | ❌ Não existe | Pipeline cria automaticamente |
|
||||
| Buckets | ❌ Não existe | Pipeline cria automaticamente |
|
||||
|
||||
#### Próximo Passo (Ação Necessária)
|
||||
|
||||
Adicionar no Azure DevOps Variable Group `oci-terraform`:
|
||||
|
||||
```
|
||||
OCI_SUBNET_OCID = ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaaa2ezw57uocis6s2eioypdsnt2p4pwm4fwnjz5jdaqigrm6jaqexeq
|
||||
```
|
||||
|
||||
#### Quick Start - Deploy mfe-user para OCI
|
||||
|
||||
1. Adicionar `OCI_SUBNET_OCID` no Variable Group
|
||||
2. Push código para branch `devops`
|
||||
3. Executar pipeline com `cloudProvider = oci`
|
||||
4. Acessar URL: `https://<gateway-id>.apigateway.sa-saopaulo-1.oci.customer-oci.com/`
|
||||
|
||||
---
|
||||
|
||||
### VPS (Virtual Private Servers)
|
||||
|
||||
Servidores standalone gerenciados individualmente.
|
||||
|
|
|
|||
Loading…
Reference in a new issue