

# Transmisión de la respuesta de integración para las integraciones de proxy en API Gateway
<a name="response-transfer-mode"></a>

Puede configurar la integración de proxy para controlar cómo API Gateway devuelve la respuesta de integración. De forma predeterminada, API Gateway espera a recibir la respuesta completa antes de iniciar la transmisión. Sin embargo, si configura el modo de transferencia de respuestas de la integración en `STREAM`, API Gateway no espera a que se calcule completamente la respuesta para enviarla al cliente. La transmisión de respuestas funciona para todos los tipos de puntos de conexión de la API de REST.

Utilice la transmisión de respuestas para los siguientes casos de uso:
+ Reduzca el tiempo para el primer byte (TTFB) para aplicaciones de IA generativa como los chatbots.
+ Transmita archivos de imágenes, vídeos o música de gran tamaño sin utilizar una URL prefirmada de S3.
+ Realice operaciones de larga duración y, al mismo tiempo, informe sobre el progreso incremental, como los eventos enviados por el servidor (SSE).
+ Supere el límite de carga útil de respuesta de 10 MB de API Gateway.
+ Supera el límite de 29 segundos de API Gateway sin solicitar un aumento del tiempo de espera de la integración.
+ Reciba una carga útil binaria sin configurar los tipos de medios binarios.

## Consideraciones sobre la transmisión de la carga útil de respuesta
<a name="response-transfer-mode-considerations"></a>

Es posible que las siguientes consideraciones afecten al uso de la transmisión de la carga útil de respuesta:
+ Solo puede utilizar la transmisión de carga útil de respuesta para tipos de integración `HTTP_PROXY` o `AWS_PROXY`. Esto incluye las integraciones de proxy de Lambda y las integraciones privadas que utilizan integraciones de `HTTP_PROXY`.
+ La configuración predeterminada del modo de transferencia es `BUFFERED`. Para utilizar la transmisión de respuestas, debe cambiar el modo de transferencia de respuesta a `STREAM`.
+ La transmisión de respuestas solo es compatible con las API de REST.
+ La transmisión de solicitudes es incompatible.
+ Puede transmitir su respuesta durante 15 minutos como máximo.
+ Las transmisiones están sujetas a tiempos de espera por inactividad. Para puntos de conexión regionales o privados, el tiempo de espera es de 5 minutos. Para puntos de conexión optimizados para bordes, el tiempo de espera es de 30 segundos.
+ Si utiliza la transmisión de respuesta para una API de REST regional con su propia distribución de CloudFront, puede lograr un tiempo de espera por inactividad de más de 30 segundos lo que aumenta el tiempo de espera de respuesta de la distribución de CloudFront. Para obtener más información, consulte [Tiempo de espera de respuesta](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesOrigin.html#DownloadDistValuesOriginResponseTimeout).
+ Cuando el modo de transferencia de respuestas está configurado en `STREAM`, API Gateway no admite características que requieran almacenar en búfer toda la respuesta de integración. Por este motivo, las siguientes características no son compatibles con la transmisión de respuestas:
  + Almacenamiento en caché de puntos de conexión
  + Codificación de contenido. Si desea comprimir su respuesta de integración, hágalo en su integración.
  + Transformación de la respuesta con VTL
+ Dentro de cada respuesta de transmisión, los primeros 10 MB de carga útil de respuesta no están sujetos a ninguna restricción de ancho de banda. Los datos de carga útil de respuesta que superen los 10 MB están restringidos a 2 MB/s.
+ Cuando la conexión entre el cliente y API Gateway o entre API Gateway y Lambda se cierra debido al tiempo de espera, es posible que la función de Lambda continúe ejecutándose. Para obtener más información, consulte [Configuración del tiempo de espera de la función de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).
+ La transmisión de respuestas tiene un costo. Para obtener más información, consulte [Precio de API Gateway](https://aws.amazon.com/api-gateway/pricing/).

# Configuración de una integración de proxy HTTP con transmisión de respuesta de carga útil en API Gateway
<a name="response-streaming-http"></a>

Cuando configura la transmisión de la carga útil de respuesta, especifica el modo de transferencia de respuesta en la solicitud de integración del método. Estos ajustes se configuran en la solicitud de integración para controlar el comportamiento de API Gateway antes y durante la respuesta de integración. Cuando utiliza la transmisión de respuestas, puede configurar el tiempo de espera de la integración en un máximo de 15 minutos.

Cuando utiliza la transmisión de respuestas de carga útil con una integración de `HTTP_PROXY`, API Gateway no enviará el código de estado de respuesta HTTP ni ningún encabezado de respuesta HTTP hasta que reciba todos los encabezados por completo.

## Creación de una integración de proxy HTTP con transmisión de respuesta de carga útil
<a name="response-streaming-http-create"></a>

El siguiente procedimiento muestra cómo importar una nueva API con el valor `responseTransferMode` establecido en `STREAM`. Si tiene una API de integración existente y desea modificar `responseTransferMode`, consulte [Actualización del modo de transferencia de respuestas para una integración de proxy HTTP](#response-streaming-http-update).

------
#### [ Consola de administración de AWS ]

**Creación de una integración de proxy HTTP con transmisión de respuesta de carga útil**

1. Inicie sesión en la consola de API Gateway en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija una API de REST.

1. Elija **Crear recurso**.

1. En **Nombre del recurso**, escriba **streaming**.

1. Elija **Crear recurso**.

1. Con el recurso **/streaming** seleccionado, elija **Crear método**.

1. En **Tipo de método**, elija **CUALQUIERA**.

1. Para **Tipo de integración**, elija **HTTP**.

1. Elija **Integración de proxy HTTP**.

1. Para el **modo de transferencia de respuesta**, elija **Flujo**.

1. Para el **método HTTP**, elige un método.

1. Para **URL del punto de conexión**, ingrese un punto de conexión de integración. Asegúrese de elegir un punto de conexión que genere una gran carga útil para que se la transmita.

1. Elija **Crear método**.

Después de crear el método, implemente la API.

**Para implementar su API**

1. Elija **Implementar API**.

1. En **Etapa**, seleccione **Nueva etapa**.

1. En **Stage name (Nombre de etapa)**, escriba **prod**.

1. (Opcional) En **Description (Descripción)**, introduzca una descripción.

1. Elija **Implementar**.

------
#### [ AWS CLI ]

**Creación de una nueva API con transmisión de respuesta de carga útil**

1. Copie el siguiente archivo de API abierto y guárdelo como `ResponseStreamDemoSwagger.yaml`. En este archivo, `responseTransferMode` se establece en `STREAM`. El punto de conexión de integración está configurado en `https://example.com`, pero le recomendamos que lo modifique por un punto de conexión que genere una gran carga útil para que se la transmita.

   ```
   openapi: "3.0.1"
   info:
     title: "ResponseStreamingDemo"
     version: "2025-04-28T17:28:25Z"
   servers:
   - url: "{basePath}"
     variables:
       basePath:
         default: "prod"
   paths:
     /streaming:
       get:
         x-amazon-apigateway-integration:
           httpMethod: "GET"
           uri: "https://example.com"
           type: "http_proxy"
           timeoutInMillis: 900000
           responseTransferMode: "STREAM"
   ```

1. Use el comando `import-rest-api` siguiente para importar la definición de OpenAPI:

   ```
   aws apigateway import-rest-api \
     --body 'fileb://~/ResponseStreamDemoSwagger.yaml' \
     --parameters endpointConfigurationTypes=REGIONAL \
     --region us-west-1
   ```

1. Use el comando `create-deployment` siguiente para implementar la nueva API en una etapa:

   ```
   aws apigateway create-deployment \
     --rest-api-id a1b2c3 \
     --stage-name prod \
     --region us-west-1
   ```

------

## Actualización del modo de transferencia de respuestas para una integración de proxy HTTP
<a name="response-streaming-http-update"></a>

El procedimiento siguiente muestra cómo actualizar el modo de transferencia de respuestas para una integración de proxy HTTP.

------
#### [ Consola de administración de AWS ]

**Actualización del modo de transferencia de respuestas para una integración de proxy HTTP**

1. Inicie sesión en la consola de API Gateway en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija una API de REST.

1. Elija un método.

1. En la pestaña **Solicitud de integración**, en **Configuración de la solicitud de integración**, seleccione **Editar**.

1. Para el **modo de transferencia de respuesta**, elija **Flujo**.

1. Seleccione **Save**.

Después de actualizar el método, implemente la API.

**Para implementar su API**

1. Elija **Implementar API**.

1. En **Etapa**, seleccione **Nueva etapa**.

1. En **Stage name (Nombre de etapa)**, escriba **prod**.

1. (Opcional) En **Description (Descripción)**, introduzca una descripción.

1. Elija **Implementar**.

------
#### [ AWS CLI ]

El comando `update-integration` siguiente actualiza el modo de transferencia de una integración de `BUFFERED` a `STREAM`. Para cualquier API existente, el modo de transferencia de respuesta para todas las integraciones se establece en `BUFFERED`.

```
aws apigateway update-integration \
 --rest-api-id a1b2c3 \
 --resource-id aaa111 \
 --http-method GET \
 --patch-operations "op='replace',path='/responseTransferMode',value=STREAM" \
 --region us-west-1
```

Tiene que volver a implementar la API para que los cambios surtan efecto. Si personalizó el tiempo de espera de la integración, este valor de tiempo de espera se elimina, ya que API Gateway transmite la respuesta durante un máximo de 5 minutos.

El comando `update-integration` siguiente actualiza el modo de transferencia de una integración de `STREAM` a `BUFFERED`:

```
aws apigateway update-integration \
 --rest-api-id a1b2c3 \
 --resource-id aaa111 \
 --http-method GET \
 --patch-operations "op='replace',path='/responseTransferMode',value=BUFFERED" \
 --region us-west-1
```

Tiene que volver a implementar la API para que los cambios surtan efecto.

------

# Configuración de una integración de proxy de Lambda con transmisión de respuesta de carga útil en API Gateway
<a name="response-transfer-mode-lambda"></a>

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](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html) 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](#response-transfer-mode-lambda-format) 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
<a name="response-transfer-mode-lambda-comparison"></a>

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](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html) 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-invocations
  ```

  Este 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
<a name="response-transfer-mode-lambda-format"></a>

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](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-input-format). 

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`, `cookies` y `statusCode` pueden no estar especificadas si no se van a devolver más encabezados de respuesta.
+ La clave `headers` solo puede contener encabezados de un solo valor.
+ La salida espera que los encabezados contengan `Transfer-Encoding: chunked` o `Content-length: number`. Si la función no devuelve ninguno de estos encabezados, API Gateway agrega `Transfer-Encoding: chunked` al encabezado de respuesta.
+ La clave `multiValueHeaders` puede contener encabezados de varios valores y encabezados de un solo valor. Puede utilizar la clave `multiValueHeaders` para especificar todos los encabezados adicionales, incluidos los que solo contienen un valor.
+ Si especifica valores para `headers` y `multiValueHeaders`, API Gateway los combina en una sola lista. Si se especifica el mismo par de clave-valor en ambos, solo los valores de `multiValueHeaders` aparecerán en la lista combinada.
+ Los metadatos deben ser un JSON válido. Solo se admiten las claves de `headers`, `multiValueHeaders`, `cookies` y `statusCode`.
+ 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í  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  Sí. API Gateway transmite la respuesta.  | 
|  De streaming  |  No  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  No. API Gateway invoca la función de Lambda y devuelve una respuesta de error 500.  | 
|  De streaming  |  Sí  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  No. API Gateway no admite esta configuración de integración.  | 
|  De streaming  |  No  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  No. API Gateway no admite esta configuración de integración.  | 
|  Almacenado en búfer  |  Sí  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  No. API Gateway no admite esta configuración de integración.  | 
|  Almacenado en búfer  |  No  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  No. API Gateway no admite esta configuración de integración.  | 
|  Almacenado en búfer  |  Sí  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  API Gateway devuelve los encabezados HTTP y el código de estado, pero no el cuerpo de la respuesta.  | 
|  Almacenado en búfer  |  No  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  Sí. Esta es una integración de proxy de Lambda. Para obtener más información, consulte [Integración de proxy de Lambda](set-up-lambda-proxy-integrations.md).  | 

# Configuración de una integración de proxy de Lambda con transmisión de respuesta de carga útil en API Gateway
<a name="response-streaming-lambda-configure"></a>

Cuando configura la transmisión de la carga útil de respuesta, especifica el modo de transferencia en la solicitud de integración del recurso. Estos ajustes se configuran en la solicitud de integración para controlar el comportamiento de API Gateway antes y durante la respuesta de integración.

## Ejemplos de funciones de Lambda para la transmisión de respuestas
<a name="response-streaming-lambda-example"></a>

La función de Lambda debe cumplir el [Formato de integración de proxy de Lambda para transmisión de respuestas](response-transfer-mode-lambda.md#response-transfer-mode-lambda-format). Le recomendamos que utilice una de las tres funciones de Lambda de ejemplo para probar la transmisión de respuestas. Cuando cree la función de Lambda, asegúrese de hacer lo siguiente:
+ Proporcione un tiempo de espera adecuado para la función. Le recomendamos configurar un tiempo de espera de al menos 1 minuto para obtener información sobre la transmisión de respuestas. Al crear los recursos de producción, asegúrese de que el tiempo de espera de la función de Lambda abarque todo el ciclo de solicitud. Para obtener más información, consulte [Configuración del tiempo de espera de la función de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).
+ Utilice el último tiempo de ejecución de Node.js.
+ Utilice una región en la que esté disponible la transmisión de respuestas de Lambda.

------
#### [ Using HttpResponseStream.from ]

El siguiente ejemplo de código transmite los objetos de metadatos y las cargas útiles de JSON de vuelta al cliente mediante el método `awslambda.HttpResponseStream()` sin utilizar el método de canalización. No es necesario crear el delimitador. Para obtener más información, consulte [Escritura de funciones de Lambda habilitadas para la transmisión de respuestas](https://docs.aws.amazon.com/lambda/latest/dg/config-rs-write-functions.html).

```
export const handler = awslambda.streamifyResponse(
  async (event, responseStream, context) => {
    const httpResponseMetadata = {
      "statusCode": 200,
      "headers": {
        "x-foo": "bar"
      },
      "multiValueHeaders": {
        "x-mv1": ["hello", "world"],
        "Set-Cookie": ["c1=blue", "c2=red"]
      }
    };

    responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);
    await new Promise(r => setTimeout(r, 1000)); // synthetic delay

    responseStream.write("First payload ");
    await new Promise(r => setTimeout(r, 1000)); // synthetic delay

    responseStream.write("Final payload");
    responseStream.end();
});
```

------
#### [ Using the pipeline method ]

Lambda recomienda que, al escribir funciones habilitadas para la transmisión de respuestas, utilice el decorador `awslambda.streamifyResponse()` que proporcionan los tiempos de ejecución nativos de Node.js y el método de `pipeline()`. Cuando utiliza el método de canalización, no necesita crear el delimitador; Lambda lo hace automáticamente. Para obtener más información, consulte [Escritura de funciones de Lambda habilitadas para la transmisión de respuestas](https://docs.aws.amazon.com/lambda/latest/dg/config-rs-write-functions.html).

El ejemplo de código siguiente transmite los objetos de metadatos y tres cargas útiles de JSON de vuelta al cliente.

```
import { pipeline } from 'node:stream/promises';
import { Readable } from 'node:stream';

export const handler = awslambda.streamifyResponse(
  async (event, responseStream, context) => {
    const httpResponseMetadata = {
      statusCode: 200,
      headers: {
        "Content-Type": "text/plain",
        "X-Custom-Header": "Example-Custom-Header"
      }
    };

    responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);

    const dataStream = Readable.from(async function* () {
      yield "FIRST payload\n";
      await new Promise(r => setTimeout(r, 1000));
      yield "SECOND payload\n";
      await new Promise(r => setTimeout(r, 1000));
      yield "THIRD payload\n";
      await new Promise(r => setTimeout(r, 1000));
    }());

    await pipeline(dataStream, responseStream);
  }
);
```

------
#### [ Without using the pipeline method ]

El ejemplo de código siguiente transmite los objetos de metadatos y tres cargas útiles de JSON de vuelta al cliente sin usar el método `awslambda.HttpResponseStream()`. Sin el método `awslambda.HttpResponseStream()`, debe incluir un delimitador de 8 bytes nulos entre los metadatos y la carga útil. 

```
export const handler = awslambda.streamifyResponse(async (event, response, ctx) => {
  response.write('{"statusCode": 200, "headers": {"hdr-x": "val-x"}}');
  response.write("\x00".repeat(8)); // DELIMITER
  await new Promise(r => setTimeout(r, 1000));

  response.write("FIRST payload");
  await new Promise(r => setTimeout(r, 1000));

  response.write("SECOND payload");
  await new Promise(r => setTimeout(r, 1000));

  response.write("FINAL payload");
  response.end();
});
```

------

## Creación de una integración de proxy de Lambda con transmisión de respuesta de carga útil
<a name="response-streaming-lambda-create"></a>

En el siguiente procedimiento se muestra cómo crear una integración de proxy de Lambda con la transmisión de respuesta de carga útil. Utilice la función de Lambda de ejemplo o cree la suya propia.

------
#### [ Consola de administración de AWS ]

**Creación de una integración de proxy de Lambda con transmisión de respuesta de carga útil**

1. Inicie sesión en la consola de API Gateway en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija una API de REST.

1. Elija **Crear recurso**.

1. En **Nombre del recurso**, escriba **streaming**.

1. Elija **Crear recurso**.

1. Con el recurso **/streaming** seleccionado, elija **Crear método**.

1. En **Tipo de método**, elija **CUALQUIERA**.

1. Para **Tipo de integración**, elija **Lambda**.

1. Elija **Integración de proxy de Lambda**.

1. Para el **modo de transferencia de respuesta**, elija **Flujo**.

1. Para la **función de Lambda**, elija el nombre de la función de Lambda.

   La consola de API Gateway utiliza automáticamente la API [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html) para invocar la función de Lambda. Es responsable de escribir una función de Lambda habilitada para la transmisión de respuestas. Para ver un ejemplo, consulta [Ejemplos de funciones de Lambda para la transmisión de respuestas](#response-streaming-lambda-example).

1. Elija **Crear método**.

Después de crear el método, implemente la API.

**Para implementar su API**

1. Elija **Implementar API**.

1. En **Etapa**, seleccione **Nueva etapa**.

1. En **Stage name (Nombre de etapa)**, escriba **prod**.

1. (Opcional) En **Description (Descripción)**, introduzca una descripción.

1. Elija **Implementar**.

------
#### [ AWS CLI ]

El siguiente procedimiento muestra cómo importar una nueva API con el valor `responseTransferMode` establecido en `STREAM`. Si tiene una API de integración existente y desea modificar `responseTransferMode`, consulte [Actualización del modo de transferencia de respuestas para una integración de proxy de Lambda](#response-streaming-lambda-update).

**Creación de una nueva API con transmisión de respuesta de carga útil**

1. Copie el siguiente archivo de API abierto y guárdelo como `ResponseStreamDemoSwagger.yaml`. En este archivo, `responseTransferMode` se establece en `STREAM` y el URI de integración se establece en `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-invocations`.

   Sustituya el nombre de la función de `my-function` por una función habilitada para transmisión y sustituya las credenciales por un rol de IAM que tenga políticas que permitan al servicio de `apigateway` invocar funciones de Lambda.

   ```
   openapi: "3.0.1"
   info:
     title: "ResponseStreamingDemo"
     version: "2025-04-28T17:28:25Z"
   servers:
   - url: "{basePath}"
     variables:
       basePath:
         default: "prod"
   paths:
     /lambda:
       get:
         x-amazon-apigateway-integration:
           httpMethod: "POST"
           uri: "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-invocations"
           type: "aws_proxy"
           timeoutInMillis: 90000
           responseTransferMode: "STREAM"
           credentials: "arn:aws:iam::111122223333:role/apigateway-lambda-role"
   ```

   En lugar de proporcionar un rol de IAM para credenciales, puede utilizar el comando `add-permission` para Lambda para agregar permisos basados en recursos.

1. Use el comando `import-rest-api` siguiente para importar la definición de OpenAPI:

   ```
   aws apigateway import-rest-api \
     --body 'fileb://~/ResponseStreamDemoSwagger.yaml' \
     --parameters endpointConfigurationTypes=REGIONAL \
     --region us-west-1
   ```

1. Use el comando `create-deployment` siguiente para implementar la nueva API en una etapa:

   ```
   aws apigateway create-deployment \
     --rest-api-id a1b2c2 \
     --stage-name prod \
     --region us-west-1
   ```

------

### Actualización del modo de transferencia de respuestas para una integración de proxy de Lambda
<a name="response-streaming-lambda-update"></a>

El procedimiento siguiente muestra cómo actualizar el modo de transferencia de respuestas para una integración de proxy de Lambda. Cuando cambie el modo de transferencia de respuesta a transmisión, actualice la función de Lambda para que cumpla con los requisitos de la transmisión de respuesta. Utilice la función de Lambda de ejemplo o cree la suya propia.

------
#### [ Consola de administración de AWS ]

**Actualización del modo de transferencia de respuestas para una integración de proxy de Lambda**

1. Inicie sesión en la consola de API Gateway en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija una API de REST.

1. Elija un método.

1. En la pestaña **Solicitud de integración**, en **Configuración de la solicitud de integración**, seleccione **Editar**.

1. Para el **modo de transferencia de respuesta**, elija **Flujo**.

1. Para la **función de Lambda**, elija el nombre de la función de Lambda.

1. Seleccione **Save**.

Después de actualizar el método, implemente la API.

**Para implementar su API**

1. Elija **Implementar API**.

1. En **Etapa**, seleccione **Nueva etapa**.

1. En **Stage name (Nombre de etapa)**, escriba **prod**.

1. (Opcional) En **Description (Descripción)**, introduzca una descripción.

1. Elija **Implementar**.

------
#### [ AWS CLI ]

1. Actualización de la función de Lambda para que esté habilitada para la transmisión.

1. Utilice el comando AWS CLI siguiente para actualizar el URI de integración y el modo de transferencia de respuestas de la integración:

   ```
   aws apigateway update-integration \
    --rest-api-id a1b2c3 \
    --resource-id aaa111 \
    --http-method ANY \
    --patch-operations "[{\"op\":\"replace\",\"path\":\"/uri\",\"value\":\"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-invocations\"}, {\"op\":\"replace\",\"path\":\"/responseTransferMode\",\"value\":\"STREAM\"}]" \
    --region us-west-1
   ```

1. Vuelva a implementar la API para que los cambios se apliquen.

------

# Solución de problemas relacionados con la transmisión de respuestas en API Gateway
<a name="response-streaming-troubleshoot"></a>

La siguiente guía de solución de problemas puede ayudar a resolver los problemas relacionados con las API que usan transmisión de respuestas.

## Solución de problemas generales
<a name="response-streaming-general-troubleshooting"></a>

Puede usar el [TestInvokeMethod](https://docs.aws.amazon.com/apigateway/latest/api/API_TestInvokeMethod.html) o la pestaña de prueba de la consola para probar la respuesta de la transmisión. Es posible que las siguientes consideraciones afecten al uso de la invocación de prueba para la transmisión de respuesta:
+ Cuando prueba el método, API Gateway almacena en búfer la carga útil de respuesta transmitida. Una vez que se cumple alguna de las siguientes condiciones, API Gateway devuelve una respuesta única que contiene la carga útil almacenada en búfer:
  + La solicitud está completa
  + Han transcurrido 35 segundos
  + Se ha almacenado en búfer más de 1 MB de carga útil de respuesta
+ Si transcurren más de 35 segundos antes de que el método devuelva un estado de respuesta HTTP y todos los encabezados, el estado de respuesta devuelto en TestInvokeMethod es 0.
+ API Gateway no produce ningún registro de ejecución.

Una vez implementada la API, puede probar la respuesta de la transmisión mediante un comando curl. Le recomendamos que utilice la opción `-i` para incluir los encabezados de respuesta de protocolo en la salida. Visualización de los datos de respuesta según llegan, uso de la opción de curl `--no-buffer`

## Errores de cURL de solución de problemas
<a name="response-streaming-troubleshoot-curl-error"></a>

Si está probando una integración y recibe el error `curl: (18) transfer closed with outstanding read data remaining`, asegúrese de que el tiempo de espera de la integración sea lo suficientemente largo. Si utiliza una función de Lambda, debe actualizar el tiempo de espera de respuesta de la función de Lambda. Para obtener más información, consulte [Configuración del tiempo de espera de la función de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).

## Solución de problemas mediante el registro de acceso
<a name="response-streaming-troubleshoot-access-logging"></a>

Puede utilizar los registros de acceso de la etapa de API de REST para registrar y solucionar problemas de la transmisión de respuestas. Además de las variables existentes, puede utilizar las variables del registro de acceso siguientes:

`$context.integration.responseTransferMode`  
El modo de transferencia de respuesta de la integración. Puede ser `BUFFERED` o `STREAMED`.

`$context.integration.timeToAllHeaders`  
El tiempo entre que API Gateway establece la conexión de integración y se reciben del cliente todos los encabezados de respuesta de integración.

`$context.integration.timeToFirstContent`  
El tiempo transcurrido entre el momento en que API Gateway establece la conexión de integración y el momento en que recibe los primeros bytes de contenido.

`$context.integration.latency` o `$context.integrationLatency`  
El tiempo entre que API Gateway establece la conexión de integración y se completa la transmisión de respuesta de integración.

La siguiente figura muestra cómo estas variables del registro de acceso representan los diferentes componentes de un flujo de respuesta.

![\[Variables de registro de acceso para la transmisión de respuestas en API Gateway\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/response-streaming-figure.png)


Para obtener más información acerca de los registros de acceso, consulte [Configuración del registro de CloudWatch para las API de REST en API Gateway](set-up-logging.md). También puede usar X-Ray para supervisar su flujo de respuesta. Para obtener más información, consulte [Rastreo de las solicitudes de usuario a las API de REST mediante X-Ray en API Gateway](apigateway-xray.md).