

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Trasmetti in streaming la risposta di integrazione per le integrazioni proxy in API Gateway
<a name="response-transfer-mode"></a>

Puoi configurare l’integrazione del proxy per controllare in che modo API Gateway restituisce la tua risposta di integrazione. Per impostazione predefinita, API Gateway attende di ricevere la risposta completa prima di iniziare la trasmissione. Tuttavia, se imposti la modalità di trasferimento delle risposte dell'integrazione su`STREAM`, API Gateway non attende che una risposta sia completamente calcolata prima di inviarla al client. Lo streaming di risposte funziona per tutti i tipi di endpoint di REST API.

Utilizza lo streaming di risposte per i seguenti casi d'uso:
+ Riduci il time-to-first-byte valore (TTFB) per le applicazioni di intelligenza artificiale generativa come i chatbot.
+ Trasmetti in streaming immagini, video o file musicali di grandi dimensioni senza utilizzare un URL prefirmato S3.
+ Esegui operazioni di lunga durata segnalando progressi incrementali come gli eventi inviati dal server (SSE).
+ Supera il limite di payload di risposta di 10 MB di API Gateway.
+ Supera il limite di timeout di 29 secondi di API Gateway senza richiedere un aumento del limite di timeout di integrazione.
+ Ricevi un payload binario senza configurare i tipi di supporti binari.

## Considerazioni sullo streaming del payload di risposta
<a name="response-transfer-mode-considerations"></a>

Le seguenti considerazioni potrebbero influire sull'utilizzo dello streaming di payload di risposta:
+ È possibile utilizzare lo streaming di payload di risposta solo per i `HTTP_PROXY` tipi di integrazione. `AWS_PROXY` Ciò include le integrazioni proxy Lambda e le integrazioni private che utilizzano integrazioni. `HTTP_PROXY`
+ L'impostazione predefinita della modalità di trasferimento è. `BUFFERED` Per utilizzare lo streaming di risposta, è necessario modificare la modalità di trasferimento della risposta in`STREAM`.
+ Lo streaming di risposte è supportato solo per REST APIs.
+ Lo streaming delle richieste non è supportato.
+ Puoi trasmettere in streaming la tua risposta per un massimo di 15 minuti.
+ I tuoi stream sono soggetti a timeout di inattività. Per gli endpoint regionali o privati, il timeout è di 5 minuti. Per gli endpoint ottimizzati per l'edge, il timeout è di 30 secondi.
+ Se utilizzi lo streaming di risposta per un'API REST regionale con la tua CloudFront distribuzione, puoi ottenere un timeout di inattività superiore a 30 secondi aumentando il timeout di risposta della tua distribuzione. CloudFront Per ulteriori informazioni, consulta Timeout di [risposta](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesOrigin.html#DownloadDistValuesOriginResponseTimeout).
+ Quando la modalità di trasferimento della risposta è impostata su`STREAM`, API Gateway non può supportare funzionalità che richiedono il buffering dell'intera risposta di integrazione. Per questo motivo, le seguenti funzionalità non sono supportate con lo streaming di risposta:
  + Memorizzazione nella cache degli endpoint
  + Codifica dei contenuti. Se desideri comprimere la tua risposta di integrazione, esegui questa operazione nella tua integrazione.
  + Trasformazione della risposta con VTL
+ All'interno di ogni risposta in streaming, i primi 10 MB di payload di risposta non sono soggetti ad alcuna restrizione di larghezza di banda. I dati di payload di risposta superiori a 10 MB sono limitati a 2 MB/s.
+ Quando la connessione tra il client e API Gateway o tra API Gateway e Lambda viene chiusa a causa di un timeout, la funzione Lambda potrebbe continuare a essere eseguita. Per ulteriori informazioni, consulta [Configurare il timeout della funzione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).
+ Lo streaming delle risposte comporta un costo. Per ulteriori informazioni, consulta [Prezzi di API Gateway](https://aws.amazon.com/api-gateway/pricing/).

# Configura un'integrazione proxy HTTP con lo streaming di risposta del payload in API Gateway
<a name="response-streaming-http"></a>

Quando si configura lo streaming del payload di risposta, si specifica la modalità di trasferimento della risposta nella richiesta di integrazione del metodo. Queste impostazioni vengono configurate nella richiesta di integrazione per controllare il comportamento di API Gateway prima e durante la risposta di integrazione. Quando utilizzi lo streaming di risposte, puoi configurare il timeout di integrazione fino a 15 minuti.

Quando utilizzi lo streaming di risposta del payload con un'`HTTP_PROXY`integrazione, API Gateway non invia il codice di stato della risposta HTTP o alcuna intestazione di risposta HTTP finché non riceve completamente tutte le intestazioni.

## Crea un'integrazione proxy HTTP con lo streaming di risposta del payload
<a name="response-streaming-http-create"></a>

La procedura seguente mostra come importare una nuova API con l'`responseTransferMode`impostazione su. `STREAM` Se disponi di un'API di integrazione esistente e desideri modificarla`responseTransferMode`, consulta[Aggiorna la modalità di trasferimento delle risposte per un'integrazione con proxy HTTP](#response-streaming-http-update).

------
#### [ Console di gestione AWS ]

**Per creare un'integrazione proxy HTTP con lo streaming di risposta del payload**

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Scegliere una REST API.

1. Scegli **Crea risorsa**.

1. Per **Resource Name (Nome risorsa)** immetti **streaming**.

1. Scegli **Crea risorsa**.

1. **Con la risorsa **/streaming** selezionata, scegli il metodo Create.**

1. Per **Tipo di metodo**, scegliete **QUALSIASI**.

1. Per **Tipo di integrazione** scegli **Fittizio**.

1. Scegli l'**integrazione con il proxy HTTP**.

1. Per la **modalità di trasferimento Response**, scegli **Stream**.

1. Per il **metodo HTTP**, scegliete un metodo.

1. Per **Endpoint URL**, inserisci un endpoint di integrazione. Assicurati di scegliere un endpoint che produca un payload di grandi dimensioni da trasmettere in streaming.

1. Scegli **Crea metodo**.

Dopo aver creato il metodo, implementa l'API.

**Per distribuire l'API**

1. Seleziona **Deploy API (Distribuisci API)**.

1. In **Fase**, seleziona **Nuova fase**.

1. In **Stage name (Nome fase)** immettere **prod**.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. Seleziona **Implementa**.

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

**Per creare una nuova API con streaming di risposta al payload**

1. Copia il seguente file Open API, quindi salvalo con nome. `ResponseStreamDemoSwagger.yaml` In questo file, `responseTransferMode` è impostato su`STREAM`. L'endpoint di integrazione è impostato su`https://example.com`, ma ti consigliamo di modificarlo su un endpoint che produca un payload di grandi dimensioni da trasmettere in streaming.

   ```
   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. Usa il seguente `import-rest-api` comando per importare la tua definizione OpenAPI:

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

1. Usa il seguente `create-deployment` comando per distribuire la tua nuova API in una fase:

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

------

## Aggiorna la modalità di trasferimento delle risposte per un'integrazione con proxy HTTP
<a name="response-streaming-http-update"></a>

La procedura seguente mostra come aggiornare la modalità di trasferimento della risposta per un'integrazione con proxy HTTP.

------
#### [ Console di gestione AWS ]

**Per aggiornare la modalità di trasferimento delle risposte per un'integrazione con proxy HTTP**

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Scegliere una REST API.

1. Scegliere un metodo.

1. Nella scheda **Richiesta di integrazione** scegli **Modifica** in **Impostazioni della richiesta di integrazione**.

1. **Per la **modalità di trasferimento Response**, scegli Stream.**

1. Scegli **Save** (Salva).

Dopo aver aggiornato il metodo, distribuisci l'API.

**Per distribuire l'API**

1. Seleziona **Deploy API (Distribuisci API)**.

1. In **Fase**, seleziona **Nuova fase**.

1. In **Stage name (Nome fase)** immettere **prod**.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. Seleziona **Implementa**.

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

Il `update-integration` comando seguente aggiorna la modalità di trasferimento di un'integrazione da `BUFFERED` a`STREAM`. Per tutte le integrazioni esistenti APIs, la modalità di trasferimento della risposta per tutte le integrazioni è impostata su. `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
```

È necessario ridistribuire l'API per rendere effettive le modifiche. Se hai personalizzato il timeout di integrazione, questo valore di timeout viene rimosso, poiché API Gateway trasmette la tua risposta per un massimo di 5 minuti.

Il `update-integration` comando seguente aggiorna la modalità di trasferimento di un'integrazione da a: `STREAM` `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
```

È necessario ridistribuire l'API per rendere effettive le modifiche.

------

# Configura l'integrazione di un proxy Lambda con lo streaming della risposta del payload in API Gateway
<a name="response-transfer-mode-lambda"></a>

Puoi trasmettere in streaming la risposta di una funzione Lambda per migliorare le prestazioni del time-to-first byte (TTFB) e inviare risposte parziali al client non appena diventano disponibili. API Gateway richiede l'utilizzo dell'API [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)Lambda per richiamare la funzione Lambda. API Gateway passa un oggetto evento alla funzione Lambda. La funzione Lambda back-end analizza i dati delle richieste in entrata per stabilire la risposta da restituire. Affinché API Gateway possa trasmettere l'output Lambda, la funzione Lambda deve restituire il [formato](#response-transfer-mode-lambda-format) richiesto da API Gateway.

## Differenze nelle integrazioni del proxy Lambda tra la modalità di trasferimento di risposta in streaming e bufferizzata
<a name="response-transfer-mode-lambda-comparison"></a>

L'elenco seguente descrive le differenze tra un'integrazione con proxy Lambda e un'integrazione con proxy Lambda per lo streaming di risposte:
+ API Gateway utilizza l'[InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)API per richiamare l'integrazione del proxy Lambda per lo streaming delle risposte. Ciò si traduce in un URI diverso, che è il seguente:

  ```
  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
  ```

  Questo ARN utilizza una data diversa per la versione dell'API e un'azione di servizio diversa rispetto all'integrazione del proxy Lambda.

  Se utilizzi la console API Gateway per lo streaming delle risposte, la console utilizza l'URI corretto per te.
+ In un'integrazione con proxy Lambda, API Gateway invia la risposta al client solo dopo aver ricevuto la risposta completa da Lambda. In un'integrazione proxy Lambda per lo streaming di risposte, API Gateway avvia il flusso di payload dopo aver ricevuto i metadati e il delimitatore validi da Lambda. 
+ L'integrazione del proxy Lambda per lo streaming di risposte utilizza lo stesso formato di input dell'integrazione proxy, ma richiede un formato di output diverso.

## Formato di integrazione proxy Lambda per lo streaming delle risposte
<a name="response-transfer-mode-lambda-format"></a>

Quando API Gateway richiama una funzione Lambda con streaming di risposte, il formato di input è lo stesso di quello di una funzione Lambda per l'integrazione del proxy. Per ulteriori informazioni, consulta [Formato di input di una funzione Lambda per l'integrazione proxy](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-input-format). 

Quando Lambda invia una risposta a API Gateway, la risposta deve rispettare il seguente formato. Questo formato utilizza un delimitatore per separare i metadati JSON dal payload non elaborato. In questo caso, i dati del payload vengono trasmessi in streaming man mano che vengono trasmessi dalla funzione di streaming Lambda:

```
{
  "headers": {"headerName": "headerValue", ...},
  "multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... },
  "cookies" : ["cookie1", "cookie2"],
  "statusCode": httpStatusCode
}<DELIMITER>PAYLOAD1 | PAYLOAD2 | PAYLOAD3
```

Nell'output:
+ Le `statusCode` chiavi`headers`, `multiValueHeaders``cookies`, e possono non essere specificate se non devono essere restituite intestazioni di risposta aggiuntive.
+ La chiave `headers` può contenere solo una decina di intestazioni di valore.
+ L'output prevede che le intestazioni contengano o. `Transfer-Encoding: chunked` `Content-length: number` Se la funzione non restituisce nessuna di queste intestazioni, API Gateway viene aggiunta `Transfer-Encoding: chunked` all'intestazione della risposta.
+ La chiave `multiValueHeaders` può contenere intestazioni multi-valore e il valore di una decina di intestazioni. È possibile utilizzare la chiave `multiValueHeaders` per specificare tutte le intestazioni aggiuntive, incluse quelle con valore singolo.
+ Se si specificano valori sia per `headers` che per `multiValueHeaders`, API Gateway li unisce in un unico elenco. Se la stessa coppia chiave-valore viene specificata in entrambi, solo i valori di `multiValueHeaders` verranno visualizzati nell'elenco risultante.
+ I metadati devono essere in formato JSON valido. Solo `headers``multiValueHeaders`, `cookies` e le `statusCode` chiavi sono supportate.
+ È necessario fornire un delimitatore dopo i metadati JSON. Il delimitatore deve essere composto da 8 byte nulli e deve apparire all'interno dei primi 16 KB di dati di flusso.
+ API Gateway non richiede un formato specifico per il payload di risposta del metodo.

Se utilizzi l'URL di una funzione per lo streaming della tua funzione Lambda, devi modificare l'input e l'output della funzione Lambda per soddisfare questi requisiti.

Se l'output della funzione Lambda non soddisfa i requisiti di questo formato, API Gateway potrebbe comunque richiamare la funzione Lambda. La tabella seguente mostra le combinazioni delle impostazioni della richiesta di integrazione API e del codice della funzione Lambda supportato da API Gateway. Ciò include le combinazioni supportate per la modalità di trasferimento della risposta in modalità buffered.


| Modalità di trasferimento della risposta | Il codice della funzione è conforme al formato richiesto | API di richiamo Lambda | Supportato da API Gateway | 
| --- | --- | --- | --- | 
|  Flusso  |  Sì  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  Sì. API Gateway trasmette la tua risposta.  | 
|  Flusso  |  No  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  No. API Gateway richiama la funzione Lambda e restituisce una risposta di errore 500.  | 
|  Flusso  |  Sì  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  No. API Gateway non supporta questa configurazione di integrazione.  | 
|  Flusso  |  No  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  No. API Gateway non supporta questa configurazione di integrazione.  | 
|  Bufferato  |  Sì  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  No. API Gateway non supporta questa configurazione di integrazione.  | 
|  Bufferato  |  No  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  No. API Gateway non supporta questa configurazione di integrazione.  | 
|  Bufferato  |  Sì  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  API Gateway restituisce le intestazioni HTTP e il codice di stato ma non il corpo della risposta.  | 
|  Bufferato  |  No  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  Sì. Si tratta di un'integrazione proxy Lambda. Per ulteriori informazioni, consulta Integrazione del [proxy Lambda](set-up-lambda-proxy-integrations.md).  | 

# Configura l'integrazione di un proxy Lambda con lo streaming della risposta del payload in API Gateway
<a name="response-streaming-lambda-configure"></a>

Quando configuri lo streaming del payload di risposta, specifichi la modalità di trasferimento nella richiesta di integrazione della risorsa. Queste impostazioni vengono configurate nella richiesta di integrazione per controllare il comportamento di API Gateway prima e durante la risposta di integrazione.

## Esempi di funzioni Lambda per lo streaming delle risposte
<a name="response-streaming-lambda-example"></a>

La tua funzione Lambda deve rispettare il. [Formato di integrazione proxy Lambda per lo streaming delle risposte](response-transfer-mode-lambda.md#response-transfer-mode-lambda-format) Ti consigliamo di utilizzare una delle tre funzioni Lambda di esempio per testare lo streaming delle risposte. Quando crei la tua funzione Lambda, assicurati di fare quanto segue:
+ Fornisci un timeout adeguato per la tua funzione. Ti consigliamo di configurare un timeout di almeno 1 minuto per conoscere lo streaming di risposte. Quando crei le tue risorse di produzione, assicurati che il timeout della funzione Lambda copra l'intero ciclo di richiesta. Per ulteriori informazioni, consulta [Configurare il timeout della funzione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).
+ Usa il runtime Node.js più recente.
+ Usa una regione in cui è disponibile lo streaming di risposta Lambda.

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

Il seguente esempio di codice trasmette gli oggetti di metadati e i payload JSON al client utilizzando il `awslambda.HttpResponseStream()` metodo senza utilizzare il metodo pipeline. Non è necessario creare il delimitatore. Per ulteriori informazioni, consulta [Scrittura di funzioni Lambda abilitate allo streaming di risposte](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 consiglia, quando si scrivono funzioni abilitate allo streaming di risposte, di utilizzare il `awslambda.streamifyResponse()` decoratore fornito dai runtime nativi di Node.js e il metodo. `pipeline()` Quando usi il metodo pipeline, non è necessario creare il delimitatore, Lambda lo fa per te. Per ulteriori informazioni, consulta [Scrittura di funzioni Lambda abilitate allo streaming di risposte](https://docs.aws.amazon.com/lambda/latest/dg/config-rs-write-functions.html).

Il seguente esempio di codice invia gli oggetti di metadati JSON e tre payload al client.

```
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 ]

Il seguente esempio di codice invia gli oggetti di metadati JSON e tre payload al client senza utilizzare il metodo. `awslambda.HttpResponseStream()` Senza il `awslambda.HttpResponseStream()` metodo, è necessario includere un delimitatore di 8 byte nulli tra i metadati e il payload. 

```
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();
});
```

------

## Crea un'integrazione proxy Lambda con lo streaming di risposta del payload
<a name="response-streaming-lambda-create"></a>

La procedura seguente mostra come creare un'integrazione proxy Lambda con lo streaming di risposta del payload. Usa la funzione Lambda di esempio o creane una tua.

------
#### [ Console di gestione AWS ]

**Per creare un'integrazione proxy Lambda con lo streaming di risposta del payload**

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Scegliere una REST API.

1. Scegli **Crea risorsa**.

1. Per **Resource Name (Nome risorsa)** immetti **streaming**.

1. Scegli **Crea risorsa**.

1. **Con la risorsa **/streaming** selezionata, scegli il metodo Create.**

1. Per **Tipo di metodo**, scegliete **QUALSIASI**.

1. Per **Tipo di integrazione**, scegli **Lambda**.

1. Scegli l'integrazione con **proxy Lambda**.

1. Per la **modalità di trasferimento Response**, scegli **Stream**.

1. Per la **funzione Lambda**, scegli il nome della tua funzione Lambda.

   La console API Gateway utilizza automaticamente [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)l'API per richiamare la funzione Lambda. Sei responsabile della scrittura di una funzione Lambda abilitata per lo streaming di risposte. Per vedere un esempio, consulta [Esempi di funzioni Lambda per lo streaming delle risposte](#response-streaming-lambda-example).

1. Scegli **Crea metodo**.

Dopo aver creato il metodo, distribuisci l'API.

**Per distribuire l'API**

1. Seleziona **Deploy API (Distribuisci API)**.

1. In **Fase**, seleziona **Nuova fase**.

1. In **Stage name (Nome fase)** immettere **prod**.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. Seleziona **Implementa**.

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

La procedura seguente mostra come importare una nuova API con l'`responseTransferMode`impostazione su. `STREAM` Se disponi di un'API di integrazione esistente e desideri modificarla`responseTransferMode`, consulta[Aggiorna la modalità di trasferimento delle risposte per un'integrazione con proxy Lambda](#response-streaming-lambda-update).

**Per creare una nuova API con streaming di risposta al payload**

1. Copia il seguente file Open API, quindi salvalo con nome. `ResponseStreamDemoSwagger.yaml` In questo file, `responseTransferMode` è impostato `STREAM` su e l'URI di integrazione è impostato su`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`.

   Sostituisci il nome della funzione `my-function` con una funzione abilitata allo streaming e sostituisci le credenziali con un ruolo IAM dotato di policy che consentono al `apigateway` servizio di richiamare le funzioni 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"
   ```

   Invece di fornire un ruolo IAM per le credenziali, puoi utilizzare il `add-permission` comando per Lambda per aggiungere autorizzazioni basate sulle risorse.

1. Usa il seguente `import-rest-api` comando per importare la tua definizione OpenAPI:

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

1. Usa il seguente `create-deployment` comando per distribuire la tua nuova API in una fase:

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

------

### Aggiorna la modalità di trasferimento delle risposte per un'integrazione con proxy Lambda
<a name="response-streaming-lambda-update"></a>

La procedura seguente mostra come aggiornare la modalità di trasferimento delle risposte per un'integrazione proxy Lambda. Quando modifichi la modalità di trasferimento della risposta in streaming, aggiorna la funzione Lambda in modo che soddisfi i requisiti per lo streaming di risposta. Usa la funzione Lambda di esempio o creane una tua.

------
#### [ Console di gestione AWS ]

**Per aggiornare la modalità di trasferimento delle risposte per l'integrazione di un proxy Lambda**

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Scegliere una REST API.

1. Scegliere un metodo.

1. Nella scheda **Richiesta di integrazione** scegli **Modifica** in **Impostazioni della richiesta di integrazione**.

1. **Per la **modalità di trasferimento Response**, scegli Stream.**

1. Per la **funzione Lambda**, scegli il nome della tua funzione Lambda.

1. Scegli **Save** (Salva).

Dopo aver aggiornato il metodo, distribuisci l'API.

**Per distribuire l'API**

1. Seleziona **Deploy API (Distribuisci API)**.

1. In **Fase**, seleziona **Nuova fase**.

1. In **Stage name (Nome fase)** immettere **prod**.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. Seleziona **Implementa**.

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

1. Aggiorna la tua funzione Lambda in modo che sia abilitata allo streaming.

1. Usa il seguente AWS CLI comando per aggiornare l'URI di integrazione e la modalità di trasferimento delle risposte della tua integrazione:

   ```
   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. Implementa nuovamente l'API per rendere effettive le modifiche.

------

# Risolvi i problemi relativi allo streaming delle risposte in API Gateway
<a name="response-streaming-troubleshoot"></a>

La seguente guida per la risoluzione dei problemi potrebbe aiutare a risolvere i problemi relativi allo streaming di risposta APIs che utilizza.

## Risoluzione dei problemi generali
<a name="response-streaming-general-troubleshooting"></a>

Puoi utilizzare la scheda di test [TestInvokeMethod](https://docs.aws.amazon.com/apigateway/latest/api/API_TestInvokeMethod.html)o la scheda di test della console per testare la risposta dello stream. Le seguenti considerazioni potrebbero influire sull'utilizzo di test invoke per lo streaming di risposte:
+ Quando testate il vostro metodo, API Gateway memorizza nel buffer il payload di risposta in streaming. Una volta soddisfatta una delle seguenti condizioni, API Gateway restituisce una risposta unica contenente il payload bufferizzato:
  + La richiesta è completa
  + Sono trascorsi 35 secondi
  + È stato memorizzato nel buffer più di 1 MB di payload di risposta
+ Se trascorrono più di 35 secondi prima che il metodo restituisca lo stato di risposta HTTP e tutte le intestazioni, lo stato della risposta restituito è 0. TestInvokeMethod 
+ API Gateway non produce alcun log di esecuzione.

Dopo aver distribuito l'API, puoi testare la risposta dello stream utilizzando un comando curl. Ti consigliamo di utilizzare l'`-i`opzione per includere le intestazioni di risposta del protocollo nell'output. Per vedere i dati di risposta non appena arrivano, usa l'opzione curl `--no-buffer`

## Risolvi gli errori cURL
<a name="response-streaming-troubleshoot-curl-error"></a>

Se stai testando un'integrazione e ricevi l'errore`curl: (18) transfer closed with outstanding read data remaining`, assicurati che il timeout dell'integrazione sia sufficientemente lungo. Se utilizzi una funzione Lambda, devi aggiornare il timeout di risposta della funzione Lambda. Per ulteriori informazioni, consulta [Configurare il timeout della funzione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).

## Risolvi i problemi relativi all'utilizzo della registrazione degli accessi
<a name="response-streaming-troubleshoot-access-logging"></a>

Puoi utilizzare i log di accesso per la fase dell'API REST per registrare e risolvere i problemi del flusso di risposta. Oltre alle variabili esistenti, puoi utilizzare le seguenti variabili di registro degli accessi:

`$context.integration.responseTransferMode`  
La modalità di trasferimento delle risposte della tua integrazione. Ciò può essere `BUFFERED` o `STREAMED`.

`$context.integration.timeToAllHeaders`  
Il tempo che intercorre tra il momento in cui API Gateway stabilisce la connessione di integrazione e il momento in cui riceve tutte le intestazioni di risposta all'integrazione dal client.

`$context.integration.timeToFirstContent`  
Il tempo che intercorre tra il momento in cui API Gateway stabilisce la connessione di integrazione e il momento in cui riceve i primi byte di contenuto.

`$context.integration.latency` o `$context.integrationLatency`  
Il momento in cui API Gateway stabilisce la connessione di integrazione e il momento in cui il flusso di risposta dell'integrazione è completo.

La figura seguente mostra come queste variabili di log di accesso rappresentino diversi componenti di un flusso di risposta.

![\[Accedi alle variabili di registro per lo streaming delle risposte in API Gateway\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/response-streaming-figure.png)


Per ulteriori informazioni sui log degli accessi al, consultare [Configurare la CloudWatch registrazione per REST APIs in API Gateway](set-up-logging.md). Puoi anche usare X-Ray per monitorare il flusso di risposta. Per ulteriori informazioni, consulta [Traccia delle richieste degli utenti alle REST API utilizzando X-Ray in Gateway API](apigateway-xray.md).