¿Cómo puedo transferir datos a través de una API de REST de puerta de enlace API a una función Lambda backend o a un punto de conexión HTTP?

Última actualización: 26/08/2022

Quiero que mi API de REST de Amazon API Gateway transfiera datos a una función AWS Lambda de backend y a un punto de conexión HTTP. ¿Cómo puedo hacerlo?

Descripción corta

Para configurar una API de REST de manera que transfiera datos a una función Lambda de backend, utilice una integración personalizada de Lambda.

Para transferir parámetros de cadenas de consulta a un punto de conexión HTTP, utilice una integración personalizada HTTP.

Importante: Asegúrese de que los datos de entrada se proporcionan como carga útil de la solicitud de integración. Es una práctica recomendada utilizar una plantilla de mapeo para proporcionar la carga útil. Para obtener más información, consulte Asignación de cargas útiles de solicitud y respuesta entre el método y la integración.

Resolución

Cree una función Lambda para manejar encabezados personalizados desde su API puerta de enlace API

1.    Abra la consola de Lambda.

2.    Elija Create function (Crear función). La página Create function (Crear función) se abre con la opción Author from scratch (Crear desde cero) seleccionada.

3.    En el panel de Basic information (Información básica), haga lo siguiente: En Function name (Nombre de la función), introduzca un nombre que describa el propósito de la función. Por ejemplo: MapTemplate (Plantilla de mapeo). Para Runtime (Tiempo de ejecución), elija Python 3.9.

4.    Para Permissions (Permisos), expanda Change default execution role (Cambiar el rol de ejecución predeterminado).

5.    Elija Use an existing role (Usar un rol existente). Aparece una lista desplegable de los roles existentes.

6.    En Existing role (Rol existente), elija el rol de ejecución de Lambda que creó anteriormente.

7.    Elija Create function (Crear función).

8.    En la pestaña Code (Código), en Code source (Código fuente), sustituya el código de lambda_function.py por el siguiente:

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.    Elija Deploy (Implementar).

Para más información, consulte Creación de funciones de Lambda con Python.

Transferencia de datos a la función Lambda del backend o al punto de conexión HTTP

1.    Abra la consola de API Gateway.

2.    Elija Create API (Crear API).

-o bien-

(Si es la primera vez que utiliza la puerta de enlace API) Aparece una página que le presenta las características del servicio. En REST API (API de REST), elija Build (Crear). Cuando aparezca la ventana emergente Create Example API (Crear API de ejemplo), elija OK (Aceptar).

3.    En Choose an API type (Elegir un tipo de API), en el panel de REST API (API REST), elija Build (Crear).

4.    En Create new API (Crear una API nueva), elija New API (Nueva API).

5.    En Settings (Configuración), haga lo siguiente: Para API name (Nombre de la API), introduzca un nombre que describa el propósito de la API. Por ejemplo: MappingTemplateTutorial. (Opcional) En Description (Descripción), introduzca una breve descripción del propósito de la API. Por ejemplo, Enviar datos a la función Lambda de backend/punto de conexión HTTP. En Endpoint Type (Tipo de punto de conexión), elija Regional (Regional).

6.    Elija Create API (Crear API).

Configurar los recursos de la API y la plantilla de mapeo del cuerpo

1.    En la consola de API Gateway, elija el nombre de la API que creó en el paso anterior. Se abre la página Resources (Recursos) de su API.

2.    En la página Resources (Recursos), elija Actions (Acciones). Luego, elija Create Resource (Crear recurso).

3.    En el panel New Child Resource (Nuevo recurso secundario), en Configure as proxy resource (Configurar como recurso proxy), seleccione el icono de marca de verificación y, a continuación, elija Create Resource (Crear recurso).

4.    En la página/{proxy+} - ANY - Setup, haga lo siguiente:

  • En Integration type (Tipo de integración), elija Lambda Function Proxy (Proxy de función Lambda).
  • En Lambda Region (Región de Lambda), elija la región de AWS que aloja su función.
  • En Lambda Function (Función Lambda), introduzca el nombre de la función MappingTemplateTutorial.

Elija Save (Guardar). Aparecerá la ventana emergente Add Permission to Lambda Function (Agregar permiso a función Lambda) seleccione OK (Aceptar).

7.    En la página/{proxy+} - ANY - Method Execution, seleccione Integration Request (Solicitud de integración).

8.    En la página /{proxy+} - ANY - Integration Request (Solicitud de integración), haga lo siguiente:

  • Desactive la casilla Use Lambda Proxy integration (Usar la integración de Proxy Lambda). Aparecerá una ventana emergente para Switch to Lambda integration (Cambiar a la integración de Lambda).
  • En la ventana emergente, elija OK. (Aceptar) Aparecerá la ventana emergente Add Permission to Lambda Function (Agregar permiso a función Lambda). En la ventana emergente, elija OK (Aceptar)
  • Expanda Mapping Templates (Plantillas de mapeo).
  • En Request body passthrough (Paso directo del cuerpo de la solicitud), elija When there are no templates defined (recommended) (Cuando no hay plantillas definidas (recomendado)).

Elija Add mapping template (Agregar plantilla de mapeo). En Content-Type (Tipo de contenido), ingrese application/json. A continuación, elija el icono de la marca de verificación.

9.    Elija la lista desplegable Generate template (Generar plantilla) y, a continuación, seleccione Method Request passthrough (Método de solicitud).

10.    En el editor de plantillas de mapeo, introduzca lo siguiente:

##  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.    Elija Save (Guardar).

12.    Elija Method Execution (Ejecución del método) para volver a la página / {proxy+} - ANY - Method Execution.

13.    Elija Method Response (Respuesta de método) para configurar una respuesta de método válida.

14.    En la página /{proxy+} - ANY - Method Response, elija Add Response (Agregar respuesta).

15.    Para el código de estado HTTP, introduzca 200. A continuación, elija el icono de la marca de verificación.

16.    Elija Actions (Acciones) para Deploy API (Implementar API) en una fase.

Implementar la API en una nueva fase

1.    Siga las instrucciones de Implementación de una API de REST en una etapa. Para obtener más información, consulte Configuración de una etapa con la consola de API Gateway.

2.    En el panel Stage Editor (Editor de la fase), copie la Invoke URL (URL de invocación) al portapapeles.

Ejemplo de URL de invocación de la API de REST

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

Prueba de configuración

Para confirmar que todos los datos se transfieren a la función Lambda del backend o al punto de conexión HTTP de la API, ejecute el siguiente comando curl:

Importante: Sustituya https://restApiId.execute-api.region.amazonaws.com/stageName por la URL de invocación de su 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"}'

El resultado del comando incluye todos los datos recibidos por la función Lambda del backend al cliente. Puede actualizar el mensaje de salida para su entorno.

Nota: Para instalar curl en Windows, consulte Downloads (Descargas) en el sitio web de Git. Para más información sobre curl, consulte el sitio web del proyecto curl.