Este projeto é uma função AWS Lambda responsável por processar notificações de certificados gerados. Ele é acionado por mensagens em uma fila SQS, atualiza o status dos certificados e notifica um serviço externo sobre a conclusão.
- Python 3.13
- AWS Lambda
- AWS SQS
- AWS DynamoDB
- Boto3
- Pydantic
- HTTPX
- Docker
- Local:
docker compose up --buildexpõe a Lambda emhttp://localhost:9000. - Deploy: o workflow
.github/workflows/workflow_build.yamlgera um ZIP e atualiza a funçãotech-floripa-certificates-notification-dev. - Infra: a fila SQS continua ligada pela infraestrutura Terraform; apenas o artefato de código mudou de imagem para ZIP.
Este projeto utiliza o padrão DynamoDB Single-Table Design. O CertificateRepository opera na mesma tabela que a API.
| Atributo | Tipo | Descrição |
|---|---|---|
PK |
String | Chave de Partição principal |
SK |
String | Chave de Ordenação principal |
GSI1PK, GSI1SK |
String | GSI1 para Certificate por UUID |
GSI2PK, GSI2SK |
String | GSI2 para acesso por email |
GSI3PK, GSI3SK |
String | GSI3 para acesso por produto |
GSI4PK, GSI4SK |
String | GSI4 para certificados por status |
EntityType |
String | Tipo da entidade |
| GSI4PK | GSI4SK | Uso |
|---|---|---|
SUCCESS#true |
CERTIFICATE#<uuid> |
Certificados bem-sucedidos |
SUCCESS#false |
CERTIFICATE#<uuid> |
Certificados falhados |
O CertificateRepositoryImpl utiliza:
- GSI1: Busca por UUID do certificado
- GSI2: Busca por email do participante
- GSI3: Busca por product_id
- GSI4: Busca por status de sucesso
A função Lambda é acionada por um evento SQS que contém um lote de notificações no corpo da mensagem.
Exemplo de corpo da mensagem SQS:
{
"notifications": [
{
"order_id": 123456,
"product_id": 42,
"product_name": "Demo Event",
"email": "alex@example.test",
"certificate_key": "certificates/42/123456/Alex_Example_Demo_Event_ABC-123-XYZ.png",
"success": true
}
]
}Após o processamento, o serviço envia uma notificação para um endpoint externo via POST.
Exemplo de corpo da requisição POST:
{
"product_id": 42,
"certificates_quantity": 1,
"certificates": [
{
"id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
"order_id": 123456,
"product_id": 42,
"product_name": "Demo Event",
"certificate_url": "https://example.com/certificate.png",
"success": true
}
]
}