AWS Germany – Amazon Web Services in Deutschland
Anreicherung und Anpassung von Benachrichtigungen mit Amazon EventBridge Pipes
Von Elie Elmalem, übersetzt von Marco Jahn, Sr. Solutions Architect, AWS
Bei der Implementierung ereignisgesteuerter Architekturen müssen Kunden häufig ihre eingehenden Ereignisse mit zusätzlichen Informationen anreichern, um sie für nachgelagerte Konsumenten wertvoller zu machen. Bisher haben Kunden, die Amazon EventBridge nutzen, dies durch das Schreiben von AWS Lambda-Funktionen erreicht, um ihre Ereignisse mit ergänzenden Daten anzureichern. Dieser Ansatz erfordert jedoch das Schreiben und Warten von eigenem Code, was die Komplexität ihrer Ereignisverarbeitungs-Pipeline erhöht.
Amazon EventBridge Pipes vereinfacht diesen Prozess durch einen optimierten, verwalteten Service zur Ereignisanreicherung, ohne dass eigene Lambda-Funktionen geschrieben und verwaltet werden müssen. Dieser Blogbeitrag zeigt, wie Sie die integrierten Funktionen zur Datenanreicherung von EventBridge Pipes nutzen können, um Ihre Ereignisse dynamisch mit zusätzlichem Kontext und kundenspezifischen Details anzureichern. Dies macht die Ereignisverarbeitung effizienter und wartungsfreundlicher.
Amazon EventBridge Pipes
Amazon EventBridge erstellt eine direkte Verbindung zwischen Quellen und Zielen. Die Verwendung eines EventBridge-Busses hilft Ihnen dabei, Ereignisse nach dem Pub/Sub-Muster an Services weiterzuleiten und zu verteilen. EventBridge Pipes hingegen unterstützt Sie bei Point-to-Point-Service-Integrationsmustern. Was es vom traditionellen Event-Bus/Rule-Muster unterscheidet, ist die Unterstützung von Datentransformation und -anreicherung.
Bei der Definition von EventBridge Pipes geben Sie die Quelle und das Ziel der Pipeline an. Pipes unterstützt eine Vielzahl von Quellen und Zielen. Zwischen Quelle und Ziel bietet EventBridge Pipes Funktionen zur Filterung und Anreicherung. Die Filterung ermöglicht es Ihnen, eine gezielte Teilmenge von Ereignissen auszuwählen und zu verarbeiten. Die Anreicherung erlaubt es Ihnen, Daten durch Hinzufügen fehlender Informationen zu erweitern, bevor sie an ein Ziel gesendet werden. Wenn einem Ereignis beispielsweise notwendige Informationen fehlen, wird sichergestellt, dass das Ziel das Ereignis ordnungsgemäß verarbeiten kann. Die Datenanreicherung kann sehr leistungsfähig sein, da sie es ermöglicht, ein generisches Ereignis zu erweitern und zu transformieren. EventBridge Pipes unterstützt die Anreicherung mittels Lambda-Funktionen, AWS Step Functions, Amazon API Gateway und EventBridge-API-Zielen. Weitere Details zu diesen Konzepten finden Sie in der Amazon EventBridge Pipes-Konzeptdokumentation.
Dieser Blogbeitrag wird den Anreicherungsschritt der Pipeline nutzen, um benutzerdefinierte Benachrichtigungen zu erstellen.
Überblick
Um die Funktionalität zu veranschaulichen, verwendet dieser Beitrag ein Anwendungsbeispiel eines Bekleidungshändlers. Unternehmen wie dieser Händler möchten ihre treuen Kunden aktiv einbinden. Häufig verlassen sie sich dabei auf Massen-Werbe-E-Mails ohne Personalisierung. In diesem Anwendungsfall möchte der Händler gezielte Aktionscodes versenden. Sobald die zehnte Bestellung aufgegeben wird, wird der Code per E-Mail oder SMS an den Kunden gesendet.
Ohne EventBridge Pipes würde dies mit EventBridge implementiert werden, um auf das Bestellereignis zu reagieren. Alle Ereignisse werden an eine eigene Lambda-Funktion zur Verarbeitung gesendet. Wenn die Bestellung die richtigen Bedingungen erfüllt, sendet die Lambda-Funktion eine Benachrichtigung mit dem Rabattcode an den Kunden über Amazon Simple Notification Service (Amazon SNS).
Obwohl diese Architektur funktioniert, müssen Sie sowohl den Integrationscode als auch die Logik zur Datenanreicherung innerhalb der Lambda-Funktion warten, da die Funktion die erforderlichen Informationen aus den Ereignissen extrahieren und das Routing zu SNS verwalten muss. Je mehr Microservices diesem Muster folgen, desto komplexer wird der Code. Dies kann zu längeren Ausführungszeiten sowie höheren Kosten und größerem Wartungsaufwand führen.
Vereinfachung durch Amazon EventBridge Pipes
Amazon EventBridge Pipes kann verwendet werden, um die vorherige Implementierung zu vereinfachen, indem es die Anreicherung und Integration zwischen Services übernimmt. Amazon EventBridge Pipes sorgt dafür, dass das Ereignis an Ihren konfigurierten Anreicherungsschritt gesendet und das angereicherte Ereignis zum Ziel weitergeleitet wird. Wenn die gewählte Methode eine Lambda-Funktion ist, kann sich der Funktionscode ausschließlich auf die Anreicherungslogik konzentrieren. Dies macht Code zum Extrahieren der notwendigen Felder aus dem Ereignis und zum Senden von Benachrichtigungen überflüssig.
Hier ist die Architektur für den aktualisierten Ablauf:
- Ein Kunde bestellt einen neuen Artikel. Die Bestellung wird an eine Simple Queue Service (SQS) Bestellwarteschlange gesendet.
- Die neue Nachricht in der Bestellwarteschlange löst EventBridge Pipes aus.
- Die Pipeline triggert eine AWS Lambda-Funktion zur Datenanreicherung.
- Die Funktion prüft in einer Amazon DynamoDB-Tabelle, ob der Kunde für einen Rabattcode berechtigt ist. Die Tabelle enthält die Anzahl der Bestellungen jedes Kunden.
- Die Lambda-Funktion gibt die individuelle Nachricht zurück, die an den Kunden gesendet wird – entweder mit oder ohne Rabattcode.
- Die Nachricht wird durch die EventBridge Pipeline an ein SNS-Topic weitergeleitet.
- Der Kunde erhält die Benachrichtigung über seine bevorzugte Benachrichtigungsmethode.
Aufbau des aktualisierten Ablaufs
Für den Aufbau des aktualisierten Ablaufs habe ich mich für das AWS Cloud Development Kit (CDK) in Python entschieden. Sie können den hier bereitgestellten Code verwenden, um ihn in Ihrem Konto zu implementieren. Der Code ist auch auf GitHub verfügbar.
Hinweis: Dieser Beispielcode ist nur für Testzwecke gedacht und nicht für den Einsatz in einem Produktionskonto vorgesehen.
Für diese Lösung benötigen Sie die folgenden Voraussetzungen:
- Die AWS Command Line Interface (CLI) muss installiert und für die Verwendung konfiguriert sein.
- Eine Identity and Access Management (IAM)-Rolle oder einen IAM-Benutzer mit ausreichenden Berechtigungen zum Erstellen einer IAM-Richtlinie, DynamoDB-Tabelle, SQS-Warteschlange, SNS-Topic, Lambda-Funktion und EventBridge Pipes.
- AWS CDK
- Python Version 3.9 oder höher, mit pip und virtual virtualenv.
Sobald die Voraussetzungen erfüllt sind, richten Sie ein neues Python-CDK-Projekt in einem leeren Verzeichnis ein:
mkdir blog_code
cd blog_code
cdk init app –-language python
Aktivieren Sie anschließend die virtuelle Umgebung und installieren Sie die CDK-Abhängigkeiten:
source .venv/bin/activate
python -m pip install -r requirements.txt
Der Befehl cdk init erstellt einen Ordner namens „blog_code“. Das GitHub-Repository enthält den Code für die Datei „blog_code_stack.py“ innerhalb des blog_code-Ordners.
Erstellen Sie dann innerhalb des blog_code-Ordners einen neuen Ordner mit dem Namen „lambda“. Erstellen Sie in diesem neuen Ordner eine Datei namens „index.py“. Diese Datei wird den Code für die Anreicherungs-Lambda-Funktion enthalten. Auch dieser Code ist im GitHub-Repository zu finden. Hier ist ein Ausschnitt des Lambda-Codes:
def lambda_handler(event, context):
message = json.loads(event[0]['body'])
id = message['id']
order_content = message['order_content']
nmb_orders = get_number_of_orders(id)
# Calculate orders left
orders_left = MAX_ORDERS - nmb_orders
# Update the DynamoDB table with the new number of orders
if nmb_orders == MAX_ORDERS:
update_table(id, 0)
else:
update_table(id, nmb_orders)
if orders_left == 0:
return [f"Thank you for your order of {order_content}. You have earned a 10% discount code on your next order: XA5GT2SF"]
else:
# Return the confirmation message
return [f"Thank you for your order of {order_content}. This is your confirmation message! Only {orders_left} orders left until a 10% discount!"]
Die Lambda-Funktion arbeitet wie folgt:
- Sie empfängt ein Ereignis von der EventBridge Pipeline, das aus der Bestellung und der ID des Benutzers besteht, der die Bestellung aufgegeben hat
- Sie ermittelt die Anzahl der Bestellungen, die der Benutzer bereits aufgegeben hat, indem sie einen GetItem-Befehl für die DynamoDB-Tabelle ausführt
- Sie berechnet, wie viele Bestellungen noch fehlen, bevor der Benutzer den Rabattcode erhält
- Sie aktualisiert die DynamoDB-Tabelle mit der neuen Anzahl an Bestellungen unter Berücksichtigung der gerade aufgegebenen Bestellung
- Wenn der Benutzer die richtige Anzahl an Bestellungen aufgegeben hat, gibt sie eine Bestätigungsnachricht mit dem Rabattcode zurück. Andernfalls informiert sie den Benutzer darüber, wie viele Bestellungen noch aufgegeben werden müssen, um den Rabatt zu erhalten
Implementieren Sie nun den CDK-Stack in Ihrem Konto. Stellen Sie sicher, dass Sie sich im Hauptverzeichnis Ihres Projekts befinden:
cdk bootstrap
cdk deploy
Sobald die Stack-Bereitstellung abgeschlossen ist, finden Sie eine EventBridge-Pipeline in der Konsole sichtbar, indem Sie zur EventBridge-Konsolenseite gehen und im linken Panel auf „Pipes“ klicken.
Testen der Lösung
Um die Lösung zu testen, müssen Sie zunächst ein Abonnement für das SNS-Topic einrichten, um Benachrichtigungen zu erhalten. Für Einfachheit und Testzwecke wird empfohlen, E-Mail-Benachrichtigungen einzurichten. Folgen Sie dazu den Anweisungen in der Amazon SNS-Dokumentation für das Topic mit dem Namen „TargetTopic„. Vergessen Sie nach dem Einrichten des Abonnements nicht, Ihren E-Mail-Posteingang zu überprüfen und das Abonnement zu bestätigen.
Sobald die Benachrichtigungen eingerichtet sind, besuchen Sie die DynamoDB-Konsolenseite. Sie müssen manuell einen Eintrag in der Berechtigungstabelle hinzufügen, um eine reale Umgebung zu simulieren:
- Klicken Sie im linken Panel auf „Tabellen„
- Wählen Sie die Tabelle „EligibilityTable“ aus
- Klicken Sie auf „Tabelleneinträge erkunden“ und dann auf „Eintrag erstellen„
- Geben Sie eine ID mit dem Wert „01“ ein
- Klicken Sie auf „Neues Attribut hinzufügen“ und wählen Sie „String„
- Geben Sie unter Attributname „orders“ ein und unter Wert „8„
- Klicken Sie auf „Eintrag erstellen„
Die Tabelle der zurückgegebenen Einträge sollte wie folgt aussehen. Dies geht davon aus, dass der Kunde bereits 8 Bestellungen aufgegeben hat.
Besuchen Sie nun die SQS-Konsolenseite. Sie müssen eine Nachricht an die Warteschlange senden, um neue Bestellungen zu simulieren.
- Klicken Sie auf die Warteschlange mit dem Namen „SourceQueue„.
- Klicken Sie auf „Nachrichten senden und empfangen„.
- Fügen Sie unter Nachrichtentext die folgende Nachricht ein und klicken Sie auf „Nachricht senden„:
{
"order_content": "large shirt",
"id": "01",
"username": "johndoe01",
"transaction_time": "10:04:00"
}
Nach einigen Minuten sollten Sie eine E-Mail mit der Bestätigung Ihrer Bestellung erhalten, da Ihre Bestellnachricht als neunte Bestellung gezählt wird. Senden Sie die Nachricht erneut, um eine zehnte Bestellung aufzugeben, und Sie sollten Ihren Rabattcode erhalten!
Bereinigung
Um die Ressourcen in Ihrem Konto zu löschen, führen Sie den folgenden Befehl im Hauptverzeichnis Ihres Projekts aus:
cdk destroy
Fazit
Dieser Blogbeitrag zeigte, wie Amazon EventBridge Pipes und dessen Anreicherungsfunktion Ihnen dabei helfen können, maßgeschneiderte Benachrichtigungen zu erstellen. Zunächst wurde die Implementierung mit EventBridge erläutert und anschließend eine vereinfachte Implementierung mit EventBridge Pipes vorgestellt.
Weitere Informationen zu gängigen Mustern für EventBridge Pipes finden Sie unter „Implementing architectural patterns with Amazon EventBridge Pipes“ [EN].
Weitere Serverless-Lernressourcen finden Sie auf Serverless Land [EN]. Um weitere Muster zu finden, gehen Sie direkt zur Serverless Patterns Collection [EN].
Über den Autor
![]() |
Marco Jahn ist Senior Solutions Architect bei Amazon Web Services. Mit über 25 Jahren Berufserfahrung in der Softwareentwicklung und -architektur unterstützt er Kunden dabei, die Cloud zu nutzen, um ihre Ziele zu erreichen, die Digitalisierung zu beschleunigen und mehr Raum für Innovation zu schaffen. Er ist spezialisiert auf Serverless Services und Generative KI-Themen und hilft Kunden dabei, Ideen schnell von der Konzeption in die Produktion zu bringen. |