ℹ️ NOTE: Este é o repositório desenvolvido por Ismael Santos de Medeiros.
Projeto com o objetivo de implantar e configurar uma arquitetura sem servidor (Serverless) orientada a eventos na AWS para automação de relatórios analíticos de vendas. A solução utiliza funções AWS Lambda encadeadas, AWS Systems Manager Parameter Store para gestão de credenciais, camadas customizadas (Lambda Layers), Amazon SNS para notificações por e-mail e gatilhos temporizados via Amazon EventBridge (CloudWatch Events).
A solução conecta-se de forma segura a um banco de dados MySQL (cafe_db) executado em uma instância Amazon EC2 (pilha LAMP) dentro de uma Amazon VPC pública, aplicando regras de Security Groups e trocas de mensagens assíncronas.
- AWS Lambda — Execução de código Serverless (funções
salesAnalysisReportesalesAnalysisReportDataExtractor) - Lambda Layers — Empacotamento e reuso da biblioteca cliente
PyMySQLpara Python 3.9 - AWS Systems Manager (SSM) — Armazenamento seguro de parâmetros de conexão com o banco de dados (
Parameter Store) - Amazon SNS — Publicação e assinatura de tópicos de e-mail para envio de relatórios
- Amazon EventBridge / CloudWatch Events — Agendamento de execuções automatizadas via expressões Cron
- AWS IAM — Configuração de papéis de execução com permissões para VPC, CloudWatch Logs, SNS e invocação de funções Lambda
- Amazon EC2 & VPC — Hospedagem do banco de dados MySQL da cafeteria e integração com interface de rede elástica (ENI)
- Análise e validação dos perfis de execução do IAM (
salesAnalysisReportRoleesalesAnalysisReportDERole) garantindo o acesso aos logs, VPC e invocação cruzada de funções. - Criação de uma camada Lambda customizada (
pymysqlLibrary) com a bibliotecaPyMySQLpara reuso entre funções Python. - Implantação da função extratora
salesAnalysisReportDataExtractore vinculação à camada e à VPC da aplicação. - Ajuste das regras de entrada do Grupo de Segurança (Security Group) da instância EC2 liberando a porta
3306(MySQL) após diagnóstico de timeout nos testes iniciais. - Geração de dados de teste realizando pedidos reais na aplicação web do Café hospedada na instância EC2.
- Criação e confirmação de assinatura de um Tópico no Amazon SNS (
salesAnalysisReportTopic) para distribuição do relatório final por e-mail. - Implantação da função orquestradora
salesAnalysisReportvia AWS CLI e configuração da variável de ambientetopicARN. - Configuração de gatilho diário temporizado no EventBridge usando expressões Cron para disparo automático do relatório.
- Camada da biblioteca PyMySQL:
pymysql-v3.zip - Código da função extratora:
salesAnalysisReportDataExtractor-v3.zip - Código da função principal:
salesAnalysisReport-v2.zip - Documentação AWS Lambda: AWS Lambda Developer Guide
- Documentação Amazon EventBridge Cron: Schedule Expressions for Rules
Para replicar o resultado e implantar a arquitetura Serverless de relatórios, siga o passo a passo abaixo.
- 🤖 1. Crie a função extratora
salesAnalysisReportDataExtractorno console do AWS Lambda.
- 🤖 2. Crie a camada personalizada
pymysqlLibrarycom o arquivopymysql-v3.zipe selecione-a na janela do Lambda.
- 🤖 3. Confirme a adição da camada
pymysqlLibraryna seção de configurações do runtime.
- 🤖 4. Configure o manipulador da função como
salesAnalysisReportDataExtractor.lambda_handler.
- 🤖 5. Importe o código Python da função extratora via arquivo
.zipno editor do console.
- 🤖 6. Associe a função à
Cafe VPC, àSub-rede pública 1e ao grupo de segurançaCafeSecurityGroup.
- 🤖 7. Valide a associação da VPC e sub-redes na página de visão geral da função.
- 🤖 8. Consulte a senha do banco de dados no Systems Manager Parameter Store no caminho
/cafe/dbPassword.
- 🤖 9. Na guia de testes, configure um evento síncrono chamado
SARDETestEvent.
- 🤖 10. Insira o objeto JSON contendo os parâmetros do banco de dados (
dbUrl,dbName,dbUser,dbPassword).
- 🤖 11. Execute o teste inicial para validar a conectividade com o banco de dados.
- 🤖 12. Acesse as configurações de VPC e adicione uma regra de entrada no
CafeSecurityGroupliberando a porta3306(MySQL).
- 🤖 13. Re-execute o teste da função extratora e confirme o sucesso na resposta da execução.
- 🤖 14. Observe que o retorno do JSON inicial do corpo vem vazio (
body: []) pois ainda não há pedidos no banco.
- 🤖 15. Acesse o site da cafeteria usando o IP público da instância EC2.
- 🤖 16. Realize pedidos de produtos no site para inserir registros reais no MySQL.
- 🤖 17. Execute novamente o teste na função extratora e confirme a extração dos dados dos pedidos efetuados.
- 🤖 18. No console do Amazon SNS, crie o tópico padrão
salesAnalysisReportTopic.
- 🤖 19. Crie uma assinatura do tipo E-mail no tópico SNS e verifique o status inicial de confirmação pendente.
- 🤖 20. Acesse sua caixa de entrada e clique no link de confirmação enviado pela AWS.
- 🤖 21. Verifique se o status da assinatura no SNS mudou para
Confirmado.
- 🤖 22. Conecte-se ao
CLI Hostvia EC2 Instance Connect e configure suas credenciais comaws configure.
- 🤖 23. Crie a função orquestradora
salesAnalysisReportexecutando o comandoaws lambda create-functionna CLI.
- 🤖 24. No console do Lambda, confirme que ambas as funções estão listadas e ativas.
- 🤖 25. Copie o ARN do tópico SNS criado anteriormente.
- 🤖 26. Na função
salesAnalysisReport, adicione a variável de ambientetopicARNcom o ARN do tópico.
- 🤖 27. Salve as alterações e confirme a atualização da função orquestradora.
- 🤖 28. Execute um teste síncrono na função
salesAnalysisReport.
- 🤖 29. Confirme a execução com sucesso e validação de envio do relatório.
- 🤖 30. Confira sua caixa de e-mail e valide o recebimento do Relatório Diário de Análise de Vendas com os itens pedidos.
Ismael Medeiros
GitHub
|
LinkedIn
|
Instagram
|
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)