

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.

# Tutorial: Erstellen einer Lambda-Funktion zum Streamen von Antworten mit einer Funktions-URL
<a name="response-streaming-tutorial"></a>

In diesem Tutorial erstellen Sie eine Lambda-Funktion, die als ZIP-Dateiarchiv mit einem Funktions-URL-Endpunkt definiert ist, der einen Antwort-Stream zurückgibt. Weitere Hinweise zur Konfiguration der Funktion URLs finden Sie unter[Funktion URLs](urls-configuration.md).

## Voraussetzungen
<a name="response-streaming-prepare"></a>

In diesem Tutorial wird davon ausgegangen, dass Sie über Kenntnisse zu den grundlegenden Lambda-Operationen und der Lambda-Konsole verfügen. Sofern noch nicht geschehen, befolgen Sie die Anweisungen unter [Erstellen einer Lambda-Funktion mit der Konsole](getting-started.md#getting-started-create-function), um Ihre erste Lambda-Funktion zu erstellen.

Um die folgenden Schritte durchzuführen, benötigen Sie die [AWS CLI Version 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). Befehle und die erwartete Ausgabe werden in separaten Blöcken aufgeführt:

```
aws --version
```

Die Ausgabe sollte folgendermaßen aussehen:

```
aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2
```

Bei langen Befehlen wird ein Escape-Zeichen (`\`) wird verwendet, um einen Befehl über mehrere Zeilen zu teilen.

Verwenden Sie auf Linux und macOS Ihren bevorzugten Shell- und Paket-Manager.

**Anmerkung**  
In Windows werden einige Bash-CLI-Befehle, die Sie häufig mit Lambda verwenden (z. B. `zip`), von den integrierten Terminals des Betriebssystems nicht unterstützt. Um eine in Windows integrierte Version von Ubuntu und Bash zu erhalten, [installieren Sie das Windows-Subsystem für Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10). Die CLI-Beispielbefehle in diesem Handbuch verwenden die Linux-Formatierung. Befehle, die Inline-JSON-Dokumente enthalten, müssen neu formatiert werden, wenn Sie die Windows-CLI verwenden. 

## Erstellen einer Ausführungsrolle
<a name="response-streaming-create-iam-role"></a>

Erstellen Sie die [Ausführungsrolle](lambda-intro-execution-role.md) die Ihrer Lambda-Funktion die Berechtigung für den Zugriff auf AWS -Ressourcen erteilt.

**So erstellen Sie eine Ausführungsrolle**

1. Öffnen Sie die Seite [Rollen](https://console.aws.amazon.com/iam/home#/roles) der AWS Identity and Access Management (IAM)-Konsole.

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

1. Erstellen Sie eine Rolle mit den folgenden Eigenschaften:
   + **Vertrauenswürdiger Entitätstyp** – **AWS -Service**
   + **Anwendungsfall** – **Lambda**
   + **Berechtigungen** – **AWSLambdaBasicExecutionRole**
   + **Role name (Name der Rolle** – **response-streaming-role**

Die **AWSLambdaBasicExecutionRole**Richtlinie verfügt über die Berechtigungen, die die Funktion benötigt, um Protokolle in Amazon CloudWatch Logs zu schreiben. Nachdem Sie die Rolle erstellt haben, notieren Sie sich den Amazon-Ressourcennamen (ARN). Sie benötigen ihn im nächsten Schritt.

## Erstellen Sie eine Antwort-Streaming-Funktion (AWS CLI)
<a name="response-streaming-tutorial-create-function-cli"></a>

Erstellen Sie eine Antwort-Streaming-Lambda-Funktion mit einem Funktions-URL-Endpunkt unter Verwendung der AWS Command Line Interface (AWS CLI).

**Um eine Funktion zu erstellen, die Antworten streamen kann**

1. Kopieren Sie das folgende Codebeispiel in eine Datei mit dem Namen `index.js`. Diese Funktion streamt drei Antworten im Abstand von 1 Sekunde.

   ```
   exports.handler = awslambda.streamifyResponse(
   	async (event, responseStream, _context) => {
   		// Metadata is a JSON serializable JS object. Its shape is not defined here.
   		const metadata = {
   		statusCode: 200,
   		headers: {
   			"Content-Type": "application/json",
   			"CustomHeader": "outerspace"
   		}
   		};
   	
   		// Assign to the responseStream parameter to prevent accidental reuse of the non-wrapped stream.
   		responseStream = awslambda.HttpResponseStream.from(responseStream, metadata);
   	
   		responseStream.write("Streaming with Helper \n");
   		await new Promise(r => setTimeout(r, 1000));
   		responseStream.write("Hello 0 \n");
   		await new Promise(r => setTimeout(r, 1000));
   		responseStream.write("Hello 1 \n");
   		await new Promise(r => setTimeout(r, 1000));
   		responseStream.write("Hello 2 \n");
   		await new Promise(r => setTimeout(r, 1000));
   		responseStream.end();
   		await responseStream.finished();
   	}
     );
   ```

1. Erstellen Sie ein Bereitstellungspaket.

   ```
   zip function.zip index.js
   ```

1. Erstellen Sie eine Lambda-Funktion mit dem Befehl `create-function`. Ersetzen Sie den Wert von `--role` durch den Rollen-ARN aus dem vorherigen Schritt. Mit diesem Befehl wird das Funktions-Timeout auf 10 Sekunden festgelegt, sodass die Funktion drei Antworten streamen kann.

   ```
   aws lambda create-function \
     --function-name my-streaming-function \
     --runtime nodejs24.x \
     --zip-file fileb://function.zip \
     --handler index.handler \
     --timeout 10 \
     --role arn:aws:iam::123456789012:role/response-streaming-role
   ```

**Um eine Funktions-URL zu erstellen**

1. Fügen Sie Ihrer Funktion eine ressourcenbasierte Richtlinie hinzu, die die Berechtigungen `lambda:InvokeFunctionUrl` und `lambda:InvokeFunction` gewährt. Jede Anweisung muss in einem separaten Befehl hinzugefügt werden. Ersetzen Sie den Wert von `--principal` durch Ihre AWS-Konto ID.

   ```
   aws lambda add-permission \
     --function-name my-streaming-function \
     --action lambda:InvokeFunctionUrl \
     --statement-id UrlPolicyInvokeURL \
     --principal 123456789012 \
     --function-url-auth-type AWS_IAM
   ```

   ```
   aws lambda add-permission \
       --function-name my-streaming-function \
       --action lambda:InvokeFunction \
       --statement-id UrlPolicyInvokeFunction \
       --principal 123456789012
   ```

1. Erstellen Sie einen URL-Endpunkt für die Funktion mit dem Befehl `create-function-url-config`.

   ```
   aws lambda create-function-url-config \
     --function-name my-streaming-function \
     --auth-type AWS_IAM \
     --invoke-mode RESPONSE_STREAM
   ```
**Anmerkung**  
Wenn Sie eine Fehlermeldung über `--invoke-mode` erhalten, müssen Sie möglicherweise auf eine [neuere Version der AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) aktualisieren.

## Testen des Funktions-URL-Endpunkts
<a name="response-streaming-tutorial-test"></a>

Testen Sie Ihre Integration, indem Sie Ihre Funktion aufrufen. Sie können die URL Ihrer Funktion in einem Browser öffnen oder curl verwenden.

```
curl --request GET "https://abcdefghijklm7nop7qrs740abcd.lambda-url.us-east-1.on.aws/" --user "AKIAIOSFODNN7EXAMPLE" --aws-sigv4 "aws:amz:us-east-1:lambda" --no-buffer
```

Unsere Funktions-URL nutzt den Authentifizierungstyp `IAM_AUTH`. Dies bedeutet, dass Sie Anfragen sowohl mit Ihrem [AWS -Zugriffsschlüssel](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) als auch mit Ihrem geheimen Schlüssel signieren müssen. Ersetzen Sie ihn im vorherigen Befehl `AKIAIOSFODNN7EXAMPLE` durch die AWS Zugriffsschlüssel-ID. Geben Sie Ihren AWS geheimen Schlüssel ein, wenn Sie dazu aufgefordert werden. Wenn Sie Ihren AWS geheimen Schlüssel nicht haben, können Sie stattdessen [temporäre AWS Anmeldeinformationen verwenden](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html).

Das Ergebnis sollte ungefähr wie folgt aussehen:

```
Streaming with Helper 
Hello 0 
Hello 1
Hello 2
```

## Bereinigen Ihrer Ressourcen
<a name="cleanup"></a>

Sie können jetzt die Ressourcen, die Sie für dieses Tutorial erstellt haben, löschen, es sei denn, Sie möchten sie behalten. Durch das Löschen von AWS Ressourcen, die Sie nicht mehr verwenden, vermeiden Sie unnötige Kosten für Ihre AWS-Konto.

**So löschen Sie die Ausführungsrolle**

1. Öffnen Sie die Seite [Roles](https://console.aws.amazon.com/iam/home#/roles) in der IAM-Konsole.

1. Wählen Sie die von Ihnen erstellte Ausführungsrolle aus.

1. Wählen Sie **Löschen** aus.

1. Geben Sie den Namen der Rolle in das Texteingabefeld ein und wählen Sie **Delete** (Löschen) aus.

**So löschen Sie die Lambda-Funktion:**

1. Öffnen Sie die Seite [Funktionen](https://console.aws.amazon.com/lambda/home#/functions) der Lambda-Konsole.

1. Wählen Sie die Funktion aus, die Sie erstellt haben.

1. Wählen Sie **Aktionen**, **Löschen** aus.

1. Geben Sie **confirm** in das Texteingabefeld ein und wählen Sie **Delete** (Löschen) aus.