Serverlesspresso - AWS Workshop Hands-On

16.08.2023Jacek Blazynski
Cloud Serverless workshop Amazon Web Services workflow

Eine kurze Bemerkung vorab: Dieses TechUp wurde mit unserem automatischen TechUp Translator von Englisch auf Deutsch übersetzt. Für das beste Verständnis ist es empfohlen, die Englische Version zu lesen. Stelle dazu oben rechts einfach die Sprache auf Englisch um. Viel Spass! 😎

Willkommen zu meinem ersten Tech-Up mit b-nova, bei dem ich dir ein spannendes Serverless Anwendungsbeispiel auf Basis von AWS vorstellen werde, während wir dem AWS Serverlesspresso Hands-On Workshop folgen.

Die AWS-Konsole bietet eine relativ einfache Einrichtung mit vorkonfigurierter Backbone-Infrastruktur, was mir einen positiven Ausblick auf den bevorstehenden Workshop gab. Während du der Anleitung folgst, beginnt die Magie sich zu entfalten. Doch zuerst wollen wir klären, was Serverless überhaupt bedeutet.

Eine kurze Einführung in Serverless

Serverless Computing hat sich seit seiner Entstehung in den frühen 2010er Jahren stark weiterentwickelt. Unternehmen wie AWS, Google und Microsoft haben Serverless Technologien vorangetrieben und damit revolutioniert, wie wir Anwendungen erstellen und bereitstellen. Das Kernprinzip hinter Serverless ist die Abstraktion der Infrastrukturebene, sodass du dich ausschließlich auf deinen Code konzentrieren kannst, ohne dich um das Servermanagement oder das Skalieren kümmern zu müssen. Heute umfasst Serverless auf AWS über 200 voll ausgestattete Dienste, die eine Vielzahl von Technologien, Branchen und Anwendungsfällen bedienen, aber alles begann mit AWS Lambda. Lies mehr über Serverless in unserem dedizierten Serverless TechUp.

Im Jahr 2014 wurde AWS Lambda als einer der ersten Serverless Rechendienste vorgestellt und ebnete den Weg für eine neue Ära des Cloud-Computing. Google zog 2016 mit Google Cloud Functions nach und Microsoft startete im selben Jahr Azure Functions. Um tiefer in die Welt der Serverless-Einblicke einzutauchen, kannst du ausserdem Raffis Serverless Patterns TechUp lesen, um mehr über Patterns zu erfahren.

Was steckt hinter dem Serverlesspresso Workshop

Der AWS Serverlesspresso Workshop wurde erstmals auf der AWS re:Invent Konferenz 2021 präsentiert. Er bot ein unterhaltsames und interaktives Kaffee-Bestellsystem und gab einem die Möglichkeit, die wichtigsten AWS-Serverless-Dienste zu erkunden und die Entwicklung dieser bahnbrechenden Technologie aus erster Hand zu erleben. Man kann einfach einen QR-Code am Tresen scannen, um deinen Lieblingskaffee zu bestellen!

Durch die Teilnahme am Serverlesspresso Workshop erhält man ein besseres Verständnis für den AWS Serverless-Stack. Diese praxisnahe Lernerfahrung ist als Einführung in die Leistungsfähigkeit und Einfachheit von Serverless Technologien konzipiert. Obwohl dieser Workshop nicht in technische Details eintauchen wird, lernt man genug, um selbst aktiv zu werden.

Der Workshop zeigt wichtige AWS-Dienste, mit denen du skalierbare und kosteneffiziente PAYG (Pay-As-You-Go) Anwendungen ohne die Belastung der Serververwaltung erstellen kannst. Im Verlauf des Workshops werden wir mit den folgenden Schlüsseldiensten arbeiten.

AWS-Services während des Workshops verwendet

Amazon API Gateway

Amazon API Gateway

Bildquelle: AWS

