Einen Activity State Machine mithilfe von Step Functions erstellen - AWS Step Functions

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.

Einen Activity State Machine mithilfe von Step Functions erstellen

In diesem Tutorial erfahren Sie, wie Sie einen aktivitätsbasierten Zustandsautomaten mithilfe von Java und AWS Step Functions erstellen. Mithilfe von Aktivitäten können Sie Worker-Code, der woanders ausgeführt wird, von Ihrer Zustandsmaschine aus steuern. Eine Übersicht finden Sie unter Erfahren Sie mehr über Aktivitäten in Step Functions im Abschnitt Erfahren Sie mehr über Zustandsmaschinen in Step Functions.

Zum Durcharbeiten dieses Tutorials ist Folgendes erforderlich:

  • Das SDKfür Java. Die Beispielaktivität in diesem Tutorial ist eine Java-Anwendung, die verwendet, AWS SDK for Java um mit zu kommunizieren AWS.

  • AWS Anmeldeinformationen in der Umgebung oder in der AWS Standardkonfigurationsdatei. Weitere Informationen finden Sie unter Einrichten Ihrer AWS Anmeldeinformationen im AWS SDK for Java Entwicklerhandbuch.

Schritt 1: Erstellen einer Aktivität

Sie müssen Step Functions auf die Aktivität aufmerksam machen, deren Worker (ein Programm) Sie erstellen möchten. Step Functions antwortet mit einem Amazon-Ressourcennamen (ARN), der eine Identität für die Aktivität festlegt. Verwenden Sie diese Identität, um die Informationen zwischen Ihrem Zustandsautomaten und dem Worker zu koordinieren.

Wichtig

Stellen Sie sicher, dass sich Ihre Aktivitätsaufgabe unter demselben AWS Konto befindet wie Ihr State Machine.

  1. Wählen Sie in der Step Functions Functions-Konsole im Navigationsbereich auf der linken Seite Aktivitäten aus.

  2. Wählen Sie Create activity (Aktivität erstellen) aus.

  3. Geben Sie beispielsweise einen Namen für die Aktivität ein und wählen Sie dann Aktivität erstellen aus. get-greeting

  4. Wenn Ihre Aktivitätsaufgabe erstellt wurde, notieren Sie sie sichARN, wie im folgenden Beispiel gezeigt.

    arn:aws:states:us-east-1:123456789012:activity:get-greeting

Schritt 2: Erstellen Sie eine Zustandsmaschine

