Tutorial: Uso do Lambda com API Gateway
Neste tutorial, você criará uma API REST que será usada para invocar uma função do Lambda usando uma solicitação HTTP. A função do Lambda executará operações de criação, leitura, atualização e exclusão (CRUD) em uma tabela do DynamoDB. Essa função será fornecida aqui para fins de demonstração, mas você aprenderá a configurar uma API REST do API Gateway que pode invocar qualquer função do Lambda.
 
     
     
  O uso do API Gateway fornece aos usuários um endpoint HTTP seguro para invocar a função do Lambda e pode ajudar a gerenciar grandes volumes de chamadas para a função, ao realizar o controle de utilização do tráfego e validar e autorizar as chamadas de API automaticamente. O API Gateway também oferece controles de segurança flexíveis usando o AWS Identity and Access Management (IAM) e o Amazon Cognito. Isso é útil para casos de uso em que é necessária uma autorização prévia para as chamadas em sua aplicação.
dica
O Lambda fornece duas maneiras de invocar uma função por meio de um endpoint HTTP: API Gateway e URLs de funções do Lambda. Se não tiver certeza de qual é o melhor método para seu caso de uso, consulte Seleção de um método para invocar a função do Lambda usando uma solicitação HTTP.
Para concluir este tutorial, você passará pelos estágios a seguir:
- 
      
Criação e configuração de uma função do Lambda em Python ou em Node.js para a execução de operações em uma tabela do DynamoDB.
 - 
      
Criação de uma API REST no API Gateway para conexão com a função do Lambda.
 - 
      
Criação de uma tabela do DynamoDB e realização de teste com a função do Lambda no console.
 - 
      
Implantação da API e realização de teste da configuração completa usando curl em um terminal.
 
Ao concluir esses estágios, você aprenderá a usar o API Gateway para criar um endpoint HTTP que pode invocar uma função do Lambda com segurança em qualquer escala. Você também aprenderá como implantar a API e testá-la no console, além de como enviar uma solicitação HTTP usando um terminal.
Criação de uma política de permissões
Antes de ser possível criar uma função de execução para a função do Lambda, primeiro é necessário criar uma política de permissões para fornecer à sua função permissão para acessar os recursos da AWS necessários. Para este tutorial, a política permitirá que o Lambda execute operações de CRUD em uma tabela do DynamoDB e grave no Amazon CloudWatch Logs.
Para criar a política
- 
        
Abra a página Policies
(Políticas) do console do IAM.  - 
        
Escolha Create Policy.
 - 
        
Escolha a guia JSON e cole a política personalizada a seguir no editor JSON.
 - 
        
Escolha Próximo: etiquetas.
 - 
        
Selecione Próximo: revisar.
 - 
        
No campo Política de revisão, em Nome da política, insira
lambda-apigateway-policy. - 
        
Escolha Criar política.
 
Criar uma função de execução
Um perfil de execução é um perfil do AWS Identity and Access Management (IAM) que concede a uma função do Lambda permissão para acessar recursos e Serviços da AWS. Para permitir que a função execute operações em uma tabela do DynamoDB, vincule a política de permissões criada na etapa anterior.
Para criar um perfil de execução e vincular a política de permissões personalizada
- 
        
Abra a página Funções
no console do IAM.  - 
        
Selecione Criar perfil.
 - 
        
Para o tipo de entidade confiável, escolha Serviço da AWS e, em seguida, para o caso de uso, selecione Lambda.
 - 
        
Escolha Próximo.
 - 
        
Na caixa de pesquisa de política, insira
lambda-apigateway-policy. - 
        
Nos resultados da pesquisa, selecione a política que você criou (
lambda-apigateway-policy) e, depois, escolha Next (Avançar). - 
        
Em Role details (Detalhes do perfil), para Role name (Nome do perfil), insira
lambda-apigateway-rolee, em seguida, escolha Create role (Criar perfil). 
Criar a função do Lambda
- 
        
Abra a página Funções
do console do Lambda e escolha Criar função.  - 
        
Escolha Criar do zero.
 - 
        
Em Function name (Nome da função), insira
LambdaFunctionOverHttps. - 
        
Em Runtime, escolha o runtime Node.js ou Python mais recente.
 - 
        
Em Permissions (Permissões), expanda Change default execution role (Alterar função de execução padrão).
 - 
        
Escolha Usar um perfil existente e selecione o perfil
lambda-apigateway-roleque você criou anteriormente. - 
        
Escolha a opção Criar função.
 - 
        
No painel Código-fonte, substitua o código padrão pelo código Node.js ou Python a seguir.
nota
Neste exemplo, o nome da tabela do DynamoDB está definido como uma variável em seu código da função. Em uma aplicação real, a prática recomendada é transferir esse parâmetro como uma variável de ambiente e evitar codificar o nome da tabela. Para obter mais informações, consulte Usar variáveis de ambiente do AWS Lambda.
 - 
        
Na seção DEPLOY, escolha Implantar para atualizar o código da função:
   
   
 
Testar a função
Antes de integrar a função com o API Gateway, confirme se a implantação da função ocorreu com êxito. Use o console do Lambda para enviar um evento de teste para a função.
- 
        
Na página do console do Lambda da função, escolha a guia Testar.
           
           
         - 
        
Role para baixo até a seção JSON do evento e substitua o evento padrão pelo que se segue. Esse evento corresponde à estrutura esperada pela função do Lambda.
{ "operation": "echo", "payload": { "somekey1": "somevalue1", "somekey2": "somevalue2" } } - 
        
Escolha Testar.
 - 
        
Em Execução da função: sucesso, expanda Detalhes. Você deverá ver a seguinte resposta:
{ "somekey1": "somevalue1", "somekey2": "somevalue2" } 
Criar uma API REST usando o API Gateway
Nesta etapa, você cria a API REST do API Gateway que usará para invocar a função do Lambda.
Para criar a API
- 
        
Abra o console do API Gateway
.  - 
        
Selecione Create API (Criar API).
 - 
        
Na caixa do API REST, escolha Construir.
 - 
        
Em Detalhes da API, deixe a opção Nova API selecionada e, em Nome da API, insira
DynamoDBOperations. - 
        
Selecione Criar API.
 
Criação de um recurso na API REST
Para adicionar um método HTTP à API, primeiro é necessário criar um recurso no qual esse método possa operar. Aqui você cria o recurso para gerenciar a tabela do DynamoDB.
Para criar o recurso
- 
        
No Console do Gateway da API
, na página Recursos da API, escolha Criar recurso.  - 
        
Em Detalhes do recurso, em Nome do recurso, insira
DynamoDBManager. - 
        
Escolha Create Resource (Criar recurso).
 
Criação de um método HTTP POST
Nesta etapa, você cria um método (POST) para o recurso DynamoDBManager. Você vincula esse método POST à função do Lambda para que, quando o método receber uma solicitação HTTP, o API Gateway invoque sua função do Lambda.
nota
 Para a finalidade deste tutorial, um método HTTP (POST) será usado para invocar uma única função do Lambda que executa todas as operações em sua tabela do DynamoDB. Em uma aplicação real, a prática recomendada é usar diferentes funções do Lambda e métodos HTTP para cada operação. Para obter mais informações, consulte The Lambda monolith
Para criar o método POST
- 
          
Na página Recursos da API, certifique-se de que o recurso
/DynamoDBManageresteja realçado. Em seguida, no painel Métodos, escolha Criar método. - 
          
Em Tipo de método, escolha POST.
 - 
          
Em Tipo de integração, mantenha a opção Função do Lambda selecionada.
 - 
          
Em Função do Lambda, escolha o nome do recurso da Amazon (ARN) para sua função (
LambdaFunctionOverHttps). - 
          
Escolha Criar método.
 
Criar uma tabela do DynamoDB
Crie uma tabela do DynamoDB em branco na qual a função do Lambda executará as operações de CRUD.
Para criar uma tabela do DynamoDB
- 
        
Escolha Create table.
 - 
        
Em Detalhes da tabela, faça o seguinte:
- 
            
Em Table name (Nome da tabela), insira
lambda-apigateway. - 
            
Para a Chave de partição, insira
ide mantenha o tipo de dados definido como String. 
 - 
            
 - 
        
Em Table settings (Configurações da tabela), mantenha Default settings (Configurações padrões).
 - 
        
Escolha Create table.
 
Teste da integração do API Gateway, do Lambda e do DynamoDB
Agora está tudo pronto para que ocorra o teste da integração do método de API do API Gateway com a função do Lambda e a tabela do DynamoDB. Ao usar o console do API Gateway, você envia solicitações diretamente para o método POST usando a função de teste do console. Nesta etapa, primeiro você usa uma operação create para adicionar um novo item à tabela do DynamoDB e, em seguida, usa uma operação update para modificar o item.
Teste 1: para criar um novo item na tabela do DynamoDB
- 
        
No API Gateway console
(Console do API Gateway), escolha a sua API ( DynamoDBOperations). - 
        
No recurso
DynamoDBManager, escolha o método POST. - 
        
Selecione a guia Testar. Talvez seja necessário selecionar o botão de seta para a direita para mostrar a guia.
 - 
        
Em Método de teste, mantenha as opções Strings de consulta e Cabeçalhos vazias. Em Corpo da solicitação, cole o seguinte JSON:
{ "operation": "create", "payload": { "Item": { "id": "1234ABCD", "number": 5 } } } - 
        
Escolha Testar.
Os resultados que são exibidos quando o teste é concluído devem mostrar status
200. Esse código de status indica que a operaçãocreateocorreu com êxito.Para confirmar, verifique se a tabela do DynamoDB passou a conter o novo item.
 - 
        
Abra a página Tables
(Tabelas) do console do DynamoDB e escolha a tabela lambda-apigateway. - 
        
Escolha Explore table items (Explorar itens da tabela). No painel Itens retornados, você verá um item com o id
1234ABCDe o número5. Exemplo:
           
           
         
Teste 2: para atualizar o item na tabela do DynamoDB
- 
        
No Console do API Gateway
, retorne para a guia Teste do seu método POST.  - 
        
