

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.

# Streamen Sie die Integrationsantwort für Ihre Proxy-Integrationen in API Gateway
<a name="response-transfer-mode"></a>

Sie können Ihre Proxyintegration so konfigurieren, dass sie die Art steuert, wie API Gateway die Integrationsantwort zurückgibt. Standardmäßig wartet API Gateway auf den Empfang der vollständigen Antwort, bevor die Übertragung gestartet wird. Wenn Sie jedoch den Antwortübertragungsmodus Ihrer Integration auf einstellen`STREAM`, wartet API Gateway nicht, bis eine Antwort vollständig berechnet ist, bevor sie an den Client gesendet wird. Das Antwort-Streaming funktioniert für alle Arten von REST-API-Endpunkttypen.

Verwenden Sie das Antwort-Streaming für die folgenden Anwendungsfälle:
+ Senken Sie den time-to-first-byte (TTFB) für generative KI-Anwendungen wie Chatbots.
+ Streamen Sie große Bild-, Video- oder Musikdateien, ohne eine vorsignierte S3-URL zu verwenden.
+ Führen Sie lang andauernde Operationen durch und melden Sie inkrementelle Fortschritte, z. B. vom Server gesendete Ereignisse (SSE).
+ Überschreiten Sie das Nutzlastlimit von 10 MB für Antworten von API Gateway.
+ Überschreiten Sie das Timeout-Limit von 29 Sekunden von API Gateway, ohne eine Erhöhung des Integrations-Timeout-Limits zu beantragen.
+ Empfangen Sie eine binäre Nutzlast, ohne die binären Medientypen zu konfigurieren.

## Überlegungen zum Streaming von Antwort-Payloads
<a name="response-transfer-mode-considerations"></a>

