Configuración de una integración de proxy de Lambda con transmisión de respuesta de carga útil en API Gateway
Puede transmitir la respuesta de una función de Lambda para mejorar el rendimiento del tiempo hasta el primer byte (TTFB) y devolver respuestas parciales al cliente a medida que estén disponibles. API Gateway requiere que utilice la API de Lambda InvokeWithResponseStream para invocar la función de Lambda. API Gateway pasa un objeto de evento a la función de Lambda. La función de Lambda del backend analiza los datos de la solicitud entrante para determinar la respuesta que devuelve. Para que API Gateway transmita la salida de Lambda, la función de Lambda debe producir el formato que requiere API Gateway.
Diferencias en las integraciones de proxy de Lambda entre el modo de transferencia de respuesta en flujo y en búfer
La siguiente lista describe las diferencias entre una integración de proxy de Lambda y una integración de proxy de Lambda para la transmisión de respuestas:
-
API Gateway usa la API InvokeWithResponseStream para invocar la integración del proxy de Lambda para la transmisión de respuestas. Esto da como resultado un URI diferente, que es el siguiente:
arn:aws:apigateway:us-west-1:lambda:path/2021-11-15/functions/arn:aws:lambda:us-west-1:111122223333:function:my-function-name/response-streaming-invocationsEste ARN utiliza una fecha diferente para la versión de la API y una acción de servicio diferente en comparación con la integración del proxy de Lambda.
Si utiliza la consola de API Gateway para la transmisión de respuestas, la consola utilizará el URI correcto para usted.
-
En una integración de proxy de Lambda, API Gateway envía la respuesta al cliente solo después de recibir la respuesta completa de Lambda. En una integración de proxy de Lambda para la transmisión de respuestas, API Gateway inicia la transmisión de carga útil después de recibir los metadatos y el delimitador válidos de Lambda.
-
La integración de proxy de Lambda para la transmisión de respuestas utiliza el mismo formato de entrada que la integración de proxy, pero requiere un formato de salida diferente.
Formato de integración de proxy de Lambda para transmisión de respuestas
Cuando API Gateway invoca una función de Lambda con transmisión de respuestas, el formato de entrada es el mismo que el formato de entrada de una función de Lambda para la integración de proxy. Para obtener más información, consulte Formato de entrada de una función de Lambda para la integración de proxy.
Cuando Lambda transmite una respuesta a API Gateway, la respuesta debe seguir el siguiente formato. Este formato utiliza un delimitador para separar el JSON de los metadatos y la carga útil sin procesar. En este caso, los datos de carga útil se transmiten tal como los transmite la función de Lambda de transmisión:
{ "headers": {"headerName": "headerValue", ...}, "multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... }, "cookies" : ["cookie1", "cookie2"], "statusCode":httpStatusCode}<DELIMITER>PAYLOAD1 | PAYLOAD2 | PAYLOAD3
En la salida:
-
Las claves
headers,multiValueHeaders,cookiesystatusCodepueden no estar especificadas si no se van a devolver más encabezados de respuesta. -
La clave
headerssolo puede contener encabezados de un solo valor. -
La salida espera que los encabezados contengan
Transfer-Encoding: chunkedoContent-length:. Si la función no devuelve ninguno de estos encabezados, API Gateway agreganumberTransfer-Encoding: chunkedal encabezado de respuesta. -
La clave
multiValueHeaderspuede contener encabezados de varios valores y encabezados de un solo valor. Puede utilizar la clavemultiValueHeaderspara especificar todos los encabezados adicionales, incluidos los que solo contienen un valor. -
Si especifica valores para
headersymultiValueHeaders, API Gateway los combina en una sola lista. Si se especifica el mismo par de clave-valor en ambos, solo los valores demultiValueHeadersaparecerán en la lista combinada. -
Los metadatos deben ser un JSON válido. Solo se admiten las claves de
headers,multiValueHeaders,cookiesystatusCode. -
Debe proporcionar un delimitador después del JSON de metadatos. El delimitador debe tener 8 bytes nulos y debe aparecer dentro de los primeros 16 KB de datos de transmisión.
-
API Gateway no requiere un formato específico para la carga útil de respuesta de método.
Si utiliza una URL de función para transmitir la función de Lambda, debe modificar la entrada y la salida de la función de Lambda para cumplir estos requisitos.
Si el resultado de la función de Lambda no cumple con los requisitos de este formato, es posible que API Gateway siga invocando la función de Lambda. En la siguiente tabla se muestran las combinaciones de la configuración de las solicitudes de integración de API y el código de función de Lambda que admite API Gateway. Esto incluye las combinaciones compatibles con el modo de transferencia de respuestas en búfer.
| Modo de transferencia de respuesta | El código de función se ajusta al formato requerido | API de invocación de Lambda | Compatible con API Gateway |
|---|---|---|---|
|
De streaming |
Sí |
Sí. API Gateway transmite la respuesta. |
|
|
De streaming |
No |
No. API Gateway invoca la función de Lambda y devuelve una respuesta de error 500. |
|
|
De streaming |
Sí |
No. API Gateway no admite esta configuración de integración. |
|
|
De streaming |
No |
No. API Gateway no admite esta configuración de integración. |
|
|
Almacenado en búfer |
Sí |
No. API Gateway no admite esta configuración de integración. |
|
|
Almacenado en búfer |
No |
No. API Gateway no admite esta configuración de integración. |
|
|
Almacenado en búfer |
Sí |
API Gateway devuelve los encabezados HTTP y el código de estado, pero no el cuerpo de la respuesta. |
|
|
Almacenado en búfer |
No |
Sí. Esta es una integración de proxy de Lambda. Para obtener más información, consulte Integración de proxy de Lambda. |