Implantação na AWS — ecosif-automations
Versão: 0.7.05.202605280
Runtime: cinco funções AWS Lambda (Python 3.11), orquestradas por S3, SQS e DynamoDB.
IaC: CloudFormation (entrega a bancos) ou Terraform (infrastructure/terraform/) para ambientes internos.
Não utiliza Docker/ECS para este módulo.
1. Visão do serviço
Pipeline event-driven de importação contábil (ficheiros .IPL + mestre CT32.LD):
flowchart LR
S3[S3 .IPL] --> LI[Lambda Import]
LI --> IW[(import-window)]
LI --> IDQ[import-defer SQS]
IDQ --> LD[Lambda Import-Dispatcher]
LD --> EQ[entries FIFO]
EQ --> LE[Lambda Entries]
LE --> PG[(PostgreSQL RDS)]
LE --> CDQ[consolidation-defer]
LE --> CFQ[consolidation FIFO]
CDQ --> LS[Lambda Consolidation-Scheduler]
LS --> CFQ
CFQ --> LC[Lambda Consolidation]
LC --> S3out[S3 reports / imported]
| Função | Handler | Gatilho | Papel |
|---|---|---|---|
| import | src.handlers.import_handler.lambda_handler |
S3 ObjectCreated (.IPL) |
Regista janela por fundo ou processa imediato |
| import-dispatcher | src.handlers.import_dispatcher_handler.lambda_handler |
SQS import-defer | Flush ordenado → fila entries FIFO |
| entries | src.handlers.entries_handler.lambda_handler |
SQS entries FIFO | Persistência SQL + encaminha consolidação |
| consolidation-scheduler | src.handlers.consolidation_scheduler_handler.lambda_handler |
SQS consolidation-defer | Debounce → fila consolidation FIFO |
| consolidation | src.handlers.consolidation_handler.lambda_handler |
SQS consolidation FIFO | Consolidação, quota, fechamento, relatórios S3 |
Sem cron — debounce usa DelaySeconds em SQS + tabelas DynamoDB.
2. Recursos AWS criados
| Recurso | Nome típico (ProjectName=ecosif, Environment=dev) |
|---|---|
| S3 | ecosif-dev-import-{AccountId} (ou bucket existente) |
| SQS FIFO | ecosif-dev-automations-entries.fifo + DLQ |
| SQS | ecosif-dev-automations-import-defer |
| SQS FIFO | ecosif-dev-automations-consolidation.fifo + DLQ |
| SQS | ecosif-dev-automations-consolidation-defer |
| DynamoDB | ecosif-dev-import-window, ecosif-dev-consolidation-window, ecosif-dev-consolidation-lock |
| Secrets | RDS (RdsSecretArn / ECOSIF_DB_SECRET), ecosif/dev/automations-service |
| Lambda ×5 | ecosif-dev-automations-{import,import-dispatcher,entries,consolidation,consolidation-scheduler} |
| IAM | Role + policy (S3, SQS, DynamoDB, Secrets, VPC ENI) |
| CloudWatch | Log groups + alarme idade fila consolidation FIFO |
Pré-requisitos externos: VPC com subnets privadas + NAT, RDS PostgreSQL, ALB interno com ecosif-auth (8081), masterdata (8082), moviments (8083).
3. CloudFormation (caminho recomendado — cliente / stack pai)
3.1 Artefactos
| Ficheiro | Uso |
|---|---|
delivery/ecosif_automations.yaml |
Template oficial (nested stack) |
delivery/ecosif-automations.yaml |
Cópia compatível (mesmo conteúdo) |
delivery/publish-ready/ecosif-automations-lambda-0.7.05.202605280.zip |
Código das 5 funções |
delivery/env.*.lambda.example |
Referência de variáveis |
3.2 Parâmetros obrigatórios
ProjectName,EnvironmentVpcId,PrivateSubnet1Id,PrivateSubnet2Id,RdsSecurityGroupIdAlbDnsName— base HTTP do ALB (ECOSIF_API_BASE_URL)PostgresHost,RdsSecretArnLambdaCodeS3Bucket,LambdaCodeS3Key— localização dolambda.zip
3.3 Parâmetros de comportamento (defaults de produção)
| Parâmetro | Default | Descrição |
|---|---|---|
ImportDeferEnabled |
true |
Janela de importação por fundo |
ImportDebounceSec |
30 | Calma após último IPL do fundo |
ImportMaxWaitSec |
300 | Teto da janela de importação |
ConsolidationDeferEnabled |
false |
Consolidação imediata após entries |
ConsolidationLambdaReservedConcurrency |
30 | Proteção RDS |
3.4 Passos de implantação
- Build (fornecedor):
./build_lambda.sh→ publicar zip no S3 de artefactos. - Validar hash:
sha256sum -c delivery/publish-ready/*.sha256 - Stack: criar/atualizar nested stack com
ecosif_automations.yaml(via stack paiecosif-backendou standalone). - Pós-deploy:
- Rotacionar secret
automations-service(nunca usar password do template). - ColocarCT32.LDno bucket na chaveCt32MasterKey(defaultCT32.LD). - Teste E2E: upload.IPL→ logs das 5 funções.
Detalhe auditável: ../dev/integradores/manual_entrega_cliente_banco.md.
4. Terraform (ambiente interno / standalone)
Caminho: infrastructure/terraform/
Alinhado com CloudFormation: mesmas 5 Lambdas, filas FIFO, import defer, tabelas DynamoDB.
4.1 Pré-requisitos
- Terraform
>= 1.5 lambda.zipna raiz do módulo (./build_lambda.sh)vpc_subnet_idsevpc_security_group_idscom acesso a RDS e ALB
4.2 Exemplo terraform.tfvars
aws_region = "us-west-1"
environment = "dev"
project_name = "ecosif"
bucket_name = "ecosif-dev-import-UNIQUE_SUFFIX"
ecosif_api_base_url = "http://internal-alb.example.com"
ecosif_auth_port = "8081"
ecosif_masterdata_port = "8082"
ecosif_moviments_port = "8083"
postgres_host = "rds.internal"
postgres_user = "ecosif"
postgres_password = "CHANGE_ME"
vpc_subnet_ids = ["subnet-a", "subnet-b"]
vpc_security_group_ids = ["sg-lambda"]
import_defer_enabled = true
4.3 Comandos
cd infrastructure/terraform
terraform init
terraform plan -out=tfplan
terraform apply tfplan
Ou: scripts/deploy.sh dev (build + plan interativo).
4.4 Outputs principais
import_lambda_name, import_dispatcher_lambda_name, entries_queue_url, import_defer_queue_url, consolidation_queue_url, tabelas DynamoDB — ver outputs.tf.
5. Variáveis de ambiente (resumo)
Referência completa: delivery/env.import.lambda.example, env.import-dispatcher.lambda.example, env.entries.lambda.example, env.consolidation.lambda.example.
| Grupo | Variáveis críticas |
|---|---|
| S3 | AWS_S3_BUCKET_NAME, pastas importError/, imported/, imported/reports/ |
| Import defer | IMPORT_DEFER_ENABLED, IMPORT_WINDOW_TABLE, AWS_SQS_IMPORT_DEFER_QUEUE_URL |
| APIs | ECOSIF_API_BASE_URL, ECOSIF_API_URL_MODE=alb, portas auth/masterdata/moviments, ECOSIF_AUTOMATIONS_SERVICE_SECRET |
| Entries | AWS_SQS_ENTRIES_QUEUE_URL (FIFO), AWS_SQS_CONSOLIDATION_*, ECOSIF_DB_SECRET |
| Consolidação | CONSOLIDATION_DEFER_ENABLED, tabelas window/lock, fila FIFO |
6. Validação pós-implantação
CT32.LDpresente no bucket (CT32_MASTER_KEY).- Upload
NNNNNN_YYYYMMDD.IPLválido. - CloudWatch: logs
/aws/lambda/{project}-{env}-automations-*. - S3:
imported/files/ouimportError/+ CSV de erro. - DLQs vazias após teste bem-sucedido.
7. Escolha CloudFormation vs Terraform
| Critério | CloudFormation | Terraform |
|---|---|---|
| Entrega a banco | Sim (zip + yaml) | Não (uso interno) |
| Nested stack ecosif-backend | Sim | Não |
| Deploy standalone rápido | Requer stack pai ou adaptação | Sim |
| Paridade de recursos (0.7.05) | Referência | Espelho atualizado |
Ambos os modelos devem permanecer sincronizados em cada release; a versão em VERSION é a fonte da verdade.