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-invocationsDieser 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
statusCodeSchlü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: chunkedContent-length:Wenn Ihre Funktion keinen dieser Header zurückgibt, hängt API Gateway ihn an den AntwortheadernumberTransfer-Encoding: chunkedan. -
Der
multiValueHeadersSchlüssel kann mehrwertige Header sowie einwertige Header enthalten. Sie können denmultiValueHeadersSchlüssel verwenden, um alle zusätzlichen Header anzugeben, einschließlich einzelner Werte. -
Wenn Sie Werte sowohl für
headersals auch fürmultiValueHeadersangeben, 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 dermultiValueHeaderszusammengeführten Liste angezeigt. -
Bei den Metadaten muss es sich um ein gültiges JSON handeln. Nur
headers,multiValueHeaders,cookiesund diestatusCodeSchlü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 |
Ja. API Gateway streamt Ihre Antwort. |
|
|
Streamen |
Nein |
Nein API Gateway ruft Ihre Lambda-Funktion auf und gibt eine 500-Fehlerantwort zurück. |
|
|
Streamen |
Ja |
Nein API Gateway unterstützt diese Integrationskonfiguration nicht. |
|
|
Streamen |
Nein |
Nein API Gateway unterstützt diese Integrationskonfiguration nicht. |
|
|
Gepuffert |
Ja |
Nein. API Gateway unterstützt diese Integrationskonfiguration nicht. |
|
|
Gepuffert |
Nein |
Nein. API Gateway unterstützt diese Integrationskonfiguration nicht. |
|
|
Gepuffert |
Ja |
API Gateway gibt die HTTP-Header und den Statuscode zurück, aber nicht den Antworttext. |
|
|
Gepuffert |
Nein |
Ja. Dies ist eine Lambda-Proxy-Integration. Weitere Informationen finden Sie unter Lambda-Proxyintegration. |