Deploy App Runner

Voltar para Central de Manuais

# Deploy AWS App Runner (Sisconnect 2.0)

Este documento descreve o que o repositório assume em relação ao **App Runner**. A definição oficial do serviço continua no **`apprunner.yaml` na raiz do repositório** — não é alterada por este guia.

## O que o App Runner executa

- **Runtime / comando:** conforme `apprunner.yaml` — arranque com **Uvicorn** em `app.main:app`, porta de rede indicada no ficheiro.
- **Dependências Python:** `requirements.txt` (instalação na fase configurada no YAML).

## Antes de publicar uma revisão

1. **Base de dados:** o MySQL referenciado no ambiente tem de aceitar ligações a partir do App Runner (VPC / security groups / RDS “publicly accessible” ou peering, conforme a tua arquitetura).
2. **Segredos:** mantém a política que já usas no YAML / consola AWS (rotação, least privilege).
3. **Smoke check local** (opcional): na raiz do repo, com `MYSQL_*` (ou secrets) definidos:

   ```powershell
   .\scripts\smoke_uvicorn.ps1
   ```

   O script só valida o **import** de `app.main` (igual ao arranque do Uvicorn). Para testar HTTP, segue as instruções que o script imprime no fim (`uvicorn` + `GET /health`).

## Depois do deploy

- **Health:** `GET /health` — útil para health check do balanceador / App Runner.
- **Tracking Tower (API):** rotas sob `/api/v1/tracking/...` (requer tabelas MySQL criadas e, se usares cache, `REDIS_URL` definida onde configurares variáveis — o YAML atual pode ser estendido por ti noutro mecanismo se não quiseres tocar neste ficheiro).

## App motorista Flutter

- URL base da API: alinhar com o hostname público do App Runner (ex.: `--dart-define=API_BASE_URL=https://...`).
- Login e operação ativa dependem dos endpoints já expostos pela API Sisconnect.

## PDF / WeasyPrint

Se em runtime faltar biblioteca de sistema para o WeasyPrint, o erro aparece ao gerar PDF. Mitigações típicas: imagem de build customizada, layer com `apt`, ou serviço de PDF separado — isso fica à tua decisão de infra; o `apprunner.yaml` permanece como definiste.