Die Reise beginnt mit dem Amazon API Gateway, einem vollständig verwalteten Dienst zum Erstellen, Veröffentlichen und Verwalten von APIs. Es dient als Brücke zwischen der Frontend-Anwendung und Backend-Services wie AWS Lambda und bildet das Rückgrat des Serverlesspresso-Systems. In der Übersicht des Tutorials findest Du hilfreiche Diagramme, um ein besseres Bild davon zu bekommen, wie die zugrunde liegende Plattform für den reibungslosen Betrieb des gesamten Dienstes aufgebaut ist.

AWS Lambda

AWS Lambda

Bildquelle: AWS

Als nächstes kommt AWS Lambda, ein Compute-Dienst, der Code in Reaktion auf Ereignisse ausführt. Mit Lambda kannst Du serverlose Funktionen implementieren, um Kundenbestellungen zu verarbeiten, die Datenbank zu aktualisieren und Benachrichtigungen zu senden, ohne dass Du Server bereitstellen oder verwalten musst. Die Lambda-Funktionen spielen eine zentrale Rolle im Serverlesspresso-System und steuern die Logik hinter jedem Schritt des Bestellvorgangs.

DynamoDB

DynamoDB

Bildquelle: AWS

Im Verlauf des Workshops wirst Du mit Amazon DynamoDB interagieren, einem NoSQL-Datenbankdienst für leistungsfähige und konsistente Datenspeicherung. Im Kontext von Serverlesspresso speichert DynamoDB Bestelldetails, Kundendaten und Aktualisierungen des Baristas und gewährleistet, dass die Daten während des gesamten Bestellvorgangs verfügbar und zugänglich bleiben.

AWS Step Functions

AWS Step Functions

Bildquelle: AWS

Nun konzentrieren wir uns auf den Hauptpunkt des Interesses - AWS Step Functions! Es handelt sich um einen serverlosen Workflow-Dienst zum Koordinieren verteilter Anwendungen. Mit Step Functions lassen sich Informationen zwischen den verschiedenen AWS-Services, die in Serverlesspresso involviert sind, einfach orchestrieren. Mithilfe der visuellen Benutzeroberfläche des Workflow Studios erstellen wir eine State Machine, um die Schritte der Bestellabwicklung zu verwalten, wie zum Beispiel das Empfangen einer Bestellung, die Zubereitung des Kaffees und das Senden einer Abschlussbenachrichtigung an den Kunden.

Amazon EventBridge

Amazon EventBridge

Bildquelle: AWS

Zu guter Letzt stellt der Workshop Amazon EventBridge vor, einen serverlosen Ereignisbus, der entscheidend ist, um Anwendungen mit Datenströmen zu verbinden. EventBridge ermöglicht es, die verschiedenen Komponenten des Serverlesspresso-Systems zu entkoppeln, was es modularer und leichter zu warten macht. Wir werden es so konfigurieren, dass es auf bestimmte Ereignisse wie “Bestellung aufgegeben” oder “Bestellung abgeschlossen” hört. EventBridge ermöglicht eine nahtlose Kommunikation zwischen Lambda-Funktionen, Step Functions und DynamoDB und gewährleistet einen reibungslosen Datenfluss während des gesamten Prozesses.

Was steht auf dem Programm während des Serverlesspresso-Workshops?

Wenn ein Benutzer den QR-Code scannt, um einen Kaffee zu bestellen, wird der AWS Serverlesspresso-Workflow initiiert. Die AWS Step Functions und Amazon EventBridge-Dienste arbeiten zusammen, um den Informationsfluss von den Benutzeroberflächen zur Datenbank und zurück zu orchestrieren. Um den Prozess zu veranschaulichen, sieh Dir die vereinfachte Grafik mit drei visuellen Oberflächen (Bestell-App, Terminal für Baristas und Informationsdisplay) an.

Figure: Quelle: AWS

