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.
Themen
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.
-
Wählen Sie in der Step Functions Functions-Konsole
im Navigationsbereich auf der linken Seite Aktivitäten aus. -
Wählen Sie Create activity (Aktivität erstellen) aus.
-
Geben Sie beispielsweise einen Namen für die Aktivität ein und wählen Sie dann Aktivität erstellen aus.
get-greeting
-
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.
-
Wählen Sie in der Step Functions Functions-Konsole
im Navigationsbereich auf der linken Seite State Machines aus. -
Wählen Sie auf der Seite State Machines die Option Create State Machine aus.
-
Wählen Sie im Dialogfeld Vorlage auswählen die Option Leer aus.
-
Wählen Sie „Auswählen“, um Workflow Studio in zu öffnenEntwurfsmodus.
-
In diesem Tutorial schreiben Sie die Amazon States Language (ASL) -Definition Ihrer Zustandsmaschine in den Code-Editor. Wählen Sie dazu Code.
-
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 namensgetGreeting
. Weitere Informationen finden Sie unter State Machine Structure. -
Vergewissern Sie sichDiagrammvisualisierung, dass das Workflow-Diagramm für die ASL von Ihnen hinzugefügte Definition dem folgenden Diagramm ähnelt.
-
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. -
(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.
-
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 AktionenSendTaskSuccess
SendTaskFailure
, 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
-
Erstellen Sie eine Datei namens
GreeterActivities.java
. -
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 UmgebungsvariablenAWS_ACCESS_KEY_ID
(oderAWS_ACCESS_KEY
) undAWS_SECRET_KEY
(oderAWS_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 einSocketTimeoutException
Fehler angezeigt wird. -
Ersetzen Sie in der Parameterliste des
GetActivityTaskRequest().withActivityArn()
Konstruktors denACTIVITY_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.
-
Auf dem
ActivityStateMachine
Wählen Sie auf der Seite Ausführung starten aus.Das Dialogfeld Ausführung starten wird angezeigt.
-
Gehen Sie im Dialogfeld Ausführung starten wie folgt vor:
-
(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
-
Geben Sie im Eingabefeld die folgenden JSON Eingaben ein, um Ihren Workflow auszuführen.
{ "who": "AWS Step Functions" }
-
Wählen Sie Start execution (Ausführung starten) aus.
-
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.
-
Navigieren Sie über die Befehlszeile zu dem Verzeichnis, in dem Sie
GreeterActivities.java
erstellt haben. -
Um das zu verwenden AWS SDK, fügen Sie den vollständigen Pfad der
third-party
Verzeichnisselib
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. -
Kompilieren Sie die Datei.
$ javac GreeterActivities.java
-
Führen Sie die Datei aus.
$ java GreeterActivities
-
Navigieren Sie in der Step Functions Functions-Konsole
zur Seite mit den Ausführungsdetails. -
Wenn die Ausführung abgeschlossen ist, überprüfen Sie die Ergebnisse Ihrer Ausführung.
-
Beenden Sie den Worker.