Tutorial: Crie uma API HTTP CRUD com o Lambda e o DynamoDB
Neste tutorial, você cria uma API sem servidor que cria, lê, atualiza e exclui itens de uma tabela do DynamoDB. O DynamoDB é um serviço de banco de dados NoSQL totalmente gerenciado que proporciona uma performance rápida e previsível com escalabilidade contínua. Este tutorial leva aproximadamente 30 minutos para ser concluído, e você pode fazê-lo no nível gratuito da AWS
Primeiro, você cria uma tabela do DynamoDB usando o console do DynamoDB. Em seguida, você cria uma função do Lambda usando o console do AWS Lambda. Em seguida, crie uma API HTTP usando o console do API Gateway. Por fim, você testa a sua API.
Quando você invoca sua API HTTP, o API Gateway encaminha a solicitação para sua função do Lambda. A função do Lambda interage com o DynamoDB e retorna uma resposta ao API Gateway. O API Gateway retorna uma resposta para você.
Para concluir esse exercício, você precisa de uma conta da AWS e de um usuário do AWS Identity and Access Management com acesso ao console. Para obter mais informações, consulte Configurar para usar o API Gateway.
Neste tutorial, você usará o AWS Management Console. Para obter um modelo AWS SAM que cria essa API e todos os recursos relacionados, consulte template.yaml
.
Tópicos
Etapa 1: Crie uma tabela do DynamoDB
Você usa uma tabela do DynamoDB para armazenar dados para a sua API.
Cada item tem um ID exclusivo, que usamos como partition key (chave de partição) para a tabela.
Como criar uma tabela do DynamoDB
Abra o console do DynamoDB em https://console.aws.amazon.com/dynamodb/
. -
Escolha Create table.
-
Em Table name (Nome da tabela), insira
http-crud-tutorial-items
. -
Em Partition key, (Chave de partição), insira
id
. -
Escolha Create table.
Etapa 2: Criar uma função do Lambda
Você cria uma função do Lambda para o backend da sua API. Essa função do Lambda cria, lê, atualiza e exclui itens do DynamoDB. A função usa events from API Gateway (eventos do API Gateway) para definir como interagir com o DynamoDB. Para fins de simplicidade, este tutorial usa uma única função do Lambda. Como prática recomendada, você deve criar funções separadas para cada rota.
Como criar uma função do Lambda
Abra o console do Lambda em https://console.aws.amazon.com/lambda
-
Escolha Create function (Criar função).
-
Em Function name (Nome da função), insira
http-crud-tutorial-function
. -
Em Tempo de execução, escolha o último runtime Node.js ou Python compatível.
-
Em Permissions (Permissões), escolha Change default execution role (Alterar a função de execução padrão).
-
Selecione Criar uma nova função a partir de modelos de política da AWS.
-
Em Role name (Nome da função), insira
http-crud-tutorial-role
. -
Em Policy templates (Modelos de políticas), escolha
Simple microservice permissions
. Esta política concede à função do Lambda permissão para interagir com o DynamoDB.nota
Este tutorial usa uma política gerenciada em prol da simplicidade. Como prática recomendada, você deve criar sua própria política do IAM para conceder as permissões mínimas necessárias.
-
Escolha Create function (Criar função).
-
Abra a função do Lambda no editor de código do console e substitua seu conteúdo pelo código a seguir. Escolha Deploy (Implantar) para atualizar a sua função.
Etapa 3: Crie uma API HTTP
A API HTTP fornece um endpoint de HTTP para sua função do Lambda. Nesta etapa, você cria uma API vazia. Nas etapas a seguir, você configura rotas e integrações para conectar a sua API e sua função do Lambda.
Para criar uma API HTTP
Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway
. -
Escolha Create API (Criar API) e, em seguida, em API HTTP (API HTTP), escolha Build (Criar).
-
Em API name (Nome da API), insira
http-crud-tutorial-api
. -
Escolha Next (Próximo).
-
Em Configure routes (Configurar rotas), escolha Next (Próximo) para ignorar a criação da rota. Você cria rotas mais tarde.
-
Analise o estágio que o API Gateway cria para você e escolha Next (Avançar).
-
Escolha Create (Criar).
Etapa 4: Crie rotas
As rotas são uma forma de enviar as solicitações de API recebidas a recursos de backend. As rotas consistem em duas partes: um método HTTP e um caminho de recurso, por exemplo, GET /items
. Para esta API de exemplo, criamos quatro rotas:
-
GET /items/{id}
-
GET /items
-
PUT /items
-
DELETE /items/{id}
Para criar rotas
Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway
. -
Selecione a API.
-
Selecione Routes (Rotas).
-
Escolha Create (Criar).
-
Em Método, escolha
GET
. -
Para o caminho, insira
/items/{id}
. O{id}
no final do caminho é um parâmetro de caminho que o API Gateway recupera do caminho de solicitação quando um cliente faz uma solicitação. -
Escolha Create (Criar).
-
Repita as etapas quatro a sete para
GET /items
DELETE /items/{id}
ePUT /items
.
Etapa 5: Crie uma integração
Você cria uma integração para conectar uma rota aos recursos de backend. Para este exemplo de API, você cria uma integração do Lambda que usa para todas as rotas.
Para criar uma integração
Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway
. -
Selecione a API.
-
Escolha Integrations (Integrações).
-
Escolha Manage integrations (Gerenciar integrações) e, em seguida, escolha Create (Criar).
-
Pule Attach this integration to a route (Anexar esta integração a uma rota). Você conclui isso em uma etapa posterior.
-
Em Integration type (Tipo de integração), escolha Lambda function (Função do Lambda).
-
Em Lambda function (Função do Lambda), insira
http-crud-tutorial-function
. -
Escolha Create (Criar).
Etapa 6: Anexe a sua integração às rotas
Para este exemplo de API, você usa a mesma integração do Lambda para todas as rotas. Depois de anexar a integração a todas as rotas da API, sua função do Lambda é invocada quando um cliente chama qualquer uma de suas rotas.
Para anexar integrações a rotas
Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway
. -
Selecione a API.
-
Escolha Integrations (Integrações).
-
Escolha uma rota.
-
Em Choose an existing integration (Escolher uma integração existente), escolha
http-crud-tutorial-function
. -
Escolha Attach integration (Anexar integração).
-
Repita as etapas quatro a seis para todas as rotas.
Todas as rotas mostram que há uma integração com o AWS Lambda anexada.
Agora que você tem uma API HTTP com rotas e integrações, já pode testar a sua API.
Etapa 7: Teste a sua API
Para ter certeza de que a sua API está funcionando, use curl
Para obter a URL para invocar a sua API
Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway
. -
Selecione a API.
-
Observe o URL de invocação da sua API. Ela aparece em Invoke URL (Invocar URL) na página Details (Detalhes).
-
Copie a URL de invocação da sua API.
A URL completa se assemelha a
https://
.abcdef123
.execute-api.us-west-2
.amazonaws.com
Para criar ou atualizar um item
-
Use o comando a seguir para criar ou atualizar um item. O comando inclui um corpo de solicitação com o ID, o preço e o nome do item.
curl -X "PUT" -H "Content-Type: application/json" -d "{\"id\": \"123\", \"price\": 12345, \"name\": \"myitem\"}" https://
abcdef123
.execute-api.us-west-2
.amazonaws.com/items
Para obter todos os itens
-
Use o comando a seguir para listar todos os itens.
curl https://
abcdef123
.execute-api.us-west-2
.amazonaws.com/items
Para obter um item
-
Use o comando a seguir para obter um item pelo seu ID.
curl https://
abcdef123
.execute-api.us-west-2
.amazonaws.com/items/123
Para excluir um item
-
Use o comando a seguir para excluir um item.
curl -X "DELETE" https://
abcdef123
.execute-api.us-west-2
.amazonaws.com/items/123
-
Obtenha todos os itens para verificar se o item foi excluído.
curl https://
abcdef123
.execute-api.us-west-2
.amazonaws.com/items
Etapa 8: Limpar
Para evitar custos desnecessários, exclua os recursos que você criou como parte desse exercício de conceitos básicos. As etapas a seguir excluem sua API HTTP, sua função do Lambda e recursos associados.
Como excluir uma tabela do DynamoDB
Abra o console do DynamoDB em https://console.aws.amazon.com/dynamodb/
. -
Selecionar a sua tabela.
-
Selecione Delete table (Excluir tabela).
-
Confirme a sua decisão e escolha Delete (Excluir).
Para excluir uma API HTTP
Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway
. -
Na página APIs , selecione uma API. Escolha Actions (Ações) e, depois, escolha Delete (Excluir).
-
Escolha Delete (Excluir).
Para excluir uma função do Lambda
Abra o console do Lambda em https://console.aws.amazon.com/lambda
-
Na página Functions(Funções), selecione uma função. Escolha Actions (Ações) e, depois, escolha Delete (Excluir).
-
Escolha Delete (Excluir).
Para excluir um grupo de logs de uma função do Lambda
-
No console do Amazon CloudWatch, abra a página Log groups
(Grupos de log). -
Na página Log groups (Grupos de log), selecione o grupo de log da função (
/aws/lambda/http-crud-tutorial-function
). Escolha Actions (Ações) e selecione Delete log group (Excluir grupo de log). -
Escolha Delete (Excluir).
Para excluir a função de execução de uma função do Lambda
-
No console do AWS Identity and Access Management, abra a página Roles
(Funções). -
Selecione a atribuição da função, por exemplo,
http-crud-tutorial-role
. -
Selecione Delete role (Excluir função).
-
Escolha Sim, excluir.
Próximas etapas: Automatizar com AWS SAM ou AWS CloudFormation
Você pode automatizar a criação e a limpeza dos recursos da AWS usando o AWS CloudFormation ou o AWS SAM. Para obter um exemplo de modelo do AWS SAM para este tutorial, consulte template.yaml
.
Para ver modelos de exemplo do AWS CloudFormation, consulte modelos de exemplo do AWS CloudFormation