Erstellen Sie einen Zustandsautomaten, der festlegt, wann Ihre Aktivität aufgerufen wird und wann Ihr Worker seine primäre Arbeit ausführen, die Ergebnisse sammeln und zurückgeben soll. Um die Zustandsmaschine zu erstellen, verwenden Sie Code-Editor den Workflow Studio.

  1. Wählen Sie in der Step Functions Functions-Konsole im Navigationsbereich auf der linken Seite State Machines aus.

  2. Wählen Sie auf der Seite State Machines die Option Create State Machine aus.

  3. Wählen Sie im Dialogfeld Vorlage auswählen die Option Leer aus.

  4. Wählen Sie „Auswählen“, um Workflow Studio in zu öffnenEntwurfsmodus.

  5. In diesem Tutorial schreiben Sie die Amazon States Language (ASL) -Definition Ihrer Zustandsmaschine in den Code-Editor. Wählen Sie dazu Code.

  6. Entfernen Sie den vorhandenen Boilerplate-Code und fügen Sie den folgenden Code ein. Denken Sie daran, das Beispiel ARN in diesem Code durch das Beispiel ARN der Aktivitätsaufgabe zu ersetzen, die Sie zuvor in dem Resource Feld erstellt haben.

    { "Comment": "An example using a Task state.", "StartAt": "getGreeting", "Version": "1.0", "TimeoutSeconds": 300, "States": { "getGreeting": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:get-greeting", "End": true } } }

    Dies ist eine Beschreibung Ihrer Zustandsmaschine, die die Amazon States Language (ASL) verwendet. Sie definiert einen einzelnen Task-Zustand namens getGreeting. Weitere Informationen finden Sie unter State Machine Structure.

  7. Vergewissern Sie sichDiagrammvisualisierung, dass das Workflow-Diagramm für die ASL von Ihnen hinzugefügte Definition dem folgenden Diagramm ähnelt.

    Graphische Darstellung der Zustandsmaschine mit RunActivity Aufgabenstatus.
  8. Geben Sie einen Namen für Ihre Zustandsmaschine an. Wählen Sie dazu das Bearbeitungssymbol neben dem Standardnamen der Zustandsmaschine von MyStateMachine. Geben Sie dann unter State Machine Configuration einen Namen in das Feld State Machine Name ein.

    Geben Sie für dieses Tutorial den Namen ActivityStateMachine ein.

  9. (Optional) Geben Sie unter State-Machine-Konfiguration weitere Workflow-Einstellungen an, z. B. den Zustandsmaschinentyp und seine Ausführungsrolle.

    Behalten Sie für dieses Tutorial alle Standardauswahlen in den State-Machine-Einstellungen bei.

    Wenn Sie zuvor eine IAM Rolle mit den richtigen Berechtigungen für Ihren Zustandsmaschine erstellt haben und diese verwenden möchten, wählen Sie unter Berechtigungen die Option Vorhandene Rolle auswählen und dann eine Rolle aus der Liste aus. Oder wählen Sie Rolle eingeben aus ARN und geben Sie dann eine Rolle ARN für diese IAM Rolle ein.

  10. Wählen Sie im Dialogfeld „Rollenerstellung bestätigen“ die Option Bestätigen aus, um fortzufahren.

    Sie können auch Rolleneinstellungen anzeigen wählen, um zur State-Machine-Konfiguration zurückzukehren.

    Anmerkung

    Wenn Sie die von Step Functions erstellte IAM Rolle löschen, kann Step Functions sie später nicht mehr neu erstellen. Ebenso kann Step Functions ihre ursprünglichen Einstellungen später nicht wiederherstellen, wenn Sie die Rolle ändern (z. B. indem Sie Step Functions aus den Prinzipalen in der IAM Richtlinie entfernen).

Schritt 3: Implementieren eines Workers

Erstellen Sie einen Worker. Ein Worker ist ein Programm, das für Folgendes verantwortlich ist:

  • Polling Step Functions für Aktivitäten, die die GetActivityTask API Aktion verwenden.

  • Durchführen der Arbeit der Aktivität mit Ihrem Code (z. B. die Methode getGreeting() im folgenden Code).

  • Rückgabe der Ergebnisse mithilfe der SendTaskHeartbeat API Aktionen SendTaskSuccessSendTaskFailure, und.

Anmerkung

Ein umfassendes Beispiel für einen Aktivitäts-Worker finden Sie unter Beispiel: Activity Worker in Ruby. Dieses Beispiel verwendet eine auf bewährten Methoden basierende Implementierung, die Sie als Referenz für Ihren Aktivitäts-Worker verwenden können. Der Code implementiert ein Verbraucher/Erzeuger-Muster mit einer konfigurierbaren Anzahl an Threads für Poller und Aktivitäts-Worker.

Implementieren des Workers

  1. Erstellen Sie eine Datei namens GreeterActivities.java.

  2. Fügen Sie ihr folgenden Code hinzu.

    import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.EnvironmentVariableCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.stepfunctions.AWSStepFunctions; import com.amazonaws.services.stepfunctions.AWSStepFunctionsClientBuilder; import com.amazonaws.services.stepfunctions.model.GetActivityTaskRequest; import com.amazonaws.services.stepfunctions.model.GetActivityTaskResult; import com.amazonaws.services.stepfunctions.model.SendTaskFailureRequest; import com.amazonaws.services.stepfunctions.model.SendTaskSuccessRequest; import com.amazonaws.util.json.Jackson; import com.fasterxml.jackson.databind.JsonNode; import java.util.concurrent.TimeUnit; public class GreeterActivities { public String getGreeting(String who) throws Exception { return "{\"Hello\": \"" + who + "\"}"; } public static void main(final String[] args) throws Exception { GreeterActivities greeterActivities = new GreeterActivities(); ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSocketTimeout((int)TimeUnit.SECONDS.toMillis(70)); AWSStepFunctions client = AWSStepFunctionsClientBuilder.standard() .withRegion(Regions.US_EAST_1) .withCredentials(new EnvironmentVariableCredentialsProvider()) .withClientConfiguration(clientConfiguration) .build(); while (true) { GetActivityTaskResult getActivityTaskResult = client.getActivityTask( new GetActivityTaskRequest().withActivityArn(ACTIVITY_ARN)); if (getActivityTaskResult.getTaskToken() != null) { try { JsonNode json = Jackson.jsonNodeOf(getActivityTaskResult.getInput()); String greetingResult = greeterActivities.getGreeting(json.get("who").textValue()); client.sendTaskSuccess( new SendTaskSuccessRequest().withOutput( greetingResult).withTaskToken(getActivityTaskResult.getTaskToken())); } catch (Exception e) { client.sendTaskFailure(new SendTaskFailureRequest().withTaskToken( getActivityTaskResult.getTaskToken())); } } else { Thread.sleep(1000); } } } }
    Anmerkung

    Bei der Klasse EnvironmentVariableCredentialsProvider in diesem Beispiel wird davon ausgegangen, dass die Umgebungsvariablen AWS_ACCESS_KEY_ID (oder AWS_ACCESS_KEY) und AWS_SECRET_KEY (oder AWS_SECRET_ACCESS_KEY) gesetzt sind. Weitere Informationen zur Bereitstellung der erforderlichen Anmeldeinformationen für das Werk finden Sie unter AWSCredentialsProvider AWS SDK for JavaAPIReferenz und unter „AWS Anmeldeinformationen und Region für die Entwicklung einrichten“ im AWS SDK for Java Entwicklerhandbuch.

    Standardmäßig wartet der AWS SDK bei jedem Vorgang bis zu 50 Sekunden, bis er Daten vom Server empfängt. Die Operation GetActivityTask ist eine Langabfrage-Operation, die bis zu 60 Sekunden auf die nächste verfügbare Aufgabe wartet. Stellen Sie den Wert auf 70 Sekunden ein, SocketTimeout um zu verhindern, dass ein SocketTimeoutException Fehler angezeigt wird.

  3. Ersetzen Sie in der Parameterliste des GetActivityTaskRequest().withActivityArn() Konstruktors den ACTIVITY_ARN Wert durch den Wert ARN der zuvor erstellten Aktivitätsaufgabe.

Schritt 4: Führen Sie die Zustandsmaschine aus

Wenn Sie die Ausführung der Zustandsmaschine starten, fragt Ihr Worker Step Functions nach Aktivitäten ab, führt seine Arbeit aus (unter Verwendung der von Ihnen bereitgestellten Eingaben) und gibt die Ergebnisse zurück.

  1. Auf dem ActivityStateMachineWählen Sie auf der Seite Ausführung starten aus.

    Das Dialogfeld Ausführung starten wird angezeigt.

  2. Gehen Sie im Dialogfeld Ausführung starten wie folgt vor:

    1. (Optional) Um Ihre Ausführung zu identifizieren, können Sie einen Namen angeben oder den generierten Standardnamen für die Ausführung verwenden.

      Anmerkung

      Step Functions akzeptiert Namen für Zustandsmaschinen, Ausführungen, Aktivitäten und Bezeichnungen, die ASCII Nichtzeichen enthalten. Da Namen, die keine ASCII Zeichen enthalten, bei Amazon nicht funktionieren CloudWatch, empfehlen wir, nur ASCII Zeichen zu verwenden, damit Sie Kennzahlen verfolgen können. CloudWatch

    2. Geben Sie im Eingabefeld die folgenden JSON Eingaben ein, um Ihren Workflow auszuführen.

      { "who": "AWS Step Functions" }
    3. Wählen Sie Start execution (Ausführung starten) aus.

    4. Die Step Functions Functions-Konsole leitet Sie zu einer Seite weiter, die mit Ihrer Ausführungs-ID betitelt ist. Diese Seite wird als Seite mit den Ausführungsdetails bezeichnet. Auf dieser Seite können Sie die Ausführungsergebnisse im Verlauf oder nach Abschluss der Ausführung überprüfen.

      Um die Ausführungsergebnisse zu überprüfen, wählen Sie in der Diagrammansicht einzelne Status und dann die einzelnen Registerkarten im Einzelheiten zu den Schritten Bereich aus, um die Details der einzelnen Status, einschließlich Eingabe, Ausgabe und Definition, anzuzeigen. Einzelheiten zu den Ausführungsinformationen, die Sie auf der Seite mit den Ausführungsdetails einsehen können, finden Sie unterSeite mit den Ausführungsdetails — Übersicht über die Benutzeroberfläche.

Schritt 5: Ausführen und Beenden des Workers

Damit der Worker Ihren Zustandsautomaten nach Aktivitäten abfragen kann, müssen Sie den Worker ausführen.

  1. Navigieren Sie über die Befehlszeile zu dem Verzeichnis, in dem Sie GreeterActivities.java erstellt haben.

  2. Um das zu verwenden AWS SDK, fügen Sie den vollständigen Pfad der third-party Verzeichnisse lib und zu den Abhängigkeiten Ihrer Build-Datei und zu Ihrer Java-Datei hinzuCLASSPATH. Weitere Informationen finden Sie unter Herunterladen und Extrahieren von SDK im AWS SDK for Java Entwicklerhandbuch.

  3. Kompilieren Sie die Datei.

    $ javac GreeterActivities.java
  4. Führen Sie die Datei aus.

    $ java GreeterActivities
  5. Navigieren Sie in der Step Functions Functions-Konsole zur Seite mit den Ausführungsdetails.

  6. Wenn die Ausführung abgeschlossen ist, überprüfen Sie die Ergebnisse Ihrer Ausführung.

  7. Beenden Sie den Worker.