Richten Sie eine Lambda-Proxy-Integration mit Payload-Response-Streaming in API Gateway ein - Amazon API Gateway

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Richten Sie eine Lambda-Proxy-Integration mit Payload-Response-Streaming in API Gateway ein

Sie können die Antwort einer Lambda-Funktion streamen, um die TTFB-Leistung (Time to First Byte) zu verbessern, und Teilantworten an den Client zurücksenden, sobald sie verfügbar sind. API Gateway erfordert, dass Sie die InvokeWithResponseStreamLambda-API verwenden, um Ihre Lambda-Funktion aufzurufen. API Gateway übergibt ein Event-Objekt an die Lambda-Funktion. Die Backend-Lambda-Funktion analysiert die eingehenden Anfragedaten, um die eigene Antwort zu bestimmen. Damit API Gateway die Lambda-Ausgabe streamen kann, muss die Lambda-Funktion das von API Gateway geforderte Format ausgeben.

Unterschiede bei der Lambda-Proxyintegration zwischen Stream- und Buffered Response-Übertragungsmodus

In der folgenden Liste werden die Unterschiede zwischen einer Lambda-Proxyintegration und einer Lambda-Proxyintegration für Response-Streaming beschrieben:

  • API Gateway verwendet die InvokeWithResponseStreamAPI, um die Lambda-Proxyintegration für das Antwort-Streaming aufzurufen. Dies führt zu einer anderen URI, die wie folgt lautet:

    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

    Dieser ARN verwendet ein anderes Datum für die API-Version und eine andere Serviceaktion als die Lambda-Proxyintegration.

    Wenn Sie die API Gateway Gateway-Konsole für das Antwort-Streaming verwenden, verwendet die Konsole den richtigen URI für Sie.

  • Bei einer Lambda-Proxyintegration sendet API Gateway die Antwort erst an den Client, nachdem er die vollständige Antwort von Lambda erhalten hat. In einer Lambda-Proxyintegration für Antwortstreaming startet API Gateway den Payload-Stream, nachdem es die gültigen Metadaten und das Trennzeichen von Lambda erhalten hat.

  • Die Lambda-Proxyintegration für Response-Streaming verwendet dasselbe Eingabeformat wie die Proxyintegration, erfordert jedoch ein anderes Ausgabeformat.

Lambda-Proxy-Integrationsformat für Antwort-Streaming

Wenn API Gateway eine Lambda-Funktion mit Antwortstreaming aufruft, entspricht das Eingabeformat dem Eingabeformat einer Lambda-Funktion für die Proxyintegration. Weitere Informationen finden Sie unter Eingabeformat einer Lambda-Funktion für die Proxy-Integration.

Wenn Lambda eine Antwort an API Gateway streamt, muss die Antwort dem folgenden Format entsprechen. Dieses Format verwendet ein Trennzeichen, um die JSON-Metadaten von der unformatierten Nutzlast zu trennen. In diesem Fall werden die Nutzdaten so gestreamt, wie sie von Ihrer Streaming-Lambda-Funktion übertragen werden:

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

In der Konsolenausgabe:

  • Die statusCode Schlüsselheaders, multiValueHeaderscookies, und können nicht spezifiziert werden, wenn keine zusätzlichen Antwortheader zurückgegeben werden sollen.

  • Der headersSchlüssel kann nur einwertige Header enthalten

  • Die Ausgabe erwartet, dass die Header entweder oder enthalten. Transfer-Encoding: chunked Content-length: number Wenn Ihre Funktion keinen dieser Header zurückgibt, hängt API Gateway ihn an den Antwortheader Transfer-Encoding: chunked an.

  • Der multiValueHeadersSchlüssel kann mehrwertige Header sowie einwertige Header enthalten. Sie können den multiValueHeadersSchlüssel verwenden, um alle zusätzlichen Header anzugeben, einschließlich einzelner Werte.

  • Wenn Sie Werte sowohl für headers als auch für multiValueHeaders angeben, führt API Gateway diese in einer einzigen Liste zusammen. Wenn in beiden das gleiche Schlüssel / Wert-Paar angegeben ist, werden nur die Werte von in der multiValueHeaderszusammengeführten Liste angezeigt.

  • Bei den Metadaten muss es sich um ein gültiges JSON handeln. Nurheaders,multiValueHeaders, cookies und die statusCode Schlüssel werden unterstützt.

  • Sie müssen nach dem Metadaten-JSON ein Trennzeichen angeben. Das Trennzeichen muss aus 8 Null-Bytes bestehen und es muss innerhalb der ersten 16 KB der Stream-Daten vorkommen.

  • API Gateway benötigt kein bestimmtes Format für die Nutzlast der Methodenantwort.

Wenn Sie eine Funktions-URL verwenden, um Ihre Lambda-Funktion zu streamen, müssen Sie die Eingabe und die Ausgabe Ihrer Lambda-Funktion ändern, um diese Anforderungen zu erfüllen.

Wenn Ihre Lambda-Funktionsausgabe nicht den Anforderungen dieses Formats entspricht, ruft API Gateway möglicherweise trotzdem Ihre Lambda-Funktion auf. Die folgende Tabelle zeigt die Kombinationen aus API-Integrationsanforderungseinstellungen und Lambda-Funktionscode, die von API Gateway unterstützt werden. Dies beinhaltet die unterstützten Kombinationen für den Antwortübertragungsmodus von buffered.

Modus „Antwortübertragung“ Der Funktionscode entspricht dem erforderlichen Format Lambda-API aufrufen Unterstützt von API Gateway

Streamen

Ja

InvokeWithResponseStream

Ja. API Gateway streamt Ihre Antwort.

Streamen

Nein

InvokeWithResponseStream

Nein API Gateway ruft Ihre Lambda-Funktion auf und gibt eine 500-Fehlerantwort zurück.

Streamen

Ja

Aufrufen

Nein API Gateway unterstützt diese Integrationskonfiguration nicht.

Streamen

Nein

Aufrufen

Nein API Gateway unterstützt diese Integrationskonfiguration nicht.

Gepuffert

Ja

InvokeWithResponseStream

Nein. API Gateway unterstützt diese Integrationskonfiguration nicht.

Gepuffert

Nein

InvokeWithResponseStream

Nein. API Gateway unterstützt diese Integrationskonfiguration nicht.

Gepuffert

Ja

Aufrufen

API Gateway gibt die HTTP-Header und den Statuscode zurück, aber nicht den Antworttext.

Gepuffert

Nein

Aufrufen

Ja. Dies ist eine Lambda-Proxy-Integration. Weitere Informationen finden Sie unter Lambda-Proxyintegration.