É possível construir um backend completo usado o serviço lambda da AWS, claro será preciso usar outros serviços para apriomar detalhes de segurança dentre outros, e neste curso vamos aprender um método para construir um backend de forma simples usando as mais modernas tecnologias cloud da AWS.
Recomendo considerar os conceitos aprendidos no treinamento para obter a cartificação de "cloud practitioner AWS" dado que em qualquer momento posso lhes consultar sobre:
- O que é o AWS Lambda ?
- O que são as permissões AWS IAM ?
- Como Configurar o gatilho (trigger) para acionar a função (por exemplo, uma API Gateway, um evento do S3, etc.) ?
- Como Configurar "permissões IAM" para uma função AWS lambda?
- Como iniciar o DynamoDb no docker ?
- Quais verbos HTTP são usados no CRUD ?
- O que é uma API RESTFUL ?
- O que é o SAM-CLI (ferramenta de AWS para acelerar o desenvolvimento de funções Serveless) ?
- Como é o arquivo template.yml gerado com o comando: sam init ?
- Vantagens de usar typescript (ao invés de JavaScript) para fazer um CRUD ?
- O que é o AWS SDK para JS ?
- Como faz o AWS SDK v3 para poupar espaço ?
- Como é o arquivo samconfig.toml gerado com o comando: sam deploy ?
- O que faz o comando sam local invoke ?
Sem dúvida que são muitos conceitos que devem ser cuidadosamente artículados, por isso será preciso dividir está aula em dois (02) laboratórios:
-
Laboratório Básico: Configurando uma Função Lambda Simples. Neste laboratório, você aprenderá a configurar uma função Lambda básica que responde a eventos de gatilho. Você usará o AWS Management Console para criar uma função Lambda que responda os verbos HTTP do CRUD.
-
Laboratório Avançado: Construindo uma Aplicação Serverless com AWS Lambda, Amazon API Gateway e Amazon DynamoDB (testada previamente com Docker local usando o sam cli) , você construirá uma aplicação serverless completa. Você usará o AWS Lambda e o Amazon API Gateway para criar uma API RESTful, e o Amazon DynamoDB para armazenar dados.
Usando o sam-cli pode-se criar uma função serveless usando o template especifico para fazer "Hello World" em typescript.
Neste laboratório pode-se aprofundar sobre o serviço da AWS "Cloudformation" dado que o sam-cli usa este serviço de forma muito simplificada.
Para garantir o sucesso deste laboratório tente estudar sobre o AWS Cloudformation focado em:
- Como definir uma tabela DynamoDB ?
- Como definir um APIGateway e os caminhos para cada recurso atendido por uma API RestFUL ?
- Como criar diversos end-point num mesmo TEMPLATE.yaml ?
- Como definir permissões (IAM aws service) num template de Cloudformation ?
- Qual será a saída do comando: sam list endpoints --output json ?
Será preciso aplicar o método TDD (Desenvolvimento focado em testes) para que este Laboratório Avançado seja feito num tempo sumário. Por isso deve:
- Estudar o arquivo jest.config.ts neste repositório.
- Colocar todos os arquivos *test.ts na pasta para o "método TDD"
- Aplicar a sequencia de desenvolvimento e semaforos conforme o método TDD.
- Ao finalizar o desenvolvimento deve esvaziar a pasta para o "método TDD"
- Estudar sobre testes unitários, jest (https://www.npmjs.com/package/jest), Testes de integração, pirámide de testes.
Neste laborátorio avançado deve estudar cada arquivo contido na pasta events/ dado que serão feitos testes de integração com ajuda do sam cli com os comandos:
-
sam local invoke getByIdFunction --event ./events/event-get-by-id.json
-
sam local invoke deleteItemFunction --event ./events/event-deleteItemFunction
-
sam local invoke putItemFunction --event ./events/event-post-item.json
-
sam local invoke getByIdFunction --event ./events/event-get-by-id.json
-
sam local invoke getAllItemsFunction --event ./events/event-get-all-items.json
-
sam local invoke putItemFunction --event ./events/event-post-item.json
-
sam local invoke getByIdFunction --event ./events/event-get-by-id.json
-
sam local invoke getAllItemsFunction --event ./events/event-get-all-items.json
Se lembre de ativar o "DynamoDB local" (com o comando: java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb ou com os arquivods na pasta docker) para poder garatir o sucesso do testes de integração.
Para seu dever de casa (estudo detalhado destes laborátorios), lembremos que o desenho de uma API-RESTFUL deve ser útil para seu projeto, ao invés de ser uma réplica de um artigo da Wikipẽdia. Por isso vou lhe pedir que considere uma piada:
- "Se diz que o cientista da computação (fez uma tese Doutoral sobre API RESTFUL) inventor dos conceitos de CRUD brincou com o uso do verbo http PATCH argumentando numa palestra: Eu inventei o uso de PATCH para o CRUD dado que o PUT e o POST eram algo enrolados."
Moral daquela piada: sua API tem que funcionar para seu projeto, sem se apegar cegamente aos modelos cientificos já conhecidos (RESTFUL, etc..).
Por gentileza veja os arquivos: aulaTESTES.md
e samCLI_README.md para aprender mais um pouco.
Para saber mais:
- AWS CloudFormation Templates (GovCloud US)
- AWS SAM: Setting Up Local Serverless Development with Lambda and DynamoDB
- DynamoDB Developer Guide: ListTables Section
- AWS CloudFormation: Quick Reference - Lambda Functions
- AWS CloudFormation User Guide
- AWS SDK for JavaScript v3: UpdateCommand
- AWS CloudFormation Documentation
- AWS Serverless Application Model (SAM) Getting Started Guide
- NPM Package: aws-sdk-mock