Erstellen eines serverlosen Workflows
mit AWS Step Functions und AWS Lambda
In diesem Tutorial erfahren Sie, wie Sie AWS Step Functions zum Entwerfen und Ausführen eines serverlosen Workflows nutzen, mit dem mehrere AWS Lambda-Funktionen koordiniert werden können. AWS Lambda ist ein Rechenservice, mit dem Sie Code ausführen können, ohne Server bereitstellen und verwalten zu müssen.
In unserem Beispiel sind Sie ein Entwickler, der gebeten wurde, eine serverlose Anwendung zu erstellen, um die Bearbeitung von Support-Tickets in einem Callcenter zu automatisieren. Sie könnten zwar eine Lambda-Funktion die andere anrufen lassen, aber Sie befürchten, dass die Verwaltung all dieser Verbindungen mit zunehmender Komplexität der Callcenter-Anwendung zu einer Herausforderung wird. Außerdem erfordert jede Änderung im Ablauf der Anwendung Änderungen an mehreren Stellen, und es könnte dazu führen, dass Sie am Ende immer wieder den gleichen Code schreiben müssen.
Um diese Herausforderung zu lösen, entscheiden Sie sich für die Verwendung der AWS Step Functions. Step Functions ist ein serverloser Orchestrierungsdienst, mit dem Sie problemlos mehrere Lambda-Funktionen zu flexiblen Workflows koordinieren können, die leicht zu debuggen und leicht zu ändern sind. Step Functions wird Ihre Lambda-Funktionen frei von zusätzlicher Logik halten, indem es jeden Schritt Ihrer Anwendung für Sie auslöst und verfolgt.
In den nächsten 10 Minuten erstellen Sie eine Step Functions-Zustandsmaschine, um den aktuellen Callcenter-Prozess zu beschreiben, erstellen einige einfache Lambda-Funktionen, die die Aufgaben des Support-Teams simulieren, und übergeben Daten zwischen den einzelnen Lambda-Funktionen, um den Fortschritt des Support-Falls zu verfolgen. Dann führen Sie mehrere Tests Ihres Workflows durch, um zu beobachten, wie er auf verschiedene Eingaben reagiert. Am Ende löschen Sie die AWS-Ressourcen, die Sie im Tutorial verwendet haben.
In diesm Tutorial verwendden Sie AWS Step Functions und AWS Lambda. Diese Services sind im kostenlosen Kontingent für AWS enthalten.
Für dieses Tutorial ist ein AWS-Konto erforderlich
Für Step Functions oder Lambda fallen keine zusätzlichen Kosten an. Die in diesem Tutorial erstellten Ressourcen können im Rahmen des kostenlosen Kontingents genutzt werden.
Schritt 1. Erstellen einer Zustandsmaschine und einees Serverlosen Workflows
Ihr erster Schritt besteht darin, einen Workflow zu entwerfen, der beschreibt, wie Support-Tickets in Ihrem Callcenter bearbeitet werden sollen. Workflows beschreiben einen Prozess als eine Reihe von einzelnen Aufgaben, die immer wieder wiederholt werden können.
Sie haben die Möglichkeit, sich mit dem Leiter des Callcenters zusammenzusetzen, um bewährte Verfahren für die Bearbeitung von Supportfällen durchzusprechen. Mit den visuellen Workflows in Step Functions als intuitive Referenz definieren Sie gemeinsam den Workflow.
Dann entwerfen Sie Ihren Arbeitsablauf in AWS Step Functions. Ihr Workflow ruft eine AWS Lambda-Funktion auf, um einen Support-Fall zu erstellen, eine andere Funktion, um den Fall einem Supportmitarbeiter zur Lösung zuzuweisen, und so weiter. Sie wird auch Daten zwischen den Lambda-Funktionen weiterleiten, um den Status des Supportfalles zu verfolgen, während an ihm gearbeitet wird.
a. Öffnen Siee die AWS Step Functions-Konsole. Wählen Sie Author with code snippets (Mit Code-Snippets verfassen). Geben Sie im Textfeld Name CallCenterStateMachine ein.
b. Ersetzen Sie den Inhalt des Fensters State machine definition (Definition der Zustandsmaschine) durch die nachfolgende Amazon States Language (ASL)-Zustandsmaschinendefinition. Amazon States Language ist eine JSON-basierte, strukturierte Sprache, die zur Definition Ihrer Zustandsmaschine verwendet wird.
Diese Zustandsmaschine verwendet eine Reihe von Aufgabenzuständen, um einen Supportfall zu öffnen, zuzuweisen und zu bearbeiten. Dann wird anhand eines Auswahlzustans bestimmt, ob der Fall abgeschlossen werden kann oder nicht. Zwei weitere Aufgabenzustände schließen oder eskalieren dann gegebenenfalls den Supportfall.
{
"Comment": "A simple AWS Step Functions state machine that automates a call center support session.",
"StartAt": "Open Case",
"States": {
"Open Case": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"Next": "Assign Case"
},
"Assign Case": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"Next": "Work on Case"
},
"Work on Case": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"Next": "Is Case Resolved"
},
"Is Case Resolved": {
"Type" : "Choice",
"Choices": [
{
"Variable": "$.Status",
"NumericEquals": 1,
"Next": "Close Case"
},
{
"Variable": "$.Status",
"NumericEquals": 0,
"Next": "Escalate Case"
}
]
},
"Close Case": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"End": true
},
"Escalate Case": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"Next": "Fail"
},
"Fail": {
"Type": "Fail",
"Cause": "Engage Tier 2 Support." }
}
}
c. Klicken Sie auf die Aktualisierungsschaltfläche, um die ASL-Zustandsmaschinendefinition als visuellen Workflow anzuzeigen. In unserem Szenario können Sie leicht überprüfen, ob der Prozess korrekt beschrieben ist, indem Sie den visuellen Workflow mit dem Callcenter-Manager besprechen.
d. Klicken Sie auf Next (Weiter).
Schritt 2. Eine Identity and Access Management (IAM)-Rolle erstellen
AWS IAM ist ein Webservice, der Ihnen hilft, den Zugriff auf AWS-Ressourcen sicher zu kontrollieren. In diesem Schritt werden Sie eine IAM-Rolle erstellen, die es den Schrittfunktionen ermöglicht, auf Lambda zuzugreifen.
a. Öffnen Sie die AWS-Managementkonsole in einem anderen Fenster. Wenn der Bildschirm geladen wird, geben Sie IAM in die Suchleiste ein und wählen Sie dann IAM, um die Servicekonsole zu öffnen.
Schritt 3. Hinzufügen der IAM-Rolle zur Zustandsmaschine
Als nächstes fügen Sie die von Ihnen erstellte IAM-Rolle ARN der Zustandsmaschine in AWS Step Functions hinzu.
Schritt 4. Ihre AWS Lambda-Funktionen erstellen
Nun, da Sie Ihre Zustandsmaschine erstellt haben, können Sie entscheiden, wie sie funktionieren soll. Sie können Ihre Zustandsmaschine mit AWS Lambda-Funktionen und anderen Microservices verbinden, die in Ihrer Umgebung bereits vorhanden sind, oder neue erstellen. In diesem Tutorial erstellen Sie einige einfache Lambda-Funktionen, die verschiedene Schritte zur Bearbeitung von Supportanfragen simulieren, wie z. B. die Zuweisung des Falles an einen Kundenservicemitarbeiter.
c. Wählen Sie Author from scratch (Von Grund auf neu verfassen).
d. Konfigurieren Sie Ihre erste Lambda-Funktion mit diesen Einstellungen:
Name – OpenCaseFunction.
Runtime – Node.js 4.3.
Role – Create custom role.
Ein neues IAM-Fenster wird angezeigt.
e. Als Role name behalten Sie lambda_basic_execution bei und klicken auf Allow (Zulassen).
Sie werden automatisch zur Lambda-Konsole zurückgeführt.
f. Klicken Sie auf Create function (Funktion erstellen).
g. Ersetzen Sie den Inhalt des Fenster Function code (Funktionscode) durch den folgenden Code und klicken Sie dann auf Save (Speichern).
exports.handler = (event, context, callback) => {
// Create a support case using the input as the case ID, then return a confirmation message
var myCaseID = event.inputCaseID;
var myMessage = "Case " + myCaseID + ": opened...";
var result = {Case: myCaseID, Message: myMessage};
callback(null, result);
};
i. Wiederholen Sie die Schritte 4b–4d, um 4 weitere Lambda-Funktionen zu erstellen, wobei Sie die in Schritt 4c erstellte IAM-Rolle lambda_basic_execution verwenden.
Definieren Sie AssignCaseFunction als:
exports.handler = (event, context, callback) => {
// Assign the support case and update the status message
var myCaseID = event.Case;
var myMessage = event.Message + "assigned...";
var result = {Case: myCaseID, Message: myMessage};
callback(null, result);
};
Definieren Sie WorkOnCaseFunction als:
exports.handler = (event, context, callback) => {
// Generate a random number to determine whether the support case has been resolved, then return that value along with the updated message.
var min = 0;
var max = 1;
var myCaseStatus = Math.floor(Math.random() * (max - min + 1)) + min;
var myCaseID = event.Case;
var myMessage = event.Message;
if (myCaseStatus == 1) {
// Support case has been resolved
myMessage = myMessage + "resolved...";
} else if (myCaseStatus == 0) {
// Support case is still open
myMessage = myMessage + "unresolved...";
}
var result = {Case: myCaseID, Status : myCaseStatus, Message: myMessage};
callback(null, result);
};
Definieren Sie CloseCaseFunction als:
exports.handler = (event, context, callback) => {
// Close the support case
var myCaseStatus = event.Status;
var myCaseID = event.Case;
var myMessage = event.Message + "closed.";
var result = {Case: myCaseID, Status : myCaseStatus, Message: myMessage};
callback(null, result);
};
Definieren Sie EscalateCaseFunction als:
exports.handler = (event, context, callback) => {
// Escalate the support case
var myCaseID = event.Case;
var myCaseStatus = event.Status;
var myMessage = event.Message + "escalating.";
var result = {Case: myCaseID, Status : myCaseStatus, Message: myMessage};
callback(null, result);
};
Wenn Sie fertig sind, sollten Sie 5 Lambda-Funktionen haben.
Schritt 5. Datenbank füllen
Der nächste Schritt besteht darin, die Aufgabenzustände in Ihrem Step Functions-Workflow mit den soeben erstellten Lambda-Funktionen zu füllen.
c. Suchen Sie im Abschnitt State machine definition (Definition der Zustandsmaschine) die Zeile unterhalb des Zustands Open Case (Offener Fall), der mit Resource (Ressource) beginnt.
Ersetzen Sie den ARN durch den ARN Ihrer OpenCaseFunction.
Wenn Sie auf den Beispiel-ARN klicken, erscheint eine Liste der AWS Lambda-Funktionen in Ihrem Konto, aus der Sie ihn auswählen können.
d. Wiederholen Sie den vorherigen Schritt, um die Lambda-Funktions-ARNs für die Aufgabenzustäne Assign Case (Fall zuweisen), Work on Case (Fall bearbeiten), Close Case (Fall schließen) und Escalate Case (Fall eskalieren) in Ihrer Zustandsmaschine zu aktualisieren, und klicken Sie dann auf Save (Speichern).
Schritt 6. Ihren Workflow ausführen
Ihr serverloser Workflow ist nun bereit, ausgeführt zu werden. Eine Zustandsmaschinenausführung ist eine Instance Ihres Workflows und tritt jedes Mal auf, wenn eine Step Functions-Zustandsmaschine läuft und ihre Aufgaben ausführt. Jeder Step Functions-Zustandsmaschine kann mehrere Aufgaben gleichzeitige ausführen, die Sie über die Step Functions-Konsole (was Sie als nächstes tun werden) oder mit Hilfe der AWS SDKs, der Step Functions-API-Aktionen oder der AWS CLI initiieren können. Eine Ausführung empfängt JSON-Eingabe und erzeugt JSON-Ausgabe.
b. Ein Dialogfeld „New execution“ (Neue Ausführung) wird angezeigt. Um eine ID für Ihren Supportfall anzugeben, geben Sie den Inhalt von unten in das Dialogfeld „New execution“ (Neue Ausführung) im Fenster Input (Eingabe) ein und klicken Sie dann auf Start execution (Ausführung starten).
{
"inputCaseID": "001"
}
c. Während Ihr Workflow ausgeführt wird, ändert jeder Schritt im Fensterbereich Visual workflow (Visueller Workflow) seine Farbe. Warten Sie einige Sekunden, bis die Ausführung abgeschlossen ist. Klicken Sie dann im Bereich Execution details (Ausführungsdetails) auf Input (Eingabe) und Output (Ausgabe), um die Eingaben ind Ergebnisse Ihres Workflow anzuzeigen.
d. Mit Step Functions können Sie jeden Schritt Ihrer Workflow-Ausführung überprüfen, einschließlich der Ein- und Ausgaben der einzelnen Zustände. Klicken Sie auf jede Aufgabe in Ihrem Workflow und erweitern Sie die Felder Input (Eingabe) und Output (Ausgabe) unter „Step details“ (Schrittdetails). Sie können sehen, dass die Fall-ID, die Sie in Ihre Zustandsmaschine eingegeben haben, von jedem Schritt an den nächsten weitergegeben wird und dass die Meldungen aktualisiert werden, wenn jede Lambda-Funktion ihre Arbeit abschließt.
f. Abhängig von der Ausgabe Ihrer WorkOnCaseFunction kann Ihr Workflow mit der Lösung des Supportfalls und dem Schließen des Tickets oder der Eskalation des Tickets auf die nächste Supportstufe beendet sein. Sie können die Ausführung noch einige Male wiederholen, um dieses unterschiedliche Verhalten zu beobachten. Dieses Bild zeigt eine Ausführung des Workflows, bei dem der Supportfall eskaliert wurde, was dazu führte, dass der Workflow mit einem Fehlerzustand beendet wurde.
In einem realen Szenario könnten Sie sich entscheiden, den Fall so lange weiter zu bearbeiten, bis er gelöst ist, anstatt aus Ihrem Workflow herauszufallen. Dazu könnten Sie den Fehlerzustand entfernen und die Aufgabe Escalate case (Fall eskalieren) in Ihrer Zustandsmaschine bearbeiten, um eine Schleife zurück in den Zustand Work On Case (Fall bearbeiten) zu schalten. Es wären keine Änderungen Ihrer Lambda-Funktionen erforderlich. Bei den Funktionen, die wir für dieses Tutorial erstellt haben, handelt es sich nur um Beispiele, wir gehen also zum nächsten Schritt des Tutorials über.
Schritt 7. Ressourcen beenden
In diesem Schritt beenden Sie Ihre AWS Step Functions- und AWS Lambda-bezogenen Ressourcen.
Wichtig: Die Beendigung von Ressourcen, die nicht aktiv genutzt werden, senkt die Kosten und ist eine bewährte Methode. Wenn Sie Ihre Ressourcen nicht beenden, können Gebühren anfallen.
b. Wählen Sie im Bildschirm State machines (Zustandsmaschinen) Ihre CallCenterStateMachine und klicken Sie dann auf Delete (Löschen). Um zu bestätigen, dass Sie die Zustandsmaschine löschen möchten, klicken Sie im daraufhin angezeigten Dialogfeld auf Delete state machine (Zustandsmaschine löschen). Ihre Zustandsmschine wird in ein oder zwei Minuten gelöscht, nachdem Step Functions bestätigt hat, dass alle prozessinternen Ausführungen abgeschlossen sind.
f. Wählen Sie die beiden IAM-Rollen aus, die Sie für dieses Tutorial erstellt haben, und klicken Sie dann Delete role (Rolle löschen). Bestätigen Sie das Löschen, indem Sie im Dialogfeld auf Yes, Delete (Ja, löschen) klicken.
Sie können sich nun von der AWS-Managementkonsole abmelden.
Herzlichen Glückwunsch!
Gut gemacht! Sie haben gerade einen serverlosen Workflow mit AWS Step Functions erstellt, der mehrere AWS Lambda-Funktionen auslöst. Ihr Workflow koordinierte alle Ihre Funktionen für Sie gemäß der von Ihnen definierten Logik und übertrug Daten von einem Zustand in einen anderen, was bedeutete, dass Sie diesen Code nicht in jede einzelne Funktion schreiben mussten.
Nachdem Sie nun gelernt haben, einen serverlosen Workflow zu entwerfen und auszuführen, können Sie mit dem nächsten Tutorial fortfahren, in dem Sie lernen, wie Sie Step Functions verwenden, um Lambda-Funktionsfehler zu korrigieren. Sie erstellen eine Zustandsmaschine mit Wiederholungs- und Auffangfeldern, die auf Antwortcodes von einer API-Attrappe reagieren, die auf dem Typ der Fehlermeldung basiert, eine Methode, die als Funktionsfehlerbehandlung bezeichnet wird.