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
Dieses Tutorial zeigt Ihnen, wie Sie eine aktivitätsbasierte Zustandsmaschine mit Java erstellen und AWS Step Functions. Aktivitäten ermöglichen es Ihnen, Worker-Code, der woanders ausgeführt wird, von Ihrer Zustandsmaschine aus zu 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 AWS SDK for Java um zu kommunizieren mit AWS. -
AWS Anmeldeinformationen in der Umgebung oder im Standard AWS Konfigurationsdatei. Weitere Informationen finden Sie unter Einrichten Ihres AWS Anmeldeinformationen in der AWS SDK for Java Leitfaden für Entwickler.
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 derselben befindet AWS Konto als Ihre Zustandsmaschine.
-
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-Konfiguration 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 AWSCredentialsProviderin der AWS SDK for Java APIReferenz und Einrichtung AWS Referenzen und Entwicklungsregion in der AWS SDK for Java Leitfaden für Entwickler.Standardmäßig ist der AWS SDKwartet bei jedem Vorgang bis zu 50 Sekunden, bis Daten vom Server empfangen werden. 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 Aktivitätsaufgabe, die Sie zuvor erstellt haben.
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) Geben Sie einen benutzerdefinierten Ausführungsnamen ein, um den generierten Standard zu überschreiben.
ASCIINichtnamen und Protokollierung
Step Functions akzeptiert Namen für Zustandsmaschinen, Ausführungen, Aktivitäten und Beschriftungen, die ASCII Nichtzeichen enthalten. Da solche Zeichen nicht mit Amazon funktionieren, empfehlen wir CloudWatch, nur ASCII Zeichen zu verwenden, damit Sie die Messwerte 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 der Ausführung oder nach deren Abschluss überprüfen.
Um die Ausführungsergebnisse zu überprüfen, wählen Sie in der Diagrammansicht einzelne Status aus und wählen Sie dann die einzelnen Registerkarten im Einzelheiten zu den Schritten Bereich, 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 unterÜberblick über die Ausführungsdetails.
-
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 AWS SDK, fügen Sie den vollständigen Pfad der
third-party
Verzeichnisselib
und zu den Abhängigkeiten Ihrer Build-Datei und zu Ihrem Java hinzuCLASSPATH
. Weitere Informationen finden Sie unter Herunterladen und Extrahieren von SDK in AWS SDK for Java Leitfaden für Entwickler. -
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.