Erfahren Sie mehr über Aktivitäten in Step Functions - 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.

Erfahren Sie mehr über Aktivitäten in Step Functions

Mit Step Functions-Aktivitäten können Sie in Ihrer Zustandsmaschine eine Aufgabe einrichten, bei der die eigentliche Arbeit von einem Worker ausgeführt wird, der außerhalb von Step Functions läuft. Sie könnten beispielsweise ein Worker-Programm auf Amazon Elastic Compute Cloud (AmazonEC2), Amazon Elastic Container Service (AmazonECS) oder sogar auf Mobilgeräten ausführen.

Übersicht

In AWS Step Functions, sind Aktivitäten eine Möglichkeit, Code, der irgendwo ausgeführt wird (bekannt als Activity Worker), einer bestimmten Aufgabe in einer Zustandsmaschine zuzuordnen. Sie können eine Aktivität über die Step Functions Functions-Konsole oder durch einen Anruf erstellenCreateActivity. Dadurch wird ein Amazon-Ressourcenname (ARN) für Ihren Aufgabenstatus bereitgestellt. Verwenden Sie diesARN, um den Aufgabenstatus für die Arbeit in Ihrem Activity Worker abzufragen.

Anmerkung

Aktivitäten werden nicht versioniert und es wird erwartet, dass sie immer abwärtskompatibel sind. Wenn Sie eine rückwärtsinkompatible Änderung an einer Aktivität vornehmen müssen, erstellen Sie in Step Functions eine neue Aktivität mit einem eindeutigen Namen.

Ein Activity Worker kann eine Anwendung sein, die auf einer EC2 Amazon-Instance läuft, ein AWS Lambda Funktion, ein mobiles Gerät: jede Anwendung, die eine HTTP Verbindung herstellen kann und die überall gehostet wird. Wenn Step Functions den Status einer Aktivitätsaufgabe erreicht, wartet der Workflow darauf, dass ein Aktivitätsarbeiter eine Aufgabe abfragt. Ein Aktivitätsarbeiter fragt Step Functions abGetActivityTask, indem er die ARN für die zugehörige Aktivität verwendet und für sie sendet. GetActivityTaskgibt eine Antwort zurück, die input (eine Zeichenfolge mit JSON Eingaben für die Aufgabe) und eine taskToken(eine eindeutige Kennung für die Aufgabe) enthält. Nachdem der Aktivitäts-Worker seine Arbeit abgeschlossen hat, kann er einen Bericht über seinen Erfolg oder Misserfolg mithilfe von SendTaskSuccess oder SendTaskFailure bereitstellen. Diese beiden Aufrufe verwenden dastaskToken, das von GetActivityTask bereitgestellt wurde, um das Ergebnis dieser Aufgabe zuzuordnen.

APIsBezieht sich auf Aktivitätsaufgaben

Step Functions ermöglicht APIs das Erstellen und Auflisten von Aktivitäten, das Anfordern einer Aufgabe und das Verwalten des Ablaufs Ihrer Zustandsmaschine auf der Grundlage der Ergebnisse Ihres Workers.

Im Folgenden sind die Step Functions APIs aufgeführt, die sich auf Aktivitäten beziehen:

Anmerkung

Das Abrufen von Aktivitätsaufgaben mit GetActivityTask kann für einige Implementierungen eine gewisse Latenz verursachen. Siehe Vermeidung von Latenz bei der Abfrage von Aktivitätsaufgaben.

Auf den Abschluss einer Aktivitätsaufgabe warten

Konfigurieren Sie, wie lange ein Zustand wartet, indem Sie TimeoutSeconds in der Aufgabendefinition festlegen. Wenn die Aufgabe aktiv bleiben und warten soll, senden Sie mit SendTaskHeartbeat regelmäßig einen Heartbeat von Ihrem Aktivitäts-Worker innerhalb der in TimeoutSeconds konfigurierten Zeit. Durch die Konfiguration einer langen Timeout-Dauer und das aktive Senden eines Heartbeats kann eine Aktivität in Step Functions bis zu einem Jahr warten, bis eine Ausführung abgeschlossen ist.