Die folgenden Überlegungen könnten sich auf Ihre Verwendung von Antwort-Payload-Streaming auswirken:
+ Sie können das Streaming von Antwortnutzlasten nur für `HTTP_PROXY` `AWS_PROXY` Integrationstypen verwenden. Dazu gehören Lambda-Proxy-Integrationen und private Integrationen, die Integrationen verwenden. `HTTP_PROXY`
+ Die Standardeinstellung für den Übertragungsmodus ist. `BUFFERED` Um Antwortstreaming zu verwenden, müssen Sie den Antwortübertragungsmodus auf ändern`STREAM`.
+ Antwortstreaming wird nur für REST unterstützt APIs.
+ Anforderungsstreaming wird nicht unterstützt.
+ Sie können Ihre Antwort bis zu 15 Minuten lang streamen.
+ Bei Ihren Streams kann es zu Timeouts im Leerlauf kommen. Bei regionalen oder privaten Endpunkten beträgt das Timeout 5 Minuten. Bei Edge-optimierten Endpunkten beträgt das Timeout 30 Sekunden.
+ Wenn Sie das Antwort-Streaming für eine regionale REST-API mit Ihrer eigenen CloudFront Distribution verwenden, können Sie ein Leerlaufzeitlimit von mehr als 30 Sekunden erreichen, indem Sie das Antwort-Timeout Ihrer Distribution erhöhen. CloudFront Weitere Informationen finden Sie unter [Antwort-Timeout](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesOrigin.html#DownloadDistValuesOriginResponseTimeout).
+ Wenn der Antwortübertragungsmodus auf eingestellt ist`STREAM`, kann API Gateway keine Funktionen unterstützen, die eine Pufferung der gesamten Integrationsantwort erfordern. Aus diesem Grund werden die folgenden Funktionen beim Antwort-Streaming nicht unterstützt:
  + Endpunkt-Caching
  + Kodierung von Inhalten. Wenn Sie Ihre Integrationsantwort komprimieren möchten, tun Sie dies in Ihrer Integration.
  + Transformation der Antwort mit VTL
+ Innerhalb jeder Streaming-Antwort unterliegen die ersten 10 MB der Antwort-Nutzlast keinen Bandbreitenbeschränkungen. Antwort-Nutzdaten, die 10 MB überschreiten, sind auf 2 MB/s beschränkt.
+ Wenn die Verbindung zwischen dem Client und API Gateway oder zwischen API Gateway und Lambda aufgrund eines Timeouts geschlossen wird, wird die Lambda-Funktion möglicherweise weiterhin ausgeführt. Weitere Informationen finden Sie unter [Lambda-Funktions-Timeout konfigurieren](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).
+ Das Streaming von Antworten ist mit Kosten verbunden. Weitere Informationen finden Sie unter [API-Gateway-Preise](https://aws.amazon.com/api-gateway/pricing/).

# Richten Sie eine HTTP-Proxyintegration mit Payload-Response-Streaming in API Gateway ein
<a name="response-streaming-http"></a>

Wenn Sie das Antwort-Payload-Streaming einrichten, geben Sie den Antwortübertragungsmodus in der Integrationsanforderung Ihrer Methode an. Sie konfigurieren diese Einstellungen in der Integrationsanfrage, um zu steuern, wie sich API Gateway vor und während der Integrationsantwort verhält. Wenn Sie Antwort-Streaming verwenden, können Sie das Integrations-Timeout auf bis zu 15 Minuten konfigurieren.

Wenn Sie Payload Response Streaming mit einer `HTTP_PROXY` Integration verwenden, sendet API Gateway den HTTP-Antwortstatuscode oder irgendwelche HTTP-Antwort-Header erst, wenn es alle Header vollständig empfangen hat.

## Erstellen Sie eine HTTP-Proxy-Integration mit Payload-Antwort-Streaming
<a name="response-streaming-http-create"></a>

Das folgende Verfahren zeigt Ihnen, wie Sie eine neue API mit der `responseTransferMode` Einstellung auf `STREAM` importieren. Wenn Sie über eine bestehende Integrations-API verfügen und diese ändern möchten`responseTransferMode`, finden Sie weitere Informationen unter[Aktualisieren Sie den Antwortübertragungsmodus für eine HTTP-Proxyintegration](#response-streaming-http-update).

------
#### [ AWS-Managementkonsole ]

**So erstellen Sie eine HTTP-Proxyintegration mit Payload-Response-Streaming**

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie eine REST-API aus.

1. Wählen Sie **Create Resource** (Ressource erstellen) aus.

1. Geben Sie für **Resource name (Ressourcenname)** **streaming** ein.

1. Wählen Sie **Create Resource** (Ressource erstellen) aus.

1. **Wählen Sie die Ressource **/streaming** aus und wählen Sie Methode erstellen aus.**

1. Wählen Sie als **Methodentyp** die Option **ANY aus.**

1. Wählen Sie unter **Integrationstyp** die Option **HTTP** aus.

1. Wählen Sie **HTTP-Proxyintegration**.

1. Wählen Sie für den **Antwortübertragungsmodus** **Stream** aus.

1. Wählen Sie für die **HTTP-Methode** eine Methode aus.

1. Geben Sie für **Endpunkt-URL** einen Integrationsendpunkt ein. Stellen Sie sicher, dass Sie einen Endpunkt wählen, der eine große Nutzlast erzeugt, die zu Ihnen zurückgestreamt wird.

1. Wählen Sie **Methode erstellen** aus.

Nachdem Sie Ihre Methode erstellt haben, stellen Sie Ihre API bereit.

**Stellen Sie Ihre API bereit**

1. Klicken Sie auf **Deploy API**.

1. Wählen Sie für **Stufe** die Option **Neue Stufe** aus.

1. Geben Sie für **Stage name (Stufenname)** **prod** ein.

1. (Optional) Geben Sie unter **Description (Beschreibung)** eine Beschreibung ein.

1. Wählen Sie **Bereitstellen**.

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

**Um eine neue API mit Payload-Response-Streaming zu erstellen**

1. Kopieren Sie die folgende Open API-Datei und speichern Sie sie dann unter. `ResponseStreamDemoSwagger.yaml` In dieser Datei `responseTransferMode` ist auf eingestellt`STREAM`. Der Integrationsendpunkt ist auf eingestellt`https://example.com`, wir empfehlen jedoch, ihn so zu ändern, dass er eine große Nutzlast erzeugt, die an Sie zurückgestreamt wird.

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

1. Verwenden Sie den folgenden `create-deployment` Befehl, um Ihre neue API in einer Phase bereitzustellen:

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

------

## Aktualisieren Sie den Antwortübertragungsmodus für eine HTTP-Proxyintegration
<a name="response-streaming-http-update"></a>

Das folgende Verfahren zeigt, wie der Antwortübertragungsmodus für eine HTTP-Proxyintegration aktualisiert wird.

------
#### [ AWS-Managementkonsole ]

**Um den Antwortübertragungsmodus für eine HTTP-Proxyintegration zu aktualisieren**

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie eine REST-API aus.

1. Wählen Sie eine Methode aus.

1. Klicken Sie auf der Registerkarte **Integrationsanfrage** unter **Einstellungen für Integrationsanfragen** auf **Bearbeiten**.

1. **Wählen Sie für den **Antwortübertragungsmodus Stream** aus.**

1. Wählen Sie **Speichern**.

Nachdem Sie Ihre Methode aktualisiert haben, stellen Sie Ihre API bereit.

**Stellen Sie Ihre API bereit**

1. Klicken Sie auf **Deploy API**.

1. Wählen Sie für **Stufe** die Option **Neue Stufe** aus.

1. Geben Sie für **Stage name (Stufenname)** **prod** ein.

1. (Optional) Geben Sie unter **Description (Beschreibung)** eine Beschreibung ein.

1. Wählen Sie **Bereitstellen**.

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

Der folgende `update-integration` Befehl aktualisiert den Übertragungsmodus einer Integration von `BUFFERED` bis`STREAM`. Für alle vorhandenen APIs Integrationen ist der Antwortübertragungsmodus für alle Integrationen auf `BUFFERED` eingestellt.

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

Sie müssen Ihre API erneut bereitstellen, damit die Änderungen wirksam werden. Wenn Sie das Integrations-Timeout angepasst haben, wird dieser Timeout-Wert entfernt, da API Gateway Ihre Antwort bis zu 5 Minuten lang streamt.

Der folgende `update-integration` Befehl aktualisiert den Übertragungsmodus einer Integration von bis`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
```

Sie müssen Ihre API erneut bereitstellen, damit die Änderungen wirksam werden.

------

# Richten Sie eine Lambda-Proxy-Integration mit Payload-Response-Streaming in API Gateway ein
<a name="response-transfer-mode-lambda"></a>

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 [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)Lambda-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](#response-transfer-mode-lambda-format) ausgeben.

## Unterschiede bei der Lambda-Proxyintegration zwischen Stream- und Buffered Response-Übertragungsmodus
<a name="response-transfer-mode-lambda-comparison"></a>

In der folgenden Liste werden die Unterschiede zwischen einer Lambda-Proxyintegration und einer Lambda-Proxyintegration für Response-Streaming beschrieben:
+ API Gateway verwendet die [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)API, 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
<a name="response-transfer-mode-lambda-format"></a>

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](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-input-format). 

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üssel`headers`, `multiValueHeaders``cookies`, und können nicht spezifiziert werden, wenn keine zusätzlichen Antwortheader zurückgegeben werden sollen.
+ Der `headers`Schlü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 `multiValueHeaders`Schlüssel kann mehrwertige Header sowie einwertige Header enthalten. Sie können den `multiValueHeaders`Schlü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 `multiValueHeaders`zusammengeführten Liste angezeigt.
+ Bei den Metadaten muss es sich um ein gültiges JSON handeln. Nur`headers`,`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.


| Antwortübertragungsmodus | Der Funktionscode entspricht dem erforderlichen Format | Lambda-API aufrufen | Unterstützt von API Gateway | 
| --- | --- | --- | --- | 
|  Streamen  |  Ja  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  Ja. API Gateway streamt Ihre Antwort.  | 
|  Streamen  |  Nein  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  Nein API Gateway ruft Ihre Lambda-Funktion auf und gibt eine 500-Fehlerantwort zurück.  | 
|  Streamen  |  Ja  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  Nein API Gateway unterstützt diese Integrationskonfiguration nicht.  | 
|  Streamen  |  Nein  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  Nein API Gateway unterstützt diese Integrationskonfiguration nicht.  | 
|  Gepuffert  |  Ja  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  Nein. API Gateway unterstützt diese Integrationskonfiguration nicht.  | 
|  Gepuffert  |  Nein  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  Nein. API Gateway unterstützt diese Integrationskonfiguration nicht.  | 
|  Gepuffert  |  Ja  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  API Gateway gibt die HTTP-Header und den Statuscode zurück, aber nicht den Antworttext.  | 
|  Gepuffert  |  Nein  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  Ja. Dies ist eine Lambda-Proxy-Integration. Weitere Informationen finden Sie unter [Lambda-Proxyintegration](set-up-lambda-proxy-integrations.md).  | 

# Konfigurieren Sie eine Lambda-Proxyintegration mit Payload-Response-Streaming in API Gateway
<a name="response-streaming-lambda-configure"></a>

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
<a name="response-streaming-lambda-example"></a>

Ihre Lambda-Funktion muss dem [Lambda-Proxy-Integrationsformat für Antwort-Streaming](response-transfer-mode-lambda.md#response-transfer-mode-lambda-format) 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](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).
+ 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](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 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](https://docs.aws.amazon.com/lambda/latest/dg/config-rs-write-functions.html).

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
<a name="response-streaming-lambda-create"></a>

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

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie eine REST-API aus.

1. Wählen Sie **Create Resource** (Ressource erstellen) aus.

1. Geben Sie für **Resource name (Ressourcenname)** **streaming** ein.

1. Wählen Sie **Create Resource** (Ressource erstellen) aus.

1. **Wählen Sie die Ressource **/streaming** aus und wählen Sie Methode erstellen aus.**

1. Wählen Sie als **Methodentyp** die Option **ANY aus.**

1. Wählen Sie unter **Integrationstyp** die Option **Lambda** aus.

1. Wählen Sie **Lambda-Proxyintegration**.

1. Wählen Sie für den **Antwortübertragungsmodus** die Option **Stream** aus.

1. Wählen Sie für **Lambda-Funktion** den Namen Ihrer Lambda-Funktion.

   Die API-Gateway-Konsole verwendet automatisch [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)API, 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](#response-streaming-lambda-example).

1. Wählen Sie **Methode erstellen** aus.

Nachdem Sie Ihre Methode erstellt haben, stellen Sie Ihre API bereit.

**Stellen Sie Ihre API bereit**

1. Klicken Sie auf **Deploy API**.

1. Wählen Sie für **Stufe** die Option **Neue Stufe** aus.

1. Geben Sie für **Stage name (Stufenname)** **prod** ein.

1. (Optional) Geben Sie unter **Description (Beschreibung)** eine Beschreibung ein.

1. Wählen Sie **Bereitstellen**.

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

Das folgende Verfahren zeigt Ihnen, wie Sie eine neue API mit der `responseTransferMode` Einstellung auf importieren`STREAM`. Wenn Sie über eine bestehende Integrations-API verfügen und diese ändern möchten`responseTransferMode`, finden Sie weitere Informationen unter[Aktualisieren Sie den Antwortübertragungsmodus für eine Lambda-Proxyintegration](#response-streaming-lambda-update).

**So erstellen Sie eine neue API mit Payload-Response-Streaming**

1. Kopieren Sie die folgende Open API-Datei und speichern Sie sie dann unter. `ResponseStreamDemoSwagger.yaml` In dieser Datei `responseTransferMode` ist auf eingestellt`STREAM`, und der Integrations-URI ist auf eingestellt`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`.

   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.

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

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
<a name="response-streaming-lambda-update"></a>

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

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie eine REST-API aus.

1. Wählen Sie eine Methode aus.

1. Klicken Sie auf der Registerkarte **Integrationsanfrage** unter **Einstellungen für Integrationsanfragen** auf **Bearbeiten**.

1. **Wählen Sie für den **Antwortübertragungsmodus Stream** aus.**

1. Wählen Sie für **Lambda-Funktion** den Namen Ihrer Lambda-Funktion.

1. Wählen Sie **Speichern**.

Nachdem Sie Ihre Methode aktualisiert haben, stellen Sie Ihre API bereit.

**Stellen Sie Ihre API bereit**

1. Klicken Sie auf **Deploy API**.

1. Wählen Sie für **Stufe** die Option **Neue Stufe** aus.

1. Geben Sie für **Stage name (Stufenname)** **prod** ein.

1. (Optional) Geben Sie unter **Description (Beschreibung)** eine Beschreibung ein.

1. Wählen Sie **Bereitstellen**.

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

1. Aktualisieren Sie Ihre Lambda-Funktion so, dass sie streaming-fähig ist.

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

1. Sie müssen Ihre API erneut bereitstellen, damit die Änderungen wirksam werden.

------

# Probleme mit dem Antwort-Streaming in API Gateway beheben
<a name="response-streaming-troubleshoot"></a>

Die folgenden Anleitungen zur Fehlerbehebung können Ihnen helfen, Probleme mit Ihren Benutzern zu lösen APIs , die Antwort-Streaming verwenden.

## Allgemeine Problembehebung
<a name="response-streaming-general-troubleshooting"></a>

Sie können den Test-Tab [TestInvokeMethod](https://docs.aws.amazon.com/apigateway/latest/api/API_TestInvokeMethod.html)oder den Test-Tab der Konsole verwenden, um Ihre Stream-Antwort zu testen. Die folgenden Überlegungen könnten sich auf Ihre Verwendung von Test Invoke für das Antwort-Streaming auswirken:
+ Wenn Sie Ihre Methode testen, puffert API Gateway Ihre gestreamte Antwort-Payload. Sobald eine der folgenden Bedingungen erfüllt ist, gibt API Gateway eine einmalige Antwort zurück, die die gepufferte Nutzlast enthält:
  + Die Anfrage ist abgeschlossen
  + 35 Sekunden sind vergangen
  + Mehr als 1 MB Antwort-Nutzdaten wurden gepuffert
+ Wenn mehr als 35 Sekunden vergehen, bis Ihre Methode einen HTTP-Antwortstatus und alle Header zurückgibt, ist der zurückgegebene Antwortstatus 0. TestInvokeMethod 
+ API Gateway erstellt keine Ausführungsprotokolle.

Nachdem Sie Ihre API bereitgestellt haben, können Sie Ihre Stream-Antwort mit einem curl-Befehl testen. Wir empfehlen, dass Sie die `-i` Option verwenden, um Protokollantwort-Header in die Ausgabe aufzunehmen. Verwenden Sie die Option curl, um die Antwortdaten so zu sehen, wie sie ankommen `--no-buffer`

## Behebung von cURL-Fehlern
<a name="response-streaming-troubleshoot-curl-error"></a>

Wenn Sie eine Integration testen und der Fehler angezeigt wird, stellen Sie sicher`curl: (18) transfer closed with outstanding read data remaining`, dass das Timeout Ihrer Integration lang genug ist. Wenn Sie eine Lambda-Funktion verwenden, müssen Sie das Antwort-Timeout der Lambda-Funktion aktualisieren. Weitere Informationen finden Sie unter [Lambda-Funktions-Timeout konfigurieren](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).

## Problembehandlung mithilfe der Zugriffsprotokollierung
<a name="response-streaming-troubleshoot-access-logging"></a>

Sie können Zugriffsprotokolle für Ihre REST-API-Phase verwenden, um Ihren Antwortstream zu protokollieren und Fehler zu beheben. Zusätzlich zu den vorhandenen Variablen können Sie die folgenden Zugriffsprotokollvariablen verwenden:

`$context.integration.responseTransferMode`  
Der Antwortübertragungsmodus Ihrer Integration. Dies kann entweder `BUFFERED` oder `STREAMED`sein.

`$context.integration.timeToAllHeaders`  
Die Zeit zwischen dem Zeitpunkt, zu dem API Gateway die Integrationsverbindung herstellt, und dem Empfang aller Integrationsantwort-Header vom Client.

`$context.integration.timeToFirstContent`  
Die Zeit zwischen dem Zeitpunkt, zu dem API Gateway die Integrationsverbindung herstellt, und dem Empfang der ersten Inhaltsbytes.

`$context.integration.latency` oder `$context.integrationLatency`  
Der Zeitpunkt, zu dem API Gateway die Integrationsverbindung herstellt, bis der Integrationsantwortstream abgeschlossen ist.

Die folgende Abbildung zeigt, wie diese Zugriffsprotokollvariablen verschiedene Komponenten eines Antwortstreams darstellen.

![\[Zugriffs-Log-Variablen für das Antwort-Streaming in API Gateway\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/images/response-streaming-figure.png)


Weitere Informationen zu Zugriffsprotokollen finden Sie unter [Richten Sie die CloudWatch Protokollierung für REST APIs in API Gateway ein](set-up-logging.md). Sie können X-Ray auch verwenden, um Ihren Antwortstream zu überwachen. Weitere Informationen finden Sie unter [Benutzeranforderungen für Ablaufverfolgung an REST-APIs mithilfe von X-Ray in API Gateway](apigateway-xray.md).