Criando uma API utilizando apenas serviços da AWS
Depois de um tempo acreditando que eu sabia mexer na AWS, eu descobri que o máximo que eu sabia fazer era usar o S3, e bem mal por sinal. Isso tudo eu só descobri quando precisei criar uma API dentro do ambiente AWS.
Tudo começou com a seguinte demanda: “Precisamos extrair e modelar nossos dados do lake e disponibilizar no Dynamo pra ser acessado pelo serviço de cadastro, você constrói a API, por favor?” Eu nesse momento, eu precisei correr atrás de começar a aprender de verdade AWS.
Uma vez que temos esse contexto, gostaria de explicar alguns passos que podem ser úteis quando mais pessoas precisarem criar suas próprias APIs, nesse “tutorial”, usarmos os seguintes serviços: Lambda, API Gateway, Dynamo DB.
Então hoje nossa API terá os seguintes passos: Carregar dados no Dynamo, criar uma Lambda para ler os dados e encontrar quais precisamos para devolver como response da request, e o API Gateway, pra fazer a interface entre response e request.
Carregando dados para o Dynamo DB
O Dynamo DB, nada mais é que um banco de dados não relacional (NoSQL) da AWS, e funciona muito bem com armazenamento de dados que vão ser acessados por APIs e serviços de inúmeras formas diferentes.
Existem várias maneiras de carregar dados para o Dynamo, podemos fazer isso com um csv, com uma tabela já criada usando spark, ler um parquet ainda cru, entre outras mil formas. O jeito mais fácil para construirmos uma POC (proof of concept) é subindo o dado atraves de um CSV no Dynamo, o console é bem simples e intuitivo dado que temos botões para criar novas tabelas logo na primeira tela do console. O dynamo pede apenas que você diga a ele dois parametros: qual coluna será a sua de referência para valores de identificação, que também podemos entender como chave única, e qual será a forma da criação da tabela; Eu sempre uso o modelo on-demand
dado que nós não precisamos nos preocupar em provisionar o volume de dados que vamos transacionar. Uma vez criada a tabela que será a fonte de dados da nossa aplicação, podemos seguir para os pŕoximos passos.
Criando a Lambda
A segunda parte consiste em configurar a lambda para que ela execute a extração do dado necessário da nossa base previamente criada.
A lambda, nada mais é que uma função que irá executar determinado código que inserirmos para ela e deployarmos. Lambdas podem ser escritas em quase (até onde entendo) qualquer linguagem de programação, sendo as mais comuns Python
e Javascript
, essa última , contendo as formas usadas em seus frameworks (e.g Node). A maioria das lambdas ao ser criada, com sua linguagem previamente selecionada, já nos traz o código de um Hello world
simples para ser printado para o usuário final da Lambda. No meu caso, a minha busca deveria retornar informações de um determinado cliente, dessa forma, criei uma função em Python (não podemos usar pandas aqui dentro, apenas as libs necessárias para acessar a própria aws, e.g Boto3) que lê a request, e extrai dela (uma vez que a request é em Json
) a chave que preciso para identificar o meu cliente. Uma vez identificado o cliente, nossa lambda irá acessar o dynamo para devolver o dado pertinente.
Dessa forma, já temos a implementação da nossa busca por dados dentro do Dynamo através da Lambda. Agora precisamos da parte principal para a nossa API ir para produção, o nosso Endpoint.
API Gateway — Nosso último passo para automações simples
O serviço de API Gateway permite que criemos APIs rest e web sockets, facilitando assim o nosso acesso aos dados, lógicas de negócios e outras features do nosso back-end (no nosso caso, a lambda!). De forma simplificada, podemos imaginar ela como uma porta, que nos dará acesso às nossas requisições, que nesse exemplo, serão de GET
, uma vez que queremos pegar dados de determinado lugar.
Quando estamos no nosso console da lambda, conforme imagem abaixo, vemos que podemos adicionar gatilhos (triggers) à nossa aplicação, para que ela comece a funcionar quando isso for ativado:
Ao clicarmos em adicionar um novo gatilho, muitas opções de outros serviços irão aparecer, apenas para mostrar a infinidade de possibilidades que podemos ter dentro do ambiente AWS. Uma vez configurado para ser o API Gateway nosso gatilho, o console será como a foto abaixo, e termos enfim, o nosso endpoint, onde poderemos passar as requisições em forma de argumento na url.
Uma vez todos esses pontos preenchidos, nós temos uma aplicação totalmente serverless, ou seja, uma aplicação back-end que roda sem o auxílio de um servidor, pois tudo está nas mãos da própria AWS. A maior vantagem dessa forma de desenvolvimento, é focar seus esforços ao máximo em atender a lógica do seu negócio, sem precisar de um time ultra robusto para criar a API, testes, fazer o deploy e dar manutenção. Já uma das melhores coisas da computação em nuvem é a grande eficiência que nos proporciona com um custo relativamente baixo ao de manter servidores físicos em nossas empresas, como era feito antigamente.
Sites de referência para mais informações: