Configura l'integrazione di un proxy Lambda con lo streaming della risposta del payload in API Gateway - Gateway Amazon API

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à.

Configura l'integrazione di un proxy Lambda con lo streaming della risposta del payload in API Gateway

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

La tua funzione Lambda deve rispettare il. Formato di integrazione proxy Lambda per lo streaming delle risposte 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.

  • 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.

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.

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

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.

  2. Scegliere una REST API.

  3. Scegli Crea risorsa.

  4. Per Resource Name (Nome risorsa) immetti streaming.

  5. Scegli Crea risorsa.

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

  7. Per Tipo di metodo, scegliete QUALSIASI.

  8. Per Tipo di integrazione, scegli Lambda.

  9. Scegli l'integrazione con proxy Lambda.

  10. Per la modalità di trasferimento Response, scegli Stream.

  11. Per la funzione Lambda, scegli il nome della tua funzione Lambda.

    La console API Gateway utilizza automaticamente InvokeWithResponseStreaml'API per richiamare la funzione Lambda. Sei responsabile della scrittura di una funzione Lambda abilitata allo streaming di risposte. Per vedere un esempio, consulta Esempi di funzioni Lambda per lo streaming delle risposte.

  12. Scegli Crea metodo.

Dopo aver creato il metodo, distribuisci l'API.

Per distribuire l'API
  1. Seleziona Deploy API (Distribuisci API).

  2. In Fase, seleziona Nuova fase.

  3. In Stage name (Nome fase) immettere prod.

  4. (Facoltativo) In Descrizione, immetti una descrizione.

  5. Seleziona Implementa.

AWS CLI

La procedura seguente mostra come importare una nuova API con l'responseTransferModeimpostazione su. STREAM Se disponi di un'API di integrazione esistente e desideri modificarlaresponseTransferMode, consultaAggiorna la modalità di trasferimento delle risposte per un'integrazione con proxy Lambda.

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 suarn: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.

  2. 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
  3. 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

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.

  2. Scegliere una REST API.

  3. Scegliere un metodo.

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

  5. Per la modalità di trasferimento Response, scegli Stream.

  6. Per la funzione Lambda, scegli il nome della tua funzione Lambda.

  7. Scegli Save (Salva).

Dopo aver aggiornato il metodo, distribuisci l'API.

Per distribuire l'API
  1. Seleziona Deploy API (Distribuisci API).

  2. In Fase, seleziona Nuova fase.

  3. In Stage name (Nome fase) immettere prod.

  4. (Facoltativo) In Descrizione, immetti una descrizione.

  5. Seleziona Implementa.

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

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