Lass uns die einzelnen Schritte betrachten, die bei der Bestellung eines Serverlesspresso-Kaffees durchlaufen werden:

  1. Der Benutzer scannt den QR-Code.
  2. Das API Gateway empfängt die Anfrage.
  3. Das API Gateway löst eine Lambda-Funktion aus.
  4. Die Lambda-Funktion erstellt eine neue Bestellung in DynamoDB.
  5. Die Lambda-Funktion initiiert einen Step Functions-Workflow.
  6. Der Workflow verwaltet die einzelnen Schritte der Bestellabwicklung.
  7. Bestellung empfangen.
  8. Kaffeezubereitung.
  9. Benachrichtigung über den Bestellabschluss.
  10. EventBridge lauscht auf spezifische Ereignisse.
  11. Ereignis: Bestellung aufgegeben.
  12. Die Lambda-Funktion verarbeitet die Bestellung.
  13. Ereignis: Kaffee zubereitet.
  14. Die Lambda-Funktion aktualisiert den Bestellstatus in DynamoDB.
  15. Ereignis: Bestellung abgeschlossen.
  16. Die Lambda-Funktion sendet eine Benachrichtigung an den Benutzer.

Da hier eine ganze Menge passiert, wäre es hilfreich, eine Art Diagramm oder Flussdiagramm zu haben, oder? Hier kommen Step Functions ins Spiel!

Erstellung eines Workflows mit der AWS Step Functions Workflow Studio

Das Workflow Studio ist eine visuelle Benutzeroberfläche in der AWS Step Functions-Konsole, die den Prozess des Entwerfens und Erstellens von Workflows vereinfacht. Du kannst mithilfe von Drag-and-Drop-Aktionen visuell State Machines entwerfen, was dir dabei hilft, deine Workflows schneller zu definieren und zu prototypisieren.

Was ist eine State Machine, fragst Du?

Stell dir den Prozess der Kaffeezubereitung vor. Wir benötigen unsere Kaffeebohnen, Wasser und eine saubere Tasse. Wie ist der Zustand der Bohnen? Müssen wir sie vor dem Brühen mahlen? Das Wasser, ist es heiß oder kalt? Müssen wir unsere Lieblingstasse noch waschen? Die State Machine kümmert sich um den gesamten Prozess der Kaffeezubereitung und berücksichtigt dabei alle Zustände. Wenn die von uns festgelegten Bedingungen korrekt sind, können wir darauf vertrauen, dass die State Machine uns mit einer schönen, heißen Tasse unseres Lieblingsgetränks versorgt.

… und jetzt zurück zum Wesentlichen:

In Serverlesspresso haben wir es mit zwei State Machines zu tun: einer namens “OrderProcessorWorkflow”, den wir erstellen müssen, und einer namens “OrderManagerWorkflow”, die bereits eingerichtet ist. Beide orchestrieren die jeweiligen Zustände des Bestellvorgangs. Unsere Hauptaufgabe in diesem Workshop besteht darin, den “OrderProcessorWorkflow” zu vervollständigen, der sich um Folgendes kümmern wird:

  • Überprüfung des Status und der Kapazität des Geschäfts
  • Verwaltung von Ereignissen im Bestell-Lebenszyklus
  • Behandlung von Zeitüberschreitungen bei Kunden und Baristas
  • Generierung von Bestellnummern
  • Aussenden von Ereignissen zur Systemkoordination

Nachdem ich mich an die unhandliche AWS-Konsole gewöhnt hatte, dauerte es einige Stunden, um unsere State Machine abzuschließen. Auf dem Weg gibt es viele Überprüfungspunkte, um sicherzustellen, dass Du nach dem Springen von einem Modul zum anderen auf dem richtigen Weg bist. Am Ende sollte unser Workflow mehr oder weniger so aussehen:

Figure: Quelle: AWS

Der gesamte Workflow wird in ASL (Amazon States Language) definiert und kann in eine JSON- oder YAML-Datei exportiert werden.

