Projeto realizado para a matéria de Digital Product - BootCamp (Impacta - MBA Cloud Computing & DevOps)
Este repositório tem como objetivo demonstrar a criação de uma arquitetura serverless usando Terraform.
Pensando em cenários onde não desejamos nos preocupar em gerenciar uma infraestrutura de servidores, podemos optar em utilizar serviços serverless que faz essa camada de infra ser de responsabilidade do provedor (AWS, Azure, GCP). Com isso, na maioria das vezes ganhamos mais agilidade nas entregas, escalabilidade e redução de custos.
Toda ela é criada via infraestrutura como código com o Terraform. Veja aqui
É a nossa porta de entrada, que vai encaminhar as chamadas HTTP para nossa função Lambda.
Com o API Gateway conseguimos criar APIs e administrar todo o recebimento de chamadas simultâneas. Sendo possível gerenciar todo o tráfego HTTP, configurar CORS, adicionar controle de acesso e até criar um controle de versões da nossa API.
Roda nossa aplicação escrita em Python que vai nos permitir executar as operações create, update, read, list, delete
em nossa tabela do DynamoDB.
O serviço Lambda permite executar códigos sem se preocupar com o processamento do servidor, basta enviar o código e indicar qual é o método/função inicial.
Se trata do banco de dados que vamos usar para manter os dados na tabela anything
.
DynamoDB é um serviço de banco de dados NoSQL sem servidor e totalmente gerenciado que oferece suporte a estruturas de dados de documentos e chave-valor
Para subir todas as peças pode ser utilizado uma máquina na AWS com Terraform e Python3 (para executar os testes) instalado e o Jenkins configurado para que tudo seja feito de forma automatizada.
Então temos aqui no repo um Jenkinsfile que pode ser utilizado na criação da esteira. Utilizando ele nós vamos ter os seguintes steps em nossa pipeline:
Checkout > Unit Test > Terraform init > Terraform plan > Terraform apply > Terraform destroy
Com o apply tudo será criado e no destroy tudo é destruído, por isso esses steps exigem a ação manual de escolher se deseja continuar ou abortar.
Para realizar as chamadas basta utilizar a url que será apresentada nos logs do step Terraform apply
com o método HTTP POST e o body conforme os exemplos aqui, ou rodar os testes direto no API Gateway via console da AWS
Além de todas as peças mencionadas acima, também estamos utilizando para nos ajudar com Troubleshootings um grupo de logs do CloudWatch que armazena e nos permite visualizar os logs da nossa Lambda, isto também foi criado via Terraform neste ponto. Para acessar os logs basta entrar no CloudWatch Log Groups e buscar pelo nome da função dynamodbmanager_function