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. GetActivityTask
gibt 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:
-
Erstellen Sie eine Aktivität mithilfe der Konsole oder unter Verwendung von
CreateActivity
. Notieren Sie sich die Aktivität. ARN -
Verweisen Sie darauf ARN in einem Aktivitätsaufgabenstatus in Ihrer Zustandsmaschine Definition und Einstellung
TimeoutSeconds
. -
Implementieren Sie einen Activity Worker, der mithilfe
GetActivityTask
von und referenziert diese Aktivität nach Arbeit abfragt. ARN -
Verwenden Sie regelmäßig
SendTaskHeartbeat
innerhalb der inHeartbeatSeconds
in Ihrer Aufgabendefinition des Zustandsautomaten festgelegten Zeit, um zu verhindern, dass ein Timeout für die Aufgabe entsteht. -
Starten Sie die Ausführung Ihres Zustandsautomaten.
-
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 SendTaskFailure
einen 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.
-
Weitere Informationen finden Sie hier: AWS SDK for Ruby APIReferenz.
-
Um diesen Code und zugehörige Ressourcen herunterzuladen, besuchen Sie das step-functions-ruby-activity-worker-Repository
unter GitHub.
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 |
---|---|
|
Relativer Pfad zum folgenden Beispielcode für einen Aktivitäts-Worker. |
|
AWS Region Ihrer Aktivität. |
|
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. |
|
Die Anzahl der Threads für Ihre Poller. Für die meisten Implementierungen sollten 10 bis 20 Threads ausreichend sein. |
|
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: