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.
Wenn Sie das Antwort-Payload-Streaming einrichten, geben Sie den Übertragungsmodus in der Integrationsanforderung Ihrer Ressource an. Sie konfigurieren diese Einstellungen in der Integrationsanfrage, um zu steuern, wie sich API Gateway vor und während der Integrationsantwort verhält.
Beispiel für Lambda-Funktionen für Response-Streaming
Ihre Lambda-Funktion muss dem Lambda-Proxy-Integrationsformat für Antwort-Streaming entsprechen. Wir empfehlen Ihnen, eine der drei Lambda-Beispielfunktionen zu verwenden, um das Antwortstreaming zu testen. Wenn Sie Ihre Lambda-Funktion erstellen, stellen Sie sicher, dass Sie Folgendes tun:
-
Sorgen Sie für ein ausreichendes Timeout für Ihre Funktion. Wir empfehlen Ihnen, ein Timeout von mindestens 1 Minute zu konfigurieren, um mehr über das Antwort-Streaming zu erfahren. Wenn Sie Ihre Produktionsressourcen erstellen, stellen Sie sicher, dass Ihr Lambda-Funktions-Timeout den gesamten Anforderungszyklus abdeckt. Weitere Informationen finden Sie unter Lambda-Funktions-Timeout konfigurieren.
-
Verwenden Sie die neueste Runtime von Node.js.
Verwenden Sie eine Region, in der Lambda-Antwort-Streaming verfügbar ist.
- Using HttpResponseStream.from
-
Das folgende Codebeispiel streamt die JSON-Metadatenobjekte und Payloads mithilfe der Methode zurück zum Client, ohne die awslambda.HttpResponseStream() Pipeline-Methode zu verwenden. Sie müssen das Trennzeichen nicht erstellen. Weitere Informationen finden Sie unter Schreiben von Lambda-Funktionen, die für Antwortstreaming aktiviert sind.
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 empfiehlt, dass Sie beim Schreiben von Funktionen, die für Response-Streaming aktiviert sind, den awslambda.streamifyResponse() Decorator verwenden, den die systemeigenen Laufzeiten von Node.js bereitstellen, sowie die Methode. pipeline() Wenn Sie die Pipeline-Methode verwenden, müssen Sie das Trennzeichen nicht erstellen, Lambda erledigt das für Sie. Weitere Informationen finden Sie unter Schreiben von Lambda-Funktionen, die für Antwortstreaming aktiviert sind.
Im folgenden Codebeispiel werden die JSON-Metadatenobjekte und drei Payloads zurück zum Client gestreamt.
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
-
Das folgende Codebeispiel streamt die JSON-Metadatenobjekte und drei Payloads zurück zum Client, ohne die Methode zu verwenden. awslambda.HttpResponseStream() Ohne die awslambda.HttpResponseStream() Methode müssen Sie ein Trennzeichen von 8 Null-Bytes zwischen den Metadaten und der Payload einfügen.
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();
});
Erstellen Sie eine Lambda-Proxy-Integration mit Payload-Response-Streaming
Das folgende Verfahren zeigt, wie Sie eine Lambda-Proxyintegration mit Payload-Response-Streaming erstellen. Verwenden Sie die Lambda-Beispielfunktion oder erstellen Sie Ihre eigene.
- AWS-Managementkonsole
-
So erstellen Sie eine Lambda-Proxyintegration mit Payload-Response-Streaming
-
Melden Sie sich bei der API Gateway Gateway-Konsole unter https://console.aws.amazon.com/apigatewayan.
Wählen Sie eine REST-API aus.
Wählen Sie Create Resource (Ressource erstellen) aus.
Geben Sie für Resource name (Ressourcenname) streaming ein.
Wählen Sie Create Resource (Ressource erstellen) aus.
Wählen Sie die Ressource /streaming aus und wählen Sie Methode erstellen aus.
Wählen Sie als Methodentyp die Option ANY aus.
Wählen Sie unter Integrationstyp die Option Lambda aus.
Wählen Sie Lambda-Proxyintegration.
Wählen Sie für den Antwortübertragungsmodus die Option Stream aus.
Wählen Sie für Lambda-Funktion den Namen Ihrer Lambda-Funktion.
Die API-Gateway-Konsole verwendet automatisch InvokeWithResponseStreamAPI, um die Lambda-Funktion aufzurufen. Sie sind dafür verantwortlich, eine Lambda-Funktion mit Response-Streaming zu schreiben. Ein Beispiel finden Sie unter Beispiel für Lambda-Funktionen für Response-Streaming.
Wählen Sie Methode erstellen aus.
Nachdem Sie Ihre Methode erstellt haben, stellen Sie Ihre API bereit.
Stellen Sie Ihre API bereit
Klicken Sie auf Deploy API.
Wählen Sie für Stufe die Option Neue Stufe aus.
Geben Sie für Stage name (Stufenname) prod ein.
(Optional) Geben Sie unter Description (Beschreibung) eine Beschreibung ein.
Wählen Sie Bereitstellen.
- AWS CLI
-
Das folgende Verfahren zeigt Ihnen, wie Sie eine neue API mit der responseTransferMode Einstellung auf importierenSTREAM. Wenn Sie über eine bestehende Integrations-API verfügen und diese ändern möchtenresponseTransferMode, finden Sie weitere Informationen unterAktualisieren Sie den Antwortübertragungsmodus für eine Lambda-Proxyintegration.
So erstellen Sie eine neue API mit Payload-Response-Streaming
-
Kopieren Sie die folgende Open API-Datei und speichern Sie sie dann unter. ResponseStreamDemoSwagger.yaml In dieser Datei responseTransferMode ist auf eingestelltSTREAM, und der Integrations-URI ist auf eingestelltarn: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.
Ersetzen Sie den Funktionsnamen von my-function durch eine Streaming-fähige Funktion und ersetzen Sie die Anmeldeinformationen durch eine IAM-Rolle, deren Richtlinien es dem apigateway Dienst ermöglichen, Lambda-Funktionen aufzurufen.
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"
Anstatt eine IAM-Rolle für Anmeldeinformationen bereitzustellen, können Sie den add-permission Befehl für Lambda verwenden, um ressourcenbasierte Berechtigungen hinzuzufügen.
Verwenden Sie den folgenden import-rest-api Befehl, um Ihre OpenAPI-Definition zu importieren:
aws apigateway import-rest-api \
--body 'fileb://~/ResponseStreamDemoSwagger.yaml' \
--parameters endpointConfigurationTypes=REGIONAL \
--region us-west-1
Verwenden Sie den folgenden create-deployment Befehl, um Ihre neue API in einer Phase bereitzustellen:
aws apigateway create-deployment \
--rest-api-id a1b2c2 \
--stage-name prod \
--region us-west-1
Aktualisieren Sie den Antwortübertragungsmodus für eine Lambda-Proxyintegration
Das folgende Verfahren zeigt, wie der Antwortübertragungsmodus für eine Lambda-Proxyintegration aktualisiert wird. Wenn Sie den Antwortübertragungsmodus auf Streaming ändern, aktualisieren Sie Ihre Lambda-Funktion, sodass sie den Anforderungen für das Antwortstreaming entspricht. Verwenden Sie die Lambda-Beispielfunktion oder erstellen Sie Ihre eigene.
- AWS-Managementkonsole
-
So aktualisieren Sie den Antwortübertragungsmodus für eine Lambda-Proxyintegration
-
Melden Sie sich bei der API Gateway Gateway-Konsole unter https://console.aws.amazon.com/apigatewayan.
Wählen Sie eine REST-API aus.
Wählen Sie eine Methode aus.
Klicken Sie auf der Registerkarte Integrationsanfrage unter Einstellungen für Integrationsanfragen auf Bearbeiten.
Wählen Sie für den Antwortübertragungsmodus Stream aus.
Wählen Sie für Lambda-Funktion den Namen Ihrer Lambda-Funktion.
Wählen Sie Speichern.
Nachdem Sie Ihre Methode aktualisiert haben, stellen Sie Ihre API bereit.
Stellen Sie Ihre API bereit
Klicken Sie auf Deploy API.
Wählen Sie für Stufe die Option Neue Stufe aus.
Geben Sie für Stage name (Stufenname) prod ein.
(Optional) Geben Sie unter Description (Beschreibung) eine Beschreibung ein.
Wählen Sie Bereitstellen.
- AWS CLI
-
Aktualisieren Sie Ihre Lambda-Funktion so, dass sie streaming-fähig ist.
Verwenden Sie den folgenden AWS CLI Befehl, um den Integrations-URI und den Antwortübertragungsmodus Ihrer Integration zu aktualisieren:
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
-
Sie müssen Ihre API erneut bereitstellen, damit die Änderungen wirksam werden.