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.
In diesem Tutorial erstellen Sie eine Serverless-Broadcast-Anwendung mit einer WebSocket-API. Kunden können Nachrichten erhalten, ohne Updates abfragen zu müssen.
In diesem Tutorial sehen Sie, wie Nachrichten an verbundene Clients übertragen werden. Enthalten sind außerdem ein Beispiel für einen Lambda-Genehmiger, eine Scheinintegration und eine Nicht-Proxy-Integration für Step Functions.

Nachdem Sie Ihre Ressourcen mithilfe einer AWS CloudFormation-Vorlage erstellt haben, verwenden Sie die API-Gateway-Konsole zur Erstellung einer WebSocket-API, die in Ihre AWS-Ressourcen integriert wird. Sie fügen Ihrer API einen Lambda-Genehmiger hinzu und erstellen eine AWS-Serviceintegration mit Step Functions, um die Ausführung eines Zustandsautomaten zu starten. Der Zustandsautomat für die Step Functions ruft eine Lambda-Funktion auf, die eine Nachricht an alle verbundenen Clients sendet.
Nachdem Sie Ihre API erstellt haben, testen Sie die Verbindung zu Ihrer API und prüfen, ob Nachrichten gesendet und empfangen werden. Dieses Tutorial nimmt ungefähr 30 Minuten in Anspruch.
Themen
Voraussetzungen
Sie benötigen die folgenden Voraussetzungen:
-
Ein AWS-Konto und einen AWS Identity and Access Management-Benutzer mit Konsolenzugriff. Weitere Informationen finden Sie unter Einrichten der API Gateway.
-
wscat
für einen Verbindungsaufbau zu Ihrer API. Weitere Informationen finden Sie unter Wird verwendetwscat, um eine Verbindung zu einer WebSocket API herzustellen und Nachrichten an diese zu senden.
Wir empfehlen, dass Sie zunächst das WebSocket-Chat-App-Tutorial abschließen, bevor Sie mit diesem Tutorial beginnen. Das WebSocket-Chat-App-Tutorial finden Sie unter Tutorial: Erstellen einer WebSocket-Chat-App mit einer WebSocket-API, Lambda und DynamoDB.
Schritt 1: Erstellen von Ressourcen
Laden Sie die Vorlage für die App-Erstellung für AWS CloudFormation herunter und entzippen Sie diese. Sie verwenden diese Vorlage, um Folgendes zu erstellen:
Lambda-Funktionen, die API-Anforderungen bearbeiten und den Zugriff auf Ihre API genehmigen.
Eine DynamoDB-Tabelle zum Speichern von Client-IDs und der vom Lambda-Genehmiger zurückgegebenen ID des Prinzipal-Benutzers.
Einen Zustandsautomaten für die Step Functions zur Versendung von Nachrichten an verbundene Clients.
So erstellen Sie einen AWS CloudFormation-Stack
Öffnen Sie die AWS CloudFormation-Konsole unter https://console.aws.amazon.com/cloudformation
. -
Wählen Sie Stack erstellen und dann Mit neuen Ressourcen (Standard) aus.
-
Wählen Sie unter Vorlage angeben die Option Vorlagendatei hochladen aus.
-
Wählen Sie die Vorlage aus, die Sie heruntergeladen haben.
-
Wählen Sie Weiter aus.
-
Geben Sie für Stack-Name die Zeichenfolge
websocket-step-functions-tutorial
ein und klicken Sie auf Weiter. -
Wählen Sie in Stack-Optionen konfigurieren die Option Weiter aus.
-
Bestätigen Sie in Funktionen, dass AWS CloudFormation IAM-Ressourcen in Ihrem Konto erstellen darf.
-
Wählen Sie Absenden aus.
AWS CloudFormation stellt die in der Vorlage angegebenen Ressourcen bereit. Die Bereitstellung der Ressourcen kann einige Minuten dauern. Wählen Sie die Registerkarte Ausgaben aus, um die von Ihnen erstellten Ressourcen und deren ARNs zu sehen. Wenn der Status Ihres AWS CloudFormation-Stacks CREATE_COMPLETE ist, können Sie mit dem nächsten Schritt fortfahren.
Schritt 2: Erstellen einer WebSocket-API
Sie erstellen eine WebSocket-API zur Verarbeitung von Client-Verbindungen und Routenanforderungen an die Ressourcen, die Sie in Schritt 1 erstellt haben.
Erstellen einer WebSocket-API
Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway
an. Wählen Sie Create API (API erstellen) aus. Wählen Sie in WebSocket API (WebSocket-API) die Option Build (Entwickeln) aus.
Geben Sie in API name (API-Name)
websocket-step-functions-tutorial
ein.Geben Sie in Route selection expression (Ausdruck für die Routenauswahl)
request.body.action
ein.Der Ausdruck für die Routenauswahl legt die Route fest, die von API Gateway aufgerufen wird, wenn ein Client eine Nachricht sendet.
Wählen Sie Weiter.
Wählen Sie unter Vordefinierte Routen die Optionen $connect hinzufügen, $disconnect hinzufügen und $default hinzufügen aus.
Die Routen $connect und $disconnect sind spezielle Routen, die API Gateway automatisch aufruft, wenn ein Client eine Verbindung zu einer API herstellt oder trennt. API Gateway ruft die $default-Route auf, wenn keine anderen Routen mit einer Anforderung übereinstimmen. Nachdem Sie Ihre API erstellt haben, erstellen Sie eine benutzerdefinierte Route, um eine Verbindung zu den Step Functions herzustellen.
Wählen Sie Weiter.
Gehen Sie für Integration für $connect wie folgt vor:
Wühlen Sie unter Integrationstyp die Option Lambda aus.
-
Unter Lambda-Funktion wählen Sie dann die entsprechende $connect-Lambda-Funktion aus, die Sie in Schritt 1 mit AWS CloudFormation erstellt haben. Der Lambda-Funktionsname sollte mit
websocket-step
beginnen.
Gehen Sie für Integration für $disconnect wie folgt vor:
Wählen Sie unter Integrationstyp die Option Lambda aus.
-
Unter Lambda-Funktion wählen Sie dann die entsprechende $disconnect-Lambda-Funktion aus, die Sie in Schritt 1 mit AWS CloudFormation erstellt haben. Der Lambda-Funktionsname sollte mit
websocket-step
beginnen.
Wählen Sie für Integration für $default die Option Mock aus.
Bei einer Mock-Integration verwaltet API Gateway die Routenantwort ohne ein Integrations-Backend.
Wählen Sie Weiter.
-
Überprüfen Sie die Phase, die API Gateway für Sie erstellt. Standardmäßig erstellt API Gateway eine Stufe namens Produktion und stellt Ihre API automatisch für diese Stufe bereit. Wählen Sie Weiter.
Wählen Sie Create and deploy (Erstellen und bereitstellen) aus.
Schritt 3: Erstellen eines Lambda-Genehmigers
Sie erstellen einen Lambda-Genehmiger, um den Zugriff auf Ihre WebSocket-API zu kontrollieren. Die AWS CloudFormation-Vorlage hat die Lambda-Genehmigerfunktion für Sie erstellt. Sie können die Lambda-Funktion auch in der Lambda-Konsole sehen. Der Name muss mit websocket-step-functions-tutorial-AuthorizerHandler
beginnen. Diese Lambda-Funktion weist alle Aufrufe der WebSocket-API zurück, es sei denn, der Authorization
-Header lautet Allow
. Außerdem übergibt die Lambda-Funktion die $context.authorizer.principalId
-Variable auch an Ihre API, die später in der DynamoDB-Tabelle zur Identifizierung der API-Aufrufer verwendet wird.
In diesem Schritt konfigurieren Sie die $connect-Route zur Verwendung des Lambda-Genehmigers.
Erstellen eines Lambda-Genehmigers
Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway
an. Wählen Sie im Hauptnavigationsbereich Genehmiger.
Klicken Sie auf Genehmiger erstellen.
Geben Sie unter Genehmigername
LambdaAuthorizer
ein.Geben Sie unter Genehmiger-ARN den Namen des mit der AWS CloudFormation-Vorlage erstellten Genehmigers ein. Der Name muss mit
websocket-step-functions-tutorial-AuthorizerHandler
beginnen.Anmerkung
Wir empfehlen, diesen Beispielgenehmiger nicht für Ihre Produktions-APIs zu verwenden.
Wählen Sie unter Identitätsquellentyp die Option Header aus. Geben Sie für Key (Schlüssel)
Authorization
ein.Wählen Sie Autorisierer erstellen.
Nachdem Sie Ihren Genehmiger erstellt haben, hängen Sie ihn an die $connect-Route Ihrer API an.
So fügen Sie einen Genehmiger zu der $connect-Route hinzu
Klicken Sie im Hauptnavigationsbereich auf Routen.
Wählen Sie die $connect-Route aus.
Wählen Sie im Abschnitt Route request settings (Einstellungen der Routenanforderung) die Option Edit (Bearbeiten) aus.
Öffnen Sie das Dropdown-Menü Genehmigung und wählen Sie Ihren Anforderungsgenehmiger aus.
Wählen Sie Änderungen speichern.
Schritt 4: Erstellen einer bidirektionalen Scheinintegration
Als Nächstes erstellen Sie die bidirektionale Scheinintegration für die $default-Route. Mit einer Scheinintegration können Sie eine Antwort an den Client senden, ohne ein Backend zu verwenden. Wenn Sie eine Integration für die $default-Route erstellen, können Sie damit Ihren Kunden zeigen, wie sie mit Ihrer API interagieren können.
Sie konfigurieren die $default-Route, um Clients darüber zu informieren, dass sie die SendMessage-Route verwenden sollen.
So erstellen Sie eine Scheinintegration
Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway
an. Wählen Sie die $default-Route und dann die Registerkarte Integrationsanforderung aus.
Klicken Sie unter Anforderungsvorlagen auf Bearbeiten.
Geben Sie unter Ausdruck für die Vorlagenauswahl
200
ein und klicken Sie dann auf Bearbeiten.Wählen Sie auf der Registerkarte Integrationsanforderung unter Anforderungsvorlagen die Option Vorlage erstellen aus.
Geben Sie unter Vorlagenschlüssel
200
ein.Geben Sie für Vorlagentext die folgende Zuweisungsvorlage ein:
{"statusCode": 200}
Wählen Sie Create template (Vorlage erstellen) aus.
Das Ergebnis sollte wie folgt aussehen:
Wählen Sie im Bereich $default-Route die Option Bidirektionale Kommunikation aktivieren aus.
Wählen Sie die Registerkarte Integrationsantwort und dann Integrationsantwort erstellen aus.
Geben Sie unter Antwortschlüssel
$default
ein.Geben Sie unter Vorlagen-Auswahlausdruck
200
ein.Wählen Sie Create response (Antwort erstellen) aus.
Klicken Sie unter Zuweisungsvorlagen auf Vorlage erstellen.
Geben Sie unter Vorlagenschlüssel
200
ein.Geben Sie für Antwortvorlage die folgende Zuweisungsvorlage ein:
{"Use the sendmessage route to send a message. Connection ID: $context.connectionId"}
Wählen Sie Create template (Vorlage erstellen) aus.
Das Ergebnis sollte wie folgt aussehen:
Schritt 5: Erstellen einer Nicht-Proxy-Integration mit Step Functions
Als Nächstes erstellen Sie eine sendmessage-Route. Kunden können die sendmessage-Route zur Versendung einer Nachricht an alle verbundenen Clients aufrufen. Die sendmessage-Route verfügt über eine Nicht-Proxy-AWS-Serviceintegration mit AWS Step Functions. Die Integration ruft den Befehl StartExecution für die Zustandsmaschine für Step Functions auf, die die AWS CloudFormation-Vorlage für Sie erstellt hat.
So erstellen Sie eine Nicht-Proxy-Integration
Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway
an. Wählen Sie Create route (Route erstellen) aus.
Geben Sie in Route key (Routenschlüssel)
sendmessage
ein.Wählen Sie unter Integrationstyp die Option AWS-Service aus.
Geben Sie unter AWS-Region die Region ein, in der Sie Ihre AWS CloudFormation-Vorlage bereitgestellt haben.
Wählen Sie unter AWS-Service die Option Step Functions aus.
Wählen Sie in HTTP method POST.
Für Aktionsname geben Sie
StartExecution
ein.Geben Sie für Ausführungsrolle die Ausführungsrolle ein, die von der AWS CloudFormation-Vorlage erstellt wurde. Der Name sollte WebSocketTutorialApiRole lauten.
Wählen Sie Create route (Route erstellen) aus.
Als Nächstes erstellen Sie eine Zuweisungsvorlage, um Anforderungsparameter an die Zustandsmaschine für Step Functions zu senden.
Erstellen einer Zuweisungsvorlage
Wählen Sie die sendmessage-Route und dann die Registerkarte Integrationsanforderung aus.
Klicken Sie im Abschnitt Vorlagenanforderung auf Bearbeiten.
Geben Sie unter Vorlagen-Auswahlausdruck
\$default
ein.Wählen Sie Edit (Bearbeiten) aus.
Klicken Sie im Abschnitt Vorlagenanforderung auf Vorlage erstellen.
Geben Sie unter Vorlagenschlüssel
\$default
ein.Geben Sie für Vorlagentext die folgende Zuweisungsvorlage ein:
#set($domain = "$context.domainName") #set($stage = "$context.stage") #set($body = $input.json('$')) #set($getMessage = $util.parseJson($body)) #set($mymessage = $getMessage.message) { "input": "{\"domain\": \"$domain\", \"stage\": \"$stage\", \"message\": \"$mymessage\"}", "stateMachineArn": "arn:aws:states:
us-east-2
:123456789012
:stateMachine:WebSocket-Tutorial-StateMachine" }Ersetzen Sie
StateMachinEarn
mit dem ARN der von AWS CloudFormation erstellten Zustandsmaschine.Die Zuweisungsvorlage führt Folgendes aus:
-
Erzeugt die Variable
$domain
mithilfe der KontextvariabledomainName
. -
Erzeugt die Variable
$stage
mithilfe der Kontextvariablestage
.Die Variablen
$domain
und$stage
sind für die Erzeugung einer Callback-URL erforderlich. Extrahiert die
message
-Eigenschaft aus der eingehendensendmessage
-JSON-Nachricht.-
Erzeugt die Eingabe für den Zustandsautomaten. Die Eingabe ist die Domain und die Stufe der WebSocket-API sowie die Nachricht von der
sendmessage
-Route.
-
-
Wählen Sie Create template (Vorlage erstellen) aus.
Sie können eine Nicht-Proxy-Integration auf den Routen $connect oder $disconnect erstellen, um direkt eine Verbindungs-ID aus der DynamoDB-Tabelle hinzuzufügen oder zu entfernen, ohne eine Lambda-Funktion aufzurufen.
Schritt 6: Ihre API testen
Als Nächstes veröffentlichen und testen Sie Ihre API, um sicherzustellen, dass sie korrekt funktioniert. Sie verwenden den wscat
-Befehl, um eine Verbindung zur API aufzubauen, und dann einen Slash-Befehl, um einen Ping-Frame zu senden, der die Verbindung zur WebSocket-API überprüft.
Stellen Sie Ihre API bereit
Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway
an. Klicken Sie im Hauptnavigationsbereich auf Routen.
Klicken Sie auf Deploy API.
Wählen Sie unter Stufe Produktion aus.
(Optional) Geben Sie unter Bereitstellungsbeschreibung eine Beschreibung ein.
Wählen Sie Bereitstellen.
Nachdem Sie Ihre API bereitgestellt haben, können Sie sie aufrufen. Verwenden Sie die Aufruf-URL, um Ihre API aufzurufen.
So rufen Sie die URL für den Aufruf Ihrer API auf
Wählen Sie Ihre API aus.
Wählen Sie Stages (Phasen) und anschließend production (Produktion) aus.
-
Notieren Sie sich die WebSocket-URL Ihrer API. Die URL sollte wie
wss://
aussehen.abcdef123
.execute-api.us-east-2
.amazonaws.com/production
Jetzt, da Sie Ihre Aufruf-URL haben, können Sie die Verbindung mit Ihrer WebSocket-API testen.
So testen Sie die Verbindung zu Ihrer API
Stellen Sie mit dem folgenden Befehl eine Verbindung zu Ihrer API her. Zuerst testen Sie die Verbindung, indem Sie den
/ping
-Pfad aufrufen.wscat -c wss://
abcdef123
.execute-api.us-east-2
.amazonaws.com/production -H "Authorization: Allow" --slash -PConnected (press CTRL+C to quit)
-
Geben Sie den folgenden Befehl ein, um den Kontrollrahmen anzupingen. Sie können einen Kontrollrahmen für Keepalive-Zwecke von der Client-Seite aus verwenden.
/ping
Das Ergebnis sollte wie folgt aussehen:
< Received pong (data: "")
Jetzt, da Sie die Verbindung getestet haben, können Sie Ihre API auf ordnungsgemäße Funktion prüfen. In diesem Schritt öffnen Sie ein neues Terminalfenster, damit die WebSocket-API eine Nachricht an alle verbundenen Clients senden kann.
So testen Sie Ihre API
-
Öffnen Sie ein neues Terminal. Führen Sie den Befehl
wscat
erneut mit den folgenden Parametern aus.wscat -c wss://
abcdef123
.execute-api.us-east-2
.amazonaws.com/production -H "Authorization: Allow"Connected (press CTRL+C to quit)
-
API Gateway legt basierend auf dem Ausdruck für die Routenanforderungsauswahl Ihrer API fest, welche Route aufgerufen wird. Der Ausdruck für die Routenauswahl Ihrer API lautet
$request.body.action
. Daher ruft API Gateway die Routesendmessage
auf, wenn Sie die folgende Nachricht senden:{"action": "sendmessage", "message": "hello, from Step Functions!"}
Die der Route zugeordnete Zustandsmaschine für Step Functions ruft eine Lambda-Funktion mit der Nachricht und der Callback-URL auf. Die Lambda-Funktion ruft die API-Gateway-Management-API auf und sendet die Nachricht an alle verbundenen Clients. Alle Clients erhalten die folgende Nachricht:
< hello, from Step Functions!
Nachdem Sie Ihre WebSocket-API getestet haben, können Sie die Verbindung zu Ihrer API trennen.
So trennen Sie die Verbindung zu Ihrer API
Zur Trennung der Verbindung zu Ihrer API drücken Sie
CTRL+C
.Wenn ein Client die Verbindung zu Ihrer API trennt, ruft API Gateway die Route $disconnect Ihrer API auf. Die Lambda-Integration der $disconnect-Route Ihrer API entfernt die Verbindungs-ID aus DynamoDB.
Schritt 7: Bereinigen
Um unnötige Kosten zu verhindern, löschen Sie die Ressourcen, die Sie im Rahmen dieses Tutorials erstellt haben. Mit den folgenden Schritten werden Ihr AWS CloudFormation-Stack und Ihre WebSocket-API gelöscht.
So erstellen Sie eine WebSocket-API
Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway
an. Wählen Sie auf der Seite APIs Ihre websocket-api aus.
Wählen Sie Actions (Aktionen) und Delete (Löschen) aus. Bestätigen Sie anschließend Ihre Auswahl.
So löschen Sie einen AWS CloudFormation-Stack
Öffnen Sie die AWS CloudFormation-Konsole unter https://console.aws.amazon.com/cloudformation
. -
Wählen Sie Ihren AWS CloudFormation-Stack aus.
-
Wählen Sie Löschen und bestätigen Sie dann Ihre Auswahl.
Nächste Schritte
Sie können die Erstellung und Bereinigung aller AWS-Ressourcen in diesem Tutorial automatisieren. Ein Beispiel für eine AWS CloudFormation-Vorlage, die diese Aktionen für dieses Tutorial automatisiert, finden Sie unter ws-sfn.zip.