Wenn Sie beispielsweise einen Workflow benötigen, der auf das Ergebnis eines langen Prozesses wartet, gehen Sie wie folgt vor:

  1. Erstellen Sie eine Aktivität mithilfe der Konsole oder unter Verwendung von CreateActivity. Notieren Sie sich die Aktivität. ARN

  2. Verweisen Sie darauf ARN in einem Aktivitätsaufgabenstatus in Ihrer Zustandsmaschine Definition und EinstellungTimeoutSeconds.

  3. Implementieren Sie einen Activity Worker, der mithilfe GetActivityTask von und referenziert diese Aktivität nach Arbeit abfragt. ARN

  4. Verwenden Sie regelmäßig SendTaskHeartbeat innerhalb der in HeartbeatSeconds in Ihrer Aufgabendefinition des Zustandsautomaten festgelegten Zeit, um zu verhindern, dass ein Timeout für die Aufgabe entsteht.

  5. Starten Sie die Ausführung Ihres Zustandsautomaten.

  6. Starten Sie Ihren Aktivitäts-Worker-Prozess.

Die Ausführung wird an dem Aktivitätsaufgabenstatus unterbrochen und wartet darauf, dass Ihr Aktivitäts-Worker eine Aufgabe abruft. Nachdem Ihrem Aktivitäts-Worker ein taskToken übergeben wurde, wartet Ihr Workflow, bis SendTaskSuccess oder SendTaskFailureeinen Status bereitstellt. Erhält die Ausführung keinen dieser Status oder einen SendTaskHeartbeat-Aufruf, bevor die in TimeoutSeconds konfigurierte Zeit abgelaufen ist, schlägt die Ausführung fehl und der Ausführungsverlauf enthält ein ExecutionTimedOut-Ereignis.

Beispiel: Activity Worker in Ruby

Der folgende Beispielcode für Activity Worker implementiert ein Consumer-Producer-Muster mit einer konfigurierbaren Anzahl von Threads für Poller und Activity Worker. Die Abfrage-Threads fragen ständig die Aktivitätsaufgabe in Step Functions ab. Wenn eine Aktivitätsaufgabe abgerufen wird, durchläuft sie eine begrenzte Blockierungswarteschlange, damit der Aktivitätsthread sie aufnehmen kann.

Der folgende Code ist der Haupteinstiegspunkt für dieses Beispiel für einen Ruby Activity Worker.

require_relative '../lib/step_functions/activity' credentials = Aws::SharedCredentials.new region = 'us-west-2' activity_arn = 'ACTIVITY_ARN' activity = StepFunctions::Activity.new( credentials: credentials, region: region, activity_arn: activity_arn, workers_count: 1, pollers_count: 1, heartbeat_delay: 30 ) # Start method block contains your custom implementation to process the input activity.start do |input| { result: :SUCCESS, echo: input['value'] } end

Sie müssen Ihre Aktivität ARN und Region angeben. Der Code enthält Standardwerte, die Sie festlegen können, z. B. die Anzahl der Threads und die Heartbeat-Verzögerung.

Item Beschreibung

require_relative

Relativer Pfad zum folgenden Beispielcode für einen Aktivitäts-Worker.

region

AWS Region Ihrer Aktivität.

workers_count

Die Anzahl der Threads für Ihren Aktivitäts-Worker. Für die meisten Implementierungen sollten 10 bis 20 Threads ausreichend sein. Je länger die Verarbeitung der Aktivität dauert, desto mehr Threads benötigt sie gegebenenfalls. Als Schätzwert in Sekunden multiplizieren Sie die Anzahl der Prozessaktivitäten pro Sekunde mit der Aktivitätsverarbeitungslatenz des 99. Perzentils.

pollers_count

Die Anzahl der Threads für Ihre Poller. Für die meisten Implementierungen sollten 10 bis 20 Threads ausreichend sein.

heartbeat_delay

Die Verzögerung zwischen den Heartbeats in Sekunden.

input Implementierungslogik Ihrer Aktivität

Nächste Schritte

Ausführlichere Informationen über das Erstellen eines Zustandsautomaten, der Aktivitäts-Arbeitskräfte verwendet, finden Sie unter: