Como faço para transmitir dados por meio de uma API REST do API Gateway para uma função do Lambda de backend ou endpoint HTTP?

7 minuto de leitura
0

Quero que minha API REST do Amazon API Gateway transmita dados para uma função de backend do AWS Lambda e um endpoint HTTP. Como posso fazer isso?

Breve descrição

Para configurar uma API REST para transmitir dados para uma função do Lambda de backend, use uma integração personalizada do Lambda.

Para transmitir parâmetros de string de consulta para um endpoint HTTP, use uma integração personalizada HTTP.

Importante: certifique-se de que os dados de entrada sejam fornecidos como a carga útil da solicitação de integração. É uma prática recomendada usar um modelo de mapeamento para fornecer a carga útil. Para obter mais informações, consulte Mapear cargas úteis de solicitação e resposta entre método e integração.

Resolução

Criar uma função Lambda para tratar cabeçalhos personalizados de sua API do API Gateway

1.    Abra o console do Lambda.

2.    Escolha Create function (Criar função). É exibida a página Create function (Criar função) com a opção Author from scratch (Autor do zero) selecionada.

3.    No painel Informações básicas, faça o seguinte: em Function name (Nome da função), insira um nome que descreva a finalidade da função. Por exemplo: MapTemplate. Para Runtime (Tempo de execução), escolha Python 3.9.

4.    Em Permissions (Permissões), expanda Change default execution role (Alterar função de execução padrão).

5.    Escolha Use an existing role (Usar uma função existente). Será exibida uma lista suspensa das funções existentes.

6.    Em Existing role (Função existente), escolha a função de execução do Lambda que você criou anteriormente.

7.    Escolha Create function (Criar função).

8.    Na guia Code (Código), em Code source (Fonte do código), substitua o código em lambda_function.py pelo seguinte:

import json

def lambda_handler(event, context):
    print(event)
    return {
        'statusCode': 200,
        'body': json.dumps(event) # returning the data sent to backend lambda function as API response.
    }

9.    Escolha Deploy (Implantar).

Para obter mais informações, consulte Criar funções Lambda com Python.

Transmitir dados para a função Lambda de backend ou endpoint HTTP

1.    Abra o console do API Gateway.

2.    Escolha Create API (Criar API).

-ou-

(Se esta for a primeira vez que você está usando o API Gateway) É exibida uma página que apresenta os recursos do produto. Em REST API, escolha Build (Criar). Quando a janela pop-up Create Example API (Criar API de exemplo) aparecer, escolha OK.

3.    Em Choose an API type (Escolher um tipo de API), no painel REST API, escolha Build (Criar).

4.    Em Create new API (Criar nova API), escolha New API (Nova API).

5.    Em Settings (Configurações), faça o seguinte: em API name (Nome da API), insira um nome que descreva a finalidade da API. Por exemplo: MappingTemplateTutorial. (Opcional) Em Description (Descrição), insira uma breve descrição do objetivo de sua API. Por exemplo, Enviar dados para a função Lambda de backend/endpoint HTTP. Em Endpoint Type (Tipo de endpoint), escolha Regional.

6.    Escolha Create API (Criar API).

Configurar os recursos, o ponto de integração e o modelo de mapeamento de corpo da sua API

1.    No console do API Gateway, escolha o nome da API que você criou na etapa anterior. A página Resources (Recursos) de sua API é exibida.

2.    Na página Resources (Recursos), escolha Actions (Ações). Escolha Create Resource (Criar recurso).

3.    No painel New Child Resource (Novo recurso filho), para Configure as proxy resource (Configurar como recurso proxy), selecione o ícone de marca de seleção e escolha Create Resource (Criar recurso).

4.    Na página /{proxy+} - ANY - Setup (QUALQUER - Configuração), faça o seguinte:

  • Em Integration Type (Tipo de integração), escolha Lambda Function Proxy (Proxy da função Lambda).
  • Em Lambda Region (Região do Lambda), escolha a região da AWS que hospeda sua função.
  • Em Lambda Function (Função do Lambda), insira o nome da função MappingTemplateTutorial.

