Skip to content

Latest commit

 

History

History
145 lines (102 loc) · 5.67 KB

README.md

File metadata and controls

145 lines (102 loc) · 5.67 KB

Newsletter e Recebimento de Mensagens de contato


Serverless Framework Vitest AWS Lambda AWS API Gateway AWS SQS AWS DynamoDB AWS SES

Introdução

Neste projeto, utilizamos o AWS Serverless Framework para criar uma API serverless com as seguintes funcionalidades:

1. Inscrição e cancelamento de inscrição na Newsletter

2. Recebimento de mensagens do formulário de contato Fale Conosco.

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.

Regras de negócio

Newsletter

  1. 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"
    }
  2. Primeira Fila (SQS): O e-mail recebido é adicionado a uma fila do SQS.

  3. 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.
  4. Clique no Link: O usuário recebe o e-mail e clica no link de confirmação que contém o token JWT.

  5. 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.

  6. Segunda Fila (SQS): Esta segunda fila dispara uma nova função Lambda de verificação.

  7. 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.
  8. Terceira Fila (SQS): Após falha de 5 tentativas as mensagens são enviadas para uma fila de DLQ.

Formulário de Contato

  1. 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.
  2. 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.
  3. 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.
  4. 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).
  5. 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.

Iniciar

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.

Configuração

Após a instalação, configure as variáveis de ambiente e renomeie os arquivos de exemplo.

  1. .env.example -> .env
  2. .env.example.shell -> .env.shell
  3. credentials.example -> credentials

Rotas

Para visualizar as rotas disponíveis, execute o comando abaixo no terminal:

serverless info --stage production

Testes

Para executar os testes do vite para alguns serviços usados pelas funções lambdas, execute o comando abaixo no terminal:

npm test

Teste Local das Funções Lambda

Para testar as funções lambda localmente, execute o comando abaixo no terminal:

./test.sh

Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENÇA para mais detalhes.