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. 

Weitere Informationen zum kostenlosen Kontingent >>


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.

01c

(zum Vergrößern klicken)


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."    }   
  }
}
03b

(zum Vergrößern klicken)


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).

03c

(zum Vergrößern klicken)


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.

02a

(zum Vergrößern klicken)


b. Klicken Sie auf Roles (Rollen) und dann auf Create Role (Rolle erstellen).

02b

(zum Vergrößern klicken)


c. Lassen Sie im Bildschirm Create Roles (Rollen erstellen) die Option AWS Service ausgewählt, wählen Sie dann Step Functions aus un klicken Sie auf Next: Permissions (Weiter: Berechtigungen). Klicken Sie im nächsten Bildschirm auf Next: Review (Weiter: Überprüfung).

02c

(zum Vergrößern klicken)


d. Geben Sie als Role name (Rollenname) step_functions_basic_execution ein und wählen Sie Create role (Rolle erstellen). Klicken Sie im nächsten Bildschirm auf Next: Review (Weiter: Überprüfung).

02d

(zum Vergrößern klicken)


e. Ihre Rolle wird erstellt und in der Liste angezeigt. Wählen Sie den Namen Ihrer Rolle aus, um sie anzuzeigen. 

02e

(zum Vergrößern klicken)


f. Kopieren Sie im nächsten Bildschirm den Role ARN (ARN der Rolle).

02f

(zum Vergrößern klicken)


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.


a. Wählen Sie die Browser-Registerkarte mit der Step Functions-Konsole.

b. Fügen Sie den kopierten ARN in das Textfeld IAM role ARN (ARN der IAM-Rolle) ein.

c. Klicken Sie auf Create State Machine (Zustandsmaschine erstellen).

03a

(zum Vergrößern klicken)


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.


a. Klicken Sie auf Services, geben Sie Lambda im Suchtextfeld ein und wählen Sie dann Lambda, um die Servicekonsole zu öffnen.

04a

(zum Vergrößern klicken)


b. Klicken Sie auf Create function (Funktion erstellen).

04b

(zum Vergrößern klicken)


c. Wählen Sie Author from scratch (Von Grund auf neu verfassen).

d. Konfigurieren Sie Ihre erste Lambda-Funktion mit diesen Einstellungen:

NameOpenCaseFunction.
RuntimeNode.js 4.3.
RoleCreate 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).

04c

(zum Vergrößern klicken)


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);    
};
04d

(zum Vergrößern klicken)


h. Klicken Sie oben auf der Seite auf Functions (Funktionen).

04e

(zum Vergrößern klicken)


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.

04f

(zum Vergrößern klicken)


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.


a. Klicken Sie auf Services, geben Sie Step im Suchtextfeld ein und wählen Sie dann Step Functions, um die Servicekonsole zu öffnen.

05a

(zum Vergrößern klicken)


b. Wählen Sie im Bildschirm State machines (Zustandsmaschine) Ihre CallCenterStateMachine und klicken Sie dann auf Edit (Bearbeiten).

05b

(zum Vergrößern klicken)


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.

05c

(zum Vergrößern klicken)


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).

05d

(zum Vergrößern klicken)


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.


a. Klicken Sie auf Start execution (Ausführung starten).

06a

(zum Vergrößern klicken)


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"
}
06b

(zum Vergrößern klicken)


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.

06c

(zum Vergrößern klicken)


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.

06d

(zum Vergrößern klicken)


e. Scrollen Sie nach unten bis zum Abschnitt Execution event history (Verlauf der Ausführungsereignisse). Klicken Sie sich durch jeden Ausführungsschritt, um zu sehen, wie Step Functions Ihre Lambda-Funktionen aufgerufen und Daten zwischen den Funktionen übergeben hat.

06e

(zum Vergrößern klicken)


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.

06f

(zum Vergrößern klicken)


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.


a. Klicken Sie oben im Konsolenfenster von AWS Step Functions auf State machines (Zustandsmaschinen).

07a

(zum Vergrößern klicken)


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.

07b

(zum Vergrößern klicken)


c. Als Nächstes löschen Sie Ihre Lambda-Funktionen. Klicken Sie in der AWS-Managementkonsole auf Services und wählen dann die Option Lambda aus.

07c

(zum Vergrößern klicken)


d. Klicken Sie auf dem Bildschirm Functions (Funktionen) auf jede der Funktionen, die Sie für dieses Tutorial erstellt haben, und wählen Sie dann Actions (Aktionen) und dann Delete (Löschen). Bestätigen Sie daas Löschen, indem Sie erneut auf Delete (Löschen) klicken.

07d

(zum Vergrößern klicken)


e. Zum Schluss löschen Sie noch Ihre IAM-Rollen. Klicken Sie in der AWS-Managementkonsole auf Services und wählen dann die Option IAM aus.

07e

(zum Vergrößern klicken)


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.

07f

(zum Vergrößern klicken)


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.