Neste projeto, utilizamos o AWS Serverless Framework para criar uma API serverless com as seguintes funcionalidades:
utilizamos serviços da AWS como Lambda, API Gateway, SQS, DynamoDB e SES, conseguimos construir um fluxo eficiente para o portal de noticias Exploradores Modernos conforme descrito abaixo.
-
Primeira requisição (API Gateway): Uma API Gateway da AWS é configurada para receber uma requisição POST na rota
/subscrition
seguinte body://action = subscription | unsubscription { "email": "example@example.com", "action": "subscription" }
-
Primeira Fila (SQS): O e-mail recebido é adicionado a uma fila do SQS.
-
Lambda de Validação: Esta fila aciona uma função Lambda que:
- Valida o formato do e-mail.
- Cria um token JWT com validade de 24 horas usando o paylod recebido:
{ "email": "example@example.com",, "action": "subscription" }
- Envia um e-mail de confirmação para o endereço fornecido, contendo um link com o token JWT.
-
Clique no Link: O usuário recebe o e-mail e clica no link de confirmação que contém o token JWT.
-
Segunda requisição (API Gateway): Ao clicar no link, uma requisição GET é feita a API Gateway na rota
/confirm?token=${user_token}
verifica sua validade e, se for válido, envia o e-mail para a segunda fila. -
Segunda Fila (SQS): Esta segunda fila dispara uma nova função Lambda de verificação.
-
Lambda de Verificação:
- Se o action for
subscription
, o usuário está se inscrevendo na newsletter e o email será salvo em uma tabela no dynamodb. - Se o action for
unsubscription
, o usuário esta cancelando a inscrição na newsletter e o email do usuário é removido da tabela no dynamodb.
- Se o action for
-
Terceira Fila (SQS): Após falha de 5 tentativas as mensagens são enviadas para uma fila de DLQ.
- Requisição (API Gateway):
- Uma API Gateway da AWS é configurada para receber uma requisição POST do formulário de contato.
- Os campos típicos incluem nome, e-mail, assunto e mensagem.
- Lambda de Processamento:
- A requisição aciona esta função Lambda.
- Valida os campos recebidos, como formato do e-mail e presença de todos os campos obrigatórios.
- Prepara a mensagem formatada para envio por e-mail e a coloca em uma fila SQS para processamento posterior.
- Fila de Contato (SQS):
- A mensagem formatada é adicionada a esta fila.
- O processamento assíncrono garante rápida resposta ao usuário no front-end.
- Lambda de Envio de E-mail:
- Acionada pela mensagem na fila.
- Usa o Amazon SES para enviar a mensagem ao destinatário apropriado (por exemplo, equipe de suporte ou administrador do site).
- Fila DLQ (SQS):
- Em caso de falhas no envio do e-mail após várias tentativas, a mensagem é enviada para esta fila.
- Análise e ação corretiva podem ser tomadas para mensagens nesta fila.
Instale as dependências e execute o comando abaixo no terminal:
npm install && serverless deploy --stage production
Após a execução do comando, será exibido no terminal as variáveis de ambiente como rotas, chave de api, etc. Guarde a chave de API pois ela será exibida apenas uma vez. Para encontrar a chave novamente acesse a AWS e procure pelo serviço API Gateway.
Após a instalação, configure as variáveis de ambiente e renomeie os arquivos de exemplo.
.env.example -> .env
.env.example.shell -> .env.shell
credentials.example -> credentials
Para visualizar as rotas disponíveis, execute o comando abaixo no terminal:
serverless info --stage production
Para executar os testes do vite para alguns serviços usados pelas funções lambdas, execute o comando abaixo no terminal:
npm test
Para testar as funções lambda localmente, execute o comando abaixo no terminal:
./test.sh
Este projeto está sob a licença MIT. Veja o arquivo LICENÇA para mais detalhes.