fbpx
Integração de API com DynamoDB utilizando o Serverless Framework
Voiced by Amazon Polly

Após termos criado uma API Serverless no tutorial Como construir sua primeira API na nuvem com o Serverless Framework, e termos incluído uma chave de autorização de API e variáveis para facilitar a manutenção do código, vamos conectá-la ao banco de dados DynamoDB, um banco NoSQL e totalmente gerenciado pela AWS. Nele, criaremos uma tabela para armazenar contatos, onde cada registro terá um nome, um número de telefone e um id.

Primeiramente, devemos criar a tabela. No arquivo serverless.yml adicionaremos a seção de resources, onde especificaremos uma definição YAML do CloudFormation para criar a tabela no DynamoDB.

Nas variáveis personalizadas do serverless.yml, adicione a variável para referenciar o nome da tabela.

No fim do seu arquivo serverless.yml, adicione o seguinte trecho:

Pela configuração definida, nossa referência à tabela no serverless.yml é ContactTable. Especificamos nesse trecho que a chave utilizada na tabela será id, que o método de cobrança será para pagar apenas pelos requests realizados e que o nome da tabela será dynamo--item-table que está referenciado pela variável custom.contactTable.

POST – Persistindo novos itens na tabela

Para começar, vamos criar um novo arquivo para colocarmos nosso código, além disso podemos apagar o arquivo anterior src/item.py:

No novo arquivo, adicione o código abaixo:

O método get_dynamo_db recupera a tabela do DynamoDB através do boto3, o SDK da AWS para python. Iremos utilizá-la também para os demais métodos. Note que usamos a variável de ambiente TABLE, para referenciar o nome da tabela dos diferentes ambientes, teremos de adicioná-la na definição da função no serverless.yml.

Já o método create recebe o conteúdo que vem no body da requisição, verifica se possui name e phone informados, então gera um id único para esse registro e o persiste na tabela.

Chegou a hora de voltarmos ao serverless.yml para definirmos as especificações da nossa nova função. Para isso, apague a referência da função hello, e então adicione a função contact-post, referenciada abaixo.

Repare no que mudou além do nome da função. O valor de handler agora está vinculado ao novo arquivo src/contact.py, referenciando o método create que definimos.

Temos também a definição de environment, e nele passamos o nome da tabela para a variável ambiente TABLE, que utilizamos para enviar informação do serverless.yml para o código.

Também note na seção de events, a mudança no path, que está como contact e o method post.

Por fim, adicionamos iamRoleStatements para dar permissão à nossa função Lambda para que adicione novos itens (dynamodb:PutItem) na ContactTable.

Para que o trecho iamRoleStatements funcione, devemos adicionar um plugin ao nosso script. Em seu terminal, instale o pacote serverless-iam-roles-per-function pelo npm.

E adicione no fim do serverless.yml, a referencia para o plugin.

Agora é só realizar o deploy e testar o novo método. Vamos adicionar dois novos contatos!

Ao acessarmos o serviço do DynamoDB pelo console, na tabela dynamo-dev-contact-table, selecionando a aba de Itens, podemos verificar os dois registros persistidos na tabela.

GET e DELETE – Listando e removendo itens existentes na tabela

Legal! Já conseguimos incluir novos itens a nossa tabela. Vamos agora implementar os métodos GET e DELETE para que a nossa API retorne os registros existentes que já vimos no console, e que também possamos remover alguns deles.

Em contact.py, inclua ambas as funções:

E em serverless.yml faça a referência à função. Ela vai ser bem parecida à que acabamos de fazer, as únicas diferenças vão ser, o nome da função, o handler que apontará para os métodos que definimos, o tipo do método e a permissão de ação no DynamoDB que será de dynamodb:Scan para o método GET e dynamodb:DeleteItem para o método DELETE

Com essas simples adições, temos agora outros dois métodos funcionais em nossa API. Basta realizar o deploy mais uma vez. Vamos para os testes.

Primeiro, vamos listar os usuários com o método GET:

Obtemos um JSON como retorno, ele está formatado para facilitar a visualização:

Conseguimos ver os mesmos registros que vimos anteriormente na tabela no console. Agora vamos remover o contato do James Matthew. Para isso, basta passar o valor do id (29a64dab-b77a-4b5f-9e82-222950c3b5ff) na chamada do método DELETE.

Quando executar essa requisição, deverá receber uma resposta com status 200, confirmando a exclusão.

Ao realizar a requisição GET novamente, podemos verificar que o contato de James Matthew não se encontra mais presente em nossa tabela.

E assim finalizamos nossas três funções da API, que nos permitem manipular informações de uma tabela de contatos. Realize algumas chamadas diferentes para testar a aplicação! E digo mais, se quiser passar outras informações além do nome e do telefone do contato, sinta-se à vontade para fazê-lo. Como o DynamoDB é um banco NoSQL de esquema não definido, poderíamos colocar por exemplo um email também vinculado ao usuário e aumentar o poder de representação desta entidade!

Para baixar o código deste tutorial, acesse este link.

Entre em Contato

Para entender melhor como funciona o Serverless Framework e utilizá-lo seguindo as melhores práticas, entre em contato com nossos especialistas.