Em Método de teste, mantenha as opções Strings de consulta e Cabeçalhos vazias. Em Corpo da solicitação, cole o seguinte JSON:
{ "operation": "update", "payload": { "Key": { "id": "1234ABCD" }, "UpdateExpression": "SET #num = :newNum", "ExpressionAttributeNames": { "#num": "number" }, "ExpressionAttributeValues": { ":newNum": 10 } } } - 
        
Escolha Testar.
Os resultados que são exibidos quando o teste é concluído devem mostrar status
200. Esse código de status indica que a operaçãoupdateocorreu com êxito.Para confirmar, verifique se o item na tabela do DynamoDB foi modificado.
 - 
          
Abra a página Tables
(Tabelas) do console do DynamoDB e escolha a tabela lambda-apigateway. - 
      
Escolha Explore table items (Explorar itens da tabela). No painel Itens retornados, você verá um item com o id
1234ABCDe o número10.
           
           
         
Implantar a API
Para que um cliente chame a API, você deve criar uma implantação e um estágio associado. Um estágio representa um snapshot da API, incluindo seus métodos e integrações.
Para implantar a API
- 
        
Abra a página APIs do API Gateway console
(Console do API Gateway) e escolha a API DynamoDBOperations. - 
        
Na página Recursos da sua API, escolha Implantar API.
 - 
        
Em Estágio, escolha *Novo estágio* e, em seguida, em Nome do estágio, insira
test. - 
        
Escolha Implantar.
 - 
        
No painel Detalhes do estágio copie o URL de invocação. Você usará isso na próxima etapa para invocar a função usando uma solicitação HTTP.
 
Uso de curl para invocar a função usando solicitações HTTP
Agora é possível invocar a função do Lambda ao emitir uma solicitação HTTP para a API. Nesta etapa, você criará um novo item na tabela do DynamoDB e realizará as operações de leitura, atualização e exclusão nesses itens.
Para criar um item na tabela do DynamoDB usando curl
- 
        
Execute o comando
curlusando o URL de invocação que você copiou na etapa anterior. Este comando usa as seguintes opções:- 
            
-H: adiciona um cabeçalho à solicitação. Aqui, especifica o tipo de conteúdo como JSON. - 
            
-d: envia dados no corpo da solicitação. Essa opção usa um método HTTP POST por padrão. 
Se a operação foi bem-sucedida, você deverá ver uma resposta retornada com um código 200 de status de HTTP.
 - 
            
 - 
        
Você também pode usar o console do DynamoDB para confirmar que o item novo está na sua tabela fazendo o seguinte:
- 
            
Abra a página Tables
(Tabelas) do console do DynamoDB e escolha a tabela lambda-apigateway. - 
            
Escolha Explore table items (Explorar itens da tabela). No painel Itens retornados, você verá um item com o id
5678EFGHe o número15. 
 - 
            
 
Para ler o item na tabela do DynamoDB usando curl
- 
        
Execute o comando
curla seguir para ler o valor do item que você acabou de criar. Use seu próprio URL de invocação.Você deve ver uma saída como uma das seguintes, dependendo de ter escolhido o código da função em Node.js ou em Python:
 
Para atualizar o item na tabela do DynamoDB usando curl
- 
        
Execute o comando
curla seguir para atualizar o item que você acabou de criar alterando o valor denumber. Use seu próprio URL de invocação. - 
        
Para confirmar que o valor de
numberpara p item foi atualizado, execute outro comando de leitura: 
Para excluir o item na tabela do DynamoDB usando curl
- 
        
Execute o comando
curla seguir para excluir o item que você acabou de criar. Use seu próprio URL de invocação. Confirme se a operação de exclusão ocorreu com êxito. No painel Itens retornados da página Explorar itens do console do DynamoDB, verifique se o item com o id
5678EFGHnão está mais na tabela.
Limpeza dos recursos (opcional)
Agora você pode excluir os recursos criados para este tutorial, a menos que queira mantê-los. Excluindo os recursos da AWS que você não está mais usando, você evita cobranças desnecessárias em sua Conta da AWS.
Como excluir a função do Lambda
- 
    
Abra a página Functions
(Funções) no console do Lambda.  - 
    
Selecione a função que você criou.
 - 
    
Selecione Ações, Excluir.
 - 
    
Digite
confirmno campo de entrada de texto e escolha Delete (Excluir). 
Para excluir a função de execução
- 
    
Abra a página Roles
(Funções) no console do IAM.  - 
    
Selecione a função de execução que você criou.
 - 
    
Escolha Excluir.
 - 
    
Insira o nome do perfil no campo de entrada de texto e escolha Delete (Excluir).
 
Para excluir a API
- 
    
Abra a página APIs
do console do API Gateway.  - 
    
Selecione a API que você criou.
 - 
    
Selecione Ações, Excluir.
 - 
    
Escolha Excluir.
 
Para excluir uma tabela do DynamoDB
- 
    
Abra a página Tables
(Tabelas) no console do DynamoDB.  - 
    
Selecione a tabela que você criou.
 - 
    
Escolha Excluir.
 - 
    
Digite
deletena caixa de texto. - 
    
Selecione Delete table (Excluir tabela).