Deploy AWS ECS + API Gateway — ecosif-compliance
Público-alvo: DevOps / SRE
Objetivo: Configurar o serviço ecosif-compliance (Flask/Python) na AWS com ECS e uma única API Gateway. URL final: https://app.ecosif.com.br/ecosif-compliance. Este documento não cobre criação de banco de dados.
1. Arquitetura e mapeamento na API Gateway
| Path (API Gateway) | Target | Descrição |
|---|---|---|
/ecosif-compliance / /ecosif-compliance/{proxy+} |
ECS ecosif-compliance (ALB) | Validação e conformidade contábil (API REST + Swagger em /docs/) |
2. Context path / prefixo
A aplicação Flask deve ser servida com o prefixo /ecosif-compliance. Opções:
- A) Configurar o Flask (Blueprint ou
APPLICATION_ROOT) com prefixo/ecosif-compliancee servir na raiz do contentor (porta 8021); o ALB/API Gateway encaminha o path completo. - B) Servir a app na raiz no contentor e usar um reverse proxy (ex.: Nginx) no mesmo contentor que adicione o prefixo, ou configurar o API Gateway para reescrever o path (strip prefix) e encaminhar sem
/ecosif-compliance.
Recomenda-se A: definir no código/config o prefixo /ecosif-compliance (ex.: APPLICATION_ROOT=/ecosif-compliance ou equivalente no config.json), de forma que os endpoints fiquem em https://app.ecosif.com.br/ecosif-compliance/api/... e o Swagger em https://app.ecosif.com.br/ecosif-compliance/docs/.
3. Variáveis de ambiente para ECS (ecosif-compliance)
A aplicação lê configuração de config.json (ou config-{env}.json), com substituição de variáveis no formato ${VAR:-default}. Para ECS, definir as variáveis abaixo na task definition.
3.1 Servidor e aplicação
| Variável (ambiente) | Chave no config.json | Obrigatória | Descrição | Valor em ECS |
|---|---|---|---|---|
ECOSIF_HOST_ADDRESS |
host.address | Não | Endereço de escuta | 0.0.0.0 |
ECOSIF_COMPLIANCE_PORT |
host.port | Sim | Porta HTTP do contentor | 8021 |
ECOSIF_RUNTIME_ENVIRONMENT |
(escolha do ficheiro) | Não | Ficheiro config | prod → config-prod.json |
ECOSIF_DEBUG_MODE |
runtime.debug | Não | Modo debug | false |
Prefixo (context path): Se o projeto suportar variável para o prefixo da aplicação (ex.: APPLICATION_ROOT ou SCRIPT_NAME), definir APPLICATION_ROOT=/ecosif-compliance (ou o nome exato usado no código). Caso contrário, configurar no config.json / config-prod.json na imagem.
3.2 Banco de Dados (PostgreSQL)
| Variável (ambiente) | Chave no config | Obrigatória | Descrição | Exemplo |
|---|---|---|---|---|
ECOSIF_DB_SERVER |
database.host | Sim | Host PostgreSQL | ecosif-db.xxxxx.us-east-1.rds.amazonaws.com |
ECOSIF_DB_PORT |
database.port | Sim | Porta | 5432 |
ECOSIF_DB_LOGIN |
database.name | Sim | Nome do banco | ecosif |
ECOSIF_DB_USER |
database.user | Sim | Usuário | postgres |
ECOSIF_DB_PASSWORD |
database.password | Sim | Senha | (secret) |
3.3 CORS e sessão
| Variável (ambiente) | Chave no config | Obrigatória | Descrição | Valor para app.ecosif.com.br |
|---|---|---|---|---|
ECOSIF_CORS |
cors.allowed_origins | Sim | Origens CORS | https://app.ecosif.com.br |
ECOSIF_SESSION_TIMEOUT |
session.timeout | Não | Timeout sessão (min) | 30 |
3.4 Logs
| Variável (ambiente) | Chave no config | Descrição | Valor típico |
|---|---|---|---|
ECOSIF_LOGMODE_ROOT |
logging.level | Nível de log | INFO |
Os caminhos de ficheiro de log (logging.folder, logging.filename) podem ficar no JSON; em ECS convém usar stdout (ajustar config ou logging para não depender de disco).
4. ECS (task definition)
- Porta do contentor: 8021 (ou a definida em
ECOSIF_COMPLIANCE_PORT). - Health check (ALB): path que a aplicação exponha para saúde (ex.:
/ecosif-compliance/healthou o endpoint configurado no Flask). - Secrets:
ECOSIF_DB_PASSWORDa partir de Secrets Manager ou variável injetada. - Runtime: Python 3.12+; comando típico
gunicorn -w 4 -b 0.0.0.0:8021 starter:app(working dir e módulo conforme Dockerfile do projeto).
Para lista completa de variáveis e config.json, ver docker.md.