Escolha Save (Salvar). Uma janela pop-up Add Permission to Lambda Function (Adicionar permissão à função do Lambda) é exibida. Escolha OK.

7.    Na página / {proxy+} - ANY - Method Execution (QUALQUER - Execução do método), escolha Integration Request (Solicitação de integração).

8.    Na página / {proxy+} - ANY - Integration Request (QUALQUER - Solicitação de integração), faça o seguinte:

  • Desmarque a caixa do ícone Use Lambda Proxy integration (Usar integração do proxy do Lambda). Um pop-up de Switch to Lambda integration (Alternar para integração com o Lambda) é exibido.
  • Na janela pop-up, escolha OK. Uma janela pop-up Add Permission to Lambda Function (Adicionar permissão à função do Lambda) é exibida. Na janela pop-up, escolha OK.
  • Expanda Mapping Templates (Modelos de mapeamento).
  • Em Request body passthrough (Passthrough do corpo da solicitação), escolha When there are no templates defined (recommended) (Quando não houver modelos definidos - recomendado).

Escolha Add mapping template (Adicionar modelo de mapeamento). Em Content-Type (Tipo de conteúdo), insira application/json. Depois, escolha o ícone de sinal de visto.

9.    Escolha a lista suspensa Generate template (Gerar modelo) e, em seguida, escolha Method Request passthrough (Passagem de solicitação de método).

10.    No editor de modelos de mapeamento, insira o seguinte:

##  See http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html
#set($allParams = $input.params())
{
"method" : "$context.httpMethod", ## API method
"authcontext" : "$context.authorizer.stringkey", ## Optional output from Lambda Authorizers
## passthrough body
"body-json" : $input.json('$'),
## passthrough headers, querystrings and path parameters
"params" : {
#foreach($type in $allParams.keySet())
    #set($params = $allParams.get($type))
"$type" : {
    #foreach($paramName in $params.keySet())
    "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
        #if($foreach.hasNext),#end
    #end
}
    #if($foreach.hasNext),#end
#end
}
}

11.    Escolha Save (Salvar).

12.    Escolha Method Execution (Execução do método) para retornar à página / {proxy+} - ANY - Method Execution (QUALQUER - Execução do método).

13.    Escolha Method Response (Resposta do método) para configurar uma resposta válida do método.

14.    Na página /{proxy+} - ANY - Method Response (QUALQUER - Resposta do método), escolha Add Response (Adicionar resposta).

15.    Para o código de status HTTP, insira 200. Depois, escolha o ícone de sinal de visto.

16.    Escolha Actions (Ações) para Deploy API (Implantar a API) em um estágio.

Implantar sua API em uma nova etapa

1.    Siga as instruções em Implantar uma API REST a uma etapa. Para obter mais informações, consulte Configurar uma etapa usando o console do API Gateway.

2.    No painel Stage Editor (Editor de etapas), copie Invoke URL (URL de invocação) para sua área de transferência.

Exemplo de URL de invocação da API REST

https://1a2bc3d456.execute-api.us-east-1.amazonaws.com/stage

Teste sua configuração

Para confirmar se todos os dados estão sendo transmitidos à função do Lambda de backend ou ao endpoint HTTP pela sua API, execute o seguinte comando curl:

Importante: substitua https://restApiId.execute-api.region.amazonaws.com/stageName pela URL de invocação de sua API.

curl -i --location --request POST 'https://1a2bc3d456.execute-api.us-east-1.amazonaws.com/stage/path1/path2?query1=querystring1&query2=querystring2' --header 'header1: value1' --header 'header2: value2' --header 'Content-Type: application/json' --data-raw '{"keybody":"valuebody"}'

A saída do comando inclui todos os dados recebidos pela função do Lambda de backend para o cliente. Você pode atualizar a mensagem de saída para o seu ambiente.

Observação: para instalar curl no Windows, consulte Downloads no site do Git. Para mais informações sobre curl, consulte o site do projeto curl.


Informações relacionadas

Tutorial: Criar uma API REST do API Gateway com integração não proxy com o Lambda

Configurar transformações de dados para APIs REST

Como passo cabeçalhos personalizados pelo API Gateway para uma função do Lambda usando integração personalizada do Lambda?