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 eines Webhook-Endpunkts mithilfe einer Lambda-Funktions-URL
In diesem Tutorial erstellen Sie eine Lambda-Funktions-URL, um einen Webhook-Endpunkt zu implementieren. Ein Webhook ist eine einfache, ereignisgesteuerte Kommunikation, die automatisch Daten zwischen Anwendungen über HTTP sendet. Sie können einen Webhook verwenden, um sofort über Ereignisse in einem anderen System informiert zu werden, z. B. wenn sich ein neuer Kunde auf einer Website anmeldet, eine Zahlung bearbeitet oder eine Datei hochgeladen wird.
Mit Lambda können Webhooks entweder mithilfe der Lambda-Funktion URLs oder des API Gateway implementiert werden. Function ist eine gute Wahl für einfache Webhooks, für die keine Funktionen wie erweiterte Autorisierung oder Anforderungsvalidierung erforderlich URLs sind.
Tipp
Wenn Sie sich nicht sicher sind, welche Lösung für Ihren speziellen Anwendungsfall am besten geeignet ist, finden Sie weitere Informationen unterWählen Sie eine Methode, um Ihre Lambda-Funktion über eine HTTP-Anfrage aufzurufen.
Voraussetzungen
Um dieses Tutorial abzuschließen, müssen Sie entweder Python (Version 3.8 oder höher) oder Node.js (Version 18 oder höher) auf Ihrem lokalen Computer installiert haben.
Um den Endpunkt mithilfe einer HTTP-Anfrage zu testen, verwendet das Tutorial curl
So erstellen Sie die Lambda-Funktion:
Erstellen Sie zunächst die Lambda-Funktion, die ausgeführt wird, wenn eine HTTP-Anfrage an Ihren Webhook-Endpunkt gesendet wird. In diesem Beispiel sendet die sendende Anwendung jedes Mal eine Aktualisierung, wenn eine Zahlung eingereicht wird, und gibt im Hauptteil der HTTP-Anfrage an, ob die Zahlung erfolgreich war. Die Lambda-Funktion analysiert die Anfrage und ergreift entsprechend dem Status der Zahlung Maßnahmen. In diesem Beispiel druckt der Code lediglich die Bestellnummer für die Zahlung, aber in einer echten Anwendung könnten Sie die Bestellung zu einer Datenbank hinzufügen oder eine Benachrichtigung senden.
Die Funktion implementiert auch die am häufigsten verwendete Authentifizierungsmethode für Webhooks, die Hash-basierte Nachrichtenauthentifizierung (HMAC). Bei dieser Methode teilen sich sowohl die sendende als auch die empfangende Anwendung einen geheimen Schlüssel. Die sendende Anwendung verwendet einen Hashing-Algorithmus, um mithilfe dieses Schlüssels zusammen mit dem Nachrichteninhalt eine eindeutige Signatur zu generieren, und fügt die Signatur als HTTP-Header in die Webhook-Anforderung ein. Die empfangende Anwendung wiederholt dann diesen Schritt, generiert die Signatur mithilfe des geheimen Schlüssels und vergleicht den resultierenden Wert mit der Signatur, die im Anforderungsheader gesendet wurde. Wenn das Ergebnis übereinstimmt, wird die Anfrage als legitim angesehen.
Erstellen Sie die Funktion mithilfe der Lambda-Konsole mit der Python- oder Node.js Runtime.
Erstellen Sie den geheimen Schlüssel
Damit die Lambda-Funktion die Webhook-Anfrage authentifiziert, verwendet sie einen geheimen Schlüssel, den sie mit der aufrufenden Anwendung teilt. In diesem Beispiel wird der Schlüssel in einer Umgebungsvariablen gespeichert. In einer Produktionsanwendung empfehlen wir die Verwendung AWS Secrets Manager als sicherere Option. Weitere Informationen zur Verwendung von Secrets Manager zum Speichern geheimer Schlüssel finden Sie unter Create an AWS Secrets Manager Secret und Get Secrets from AWS Secrets Manager im AWS Secrets Manager Benutzerhandbuch.
Erstellen und speichern Sie den geheimen Webhook-Schlüssel
-
Generieren Sie eine lange, zufällige Zeichenfolge mit einem kryptografisch sicheren Zufallszahlengenerator. Sie können die folgenden Codefragmente in Python oder Node.js verwenden, um ein 32-stelliges Geheimnis zu generieren und auszudrucken, oder Sie können Ihre eigene bevorzugte Methode verwenden.
-
Speichern Sie Ihre generierte Zeichenfolge als Umgebungsvariable für Ihre Funktion, indem Sie wie folgt vorgehen:
-
Wählen Sie auf der Registerkarte Konfiguration für Ihre Funktion die Option Umgebungsvariablen aus.
-
Wählen Sie Edit (Bearbeiten) aus.
-
Wählen Sie Umgebungsvariablen hinzufügen aus.
-
Geben Sie für Schlüssel
WEBHOOK_SECRET
und dann für Wert das Geheimnis ein, das Sie im vorherigen Schritt generiert haben. -
Wählen Sie Save (Speichern) aus.
-
Sie müssen dieses Geheimnis später im Tutorial erneut verwenden, um Ihre Funktion zu testen. Notieren Sie es sich also jetzt.
Erstellen Sie den URL-Endpunkt der Funktion
Erstellen Sie mithilfe einer Lambda-Funktions-URL einen Endpunkt für Ihren Webhook. Da Sie den Authentifizierungstyp von verwenden, NONE
um einen Endpunkt mit öffentlichem Zugriff zu erstellen, kann jeder, der die URL hat, Ihre Funktion aufrufen. Weitere Informationen zur Steuerung des Zugriffs auf Funktionen URLs finden Sie unter. Kontrolle des Zugriffs auf Lambda-Funktions-URLs Wenn Sie erweiterte Authentifizierungsoptionen für Ihren Webhook benötigen, sollten Sie API Gateway verwenden.
Erstellen Sie den URL-Endpunkt der Funktion
-
Wählen Sie auf der Registerkarte Konfiguration für Ihre Funktion die Option Funktions-URL aus.
-
Wählen Sie Funktions-URL erstellen.
-
Wählen Sie als Authentifizierungstyp die Option NONE aus.
-
Wählen Sie Save (Speichern) aus.
Der Endpunkt für die Funktions-URL, die Sie gerade erstellt haben, wird im Bereich Funktions-URL angezeigt. Kopieren Sie den Endpunkt, um ihn später im Tutorial zu verwenden.
Testen Sie die Funktion in der Konsole
Bevor Sie eine HTTP-Anfrage verwenden, um Ihre Funktion über den URL-Endpunkt aufzurufen, testen Sie sie in der Konsole, um sicherzustellen, dass Ihr Code wie erwartet funktioniert.
Um die Funktion in der Konsole zu überprüfen, berechnen Sie zunächst eine Webhook-Signatur anhand des Geheimnisses, das Sie zuvor im Tutorial generiert haben, mit der folgenden Test-JSON-Payload:
{ "type": "payment.success", "orderId": "1234", "amount": "99.99" }
Verwenden Sie eines der folgenden Python- oder Node.js- Codebeispiele, um die Webhook-Signatur unter Verwendung Ihres eigenen Geheimnisses zu berechnen.
Sie können Ihren Funktionscode jetzt mit einer Test-HTTP-Anfrage in der Konsole testen.
Testen Sie die Funktion in der Konsole
-
Wählen Sie die Registerkarte Code für Ihre Funktion aus.
-
Wählen Sie im Abschnitt TESTEREIGNISSE die Option Neues Testereignis erstellen
-
Geben Sie als Event name (Ereignisname) die Zeichenfolge
myEvent
ein. -
Ersetzen Sie das vorhandene JSON, indem Sie Folgendes kopieren und in den Bereich Event-JSON einfügen. Ersetzen Sie die Webhook-Signatur durch den Wert, den Sie im vorherigen Schritt berechnet haben.
{ "headers": { "Content-Type": "application/json", "x-webhook-signature": "
2d672e7a0423fab740fbc040e801d1241f2df32d2ffd8989617a599486553e2a
" }, "body": "{\"type\": \"payment.success\", \"orderId\": \"1234\", \"amount\": \"99.99\"}" } -
Wählen Sie Save (Speichern) aus.
-
Wählen Sie aufrufen aus.
Die Ausgabe sollte folgendermaßen oder ähnlich aussehen:
Testen Sie die Funktion mit einer HTTP-Anfrage
Verwenden Sie das Befehlszeilentool curl, um Ihren Webhook-Endpunkt zu testen.
Testen Sie die Funktion mithilfe von HTTP-Anfragen
-
Führen Sie in einem Terminal- oder Shell-Programm den folgenden curl-Befehl aus. Ersetzen Sie die URL durch den Wert für Ihren eigenen Funktions-URL-Endpunkt und ersetzen Sie die Webhook-Signatur durch die Signatur, die Sie mit Ihrem eigenen geheimen Schlüssel berechnet haben.
curl -X POST
https://ryqgmbx5xjzxahif6frvzikpre0bpvpf.lambda-url.us-west-2.on.aws/
\ -H "Content-Type: application/json" \ -H "x-webhook-signature:d5f52b76ffba65ff60ea73da67bdf1fc5825d4db56b5d3ffa0b64b7cb85ef48b
" \ -d '{"type": "payment.success", "orderId": "1234", "amount": "99.99"}'Die Ausgabe sollte folgendermaßen aussehen:
{"received": true}
-
Prüfen Sie die CloudWatch Protokolle Ihrer Funktion, um sicherzustellen, dass sie die Nutzlast korrekt analysiert hat. Gehen Sie dazu wie folgt vor:
-
Öffnen Sie die Gruppenseite Logs
in der CloudWatch Amazon-Konsole. -
Wählen Sie die Protokollgruppe Ihrer Funktion aus (
/aws/lambda/myLambdaWebhook
). -
Wählen Sie den neuesten Protokoll-Stream.
In den Protokollen Ihrer Funktion sollten Sie eine Ausgabe sehen, die der folgenden ähnelt:
-
-
Vergewissern Sie sich, dass Ihr Code eine ungültige Signatur erkennt, indem Sie den folgenden curl-Befehl ausführen. Ersetzen Sie die URL durch Ihren eigenen Funktions-URL-Endpunkt.
curl -X POST
https://ryqgmbx5xjzxahif6frvzikpre0bpvpf.lambda-url.us-west-2.on.aws/
\ -H "Content-Type: application/json" \ -H "x-webhook-signature: abcdefg" \ -d '{"type": "payment.success", "orderId": "1234", "amount": "99.99"}'Die Ausgabe sollte folgendermaßen aussehen:
{"error": "Invalid signature"}
Bereinigen Ihrer Ressourcen
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 Lambda-Funktion:
-
Öffnen Sie die Seite Funktionen
der Lambda-Konsole. -
Wählen Sie die Funktion aus, die Sie erstellt haben.
-
Wählen Sie Aktionen, Löschen aus.
-
Geben Sie
confirm
in das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.
Als Sie die Lambda-Funktion in der Konsole erstellt haben, hat Lambda auch eine Ausführungsrolle für Ihre Funktion erstellt.
So löschen Sie die Ausführungsrolle
-
Öffnen Sie die Seite Roles (Rollen)
in der IAM-Konsole. -
Wählen Sie die Ausführungsrolle aus, die Lambda erstellt hat. Die Rolle hat das Namensformat
myLambdaWebhook-role-<random string>
. -
Wählen Sie Löschen.
-
Geben Sie den Namen der Rolle in das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.