Figure: Screenshot of AWS Console

Wenn unsere State Machine fertig ist, ist das großartig. Nun werden wir einige Events und Event-Listener hinzufügen, um sicherzustellen, dass unsere Dienste miteinander in der richtigen Weise kommunizieren können.

EventBridge-Choreographie

Die beiden bereitgestellten State Machines machen umfangreichen Gebrauch von AWS EventBridge als integralen Bestandteil einer ereignisgesteuerten Architektur. EventBridge hilft dabei, Ereignisse zu routen, zu filtern und zu transformieren, und reduziert dabei die Notwendigkeit traditioneller Polling- und Request-Response-Mechanismen. In beiden State Machines wird EventBridge verwendet, um Ereignisse in verschiedenen Phasen des Workflows zu emittieren. Die Ereignisse enthalten relevante Daten wie Task Tokens, Benutzer-IDs, Bestell-IDs und Bestellnummern. Diese Informationen sind entscheidend, um den Fortschritt und den Status der verschiedenen Bestellungen zu verfolgen und sicherzustellen, dass jeder Schritt wie erwartet ausgeführt wird.

Fehlerbehebung mit Step Functions

Es wäre kein erfolgreicher Workshop gewesen, wenn alles von Anfang an reibungslos funktioniert hätte. An einem Punkt stieß ich auf einen Workflow-Fehler, der durch einen falsch konfigurierten Ereignisemitter verursacht wurde. Anfangs war nicht klar, wo das Problem lag, da ich dachte, ich hätte alle Schritte aus dem Tutorial befolgt. Step Functions half mir dabei, das Problem zu identifizieren und zu beheben. Durch Überprüfen der visuellen Darstellung des Workflows konnte ich den genauen Schritt ermitteln, an dem der Prozess ins Stocken geriet. Ich erkannte, dass die fehlende “TaskToken”-Nachricht durch den Ereignisemitter verursacht wurde, der nicht auf das Beenden eines anderen Prozesses wartete. Dies ermöglichte es mir, die Einrichtung des Ereignisemitters zu korrigieren, um “auf den Rückruf zu warten”, was zu einer reibungslosen Ausführung des Workflows führte. Ta-da!

Fazit

Die Teilnahme am AWS Serverless Espresso Workshop war insgesamt eine positive und zufriedenstellende Erfahrung, trotz der manchmal unhandlichen und unübersichtlichen Benutzeroberfläche der Konsole. Ich habe dynamische, komplexe Workflows mit Step Functions erstellt, ohne dass benutzerdefinierte Code erforderlich war, indem ich direkt mit DynamoDB und EventBridge integriert habe. Es war erfüllend zu sehen, wie der Bestellprozess vom anfänglichen CLI-Befehl bis zu den finalen Schritten abläuft und Wartezustände die Interaktionen im echten Leben widerspiegeln.

Da das Thema Serverless wieder an Bedeutung gewinnt, und nicht unbedingt wegen seiner offensichtlichen Vorteile, glaube ich persönlich, dass dieser spezielle Anwendungsfall die Leistungsfähigkeit und Flexibilität des AWS Serverless-Stacks zeigt. Durch die Koordination mehrerer Aufgaben und die Interaktion mit anderen AWS-Diensten ermöglichen es uns Step Functions, skalierbare, fehlertolerante und wartungsfreundliche Anwendungen zu erstellen und vor allem: uns unseren Kaffee zu genießen!

Serverlesspresso Workshop Serverlesspresso GitHub

Jacek Blazynski

Von der Softwareentwicklung bis zur Fahrradmechanik habe ich mich durch die IT-Galaxie navigiert wie ein echter Weltraumforscher. Als aufstrebender Padawan-Entwickler suche ich ständig nach Innovation, Zusammenarbeit und der nächsten großen kosmischen Herausforderung im Tech-Universum.