

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
<a name="concepts-activities"></a>

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 (Amazon EC2), Amazon Elastic Container Service (Amazon ECS) oder sogar auf Mobilgeräten ausführen.

## -Übersicht
<a name="activities-overview"></a>

In sind Aktivitäten eine MöglichkeitAWS Step Functions, 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 erstellen`[CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`. Dadurch wird ein Amazon-Ressourcenname (ARN) für Ihren Aufgabenstatus bereitgestellt. Verwenden Sie diesen ARN, um den Aufgabenstatus für die Arbeit in Ihrem Aktivitäts-Worker abzurufen. 

**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, eine AWS Lambda Funktion, ein Mobilgerät: jede Anwendung, die eine HTTP-Verbindung herstellen kann und überall gehostet wird. Wenn Step Functions den Status einer Aktivitätsaufgabe erreicht, wartet der Workflow darauf, dass ein Aktivitätsarbeiter eine Aufgabe abfragt. Ein Activity Worker fragt Step Functions ab`[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`, indem er den ARN für die zugehörige Aktivität verwendet und sendet. `GetActivityTask`gibt eine Antwort zurück, die `input` (eine Zeichenfolge mit JSON-Eingaben für die Aufgabe) und eine [https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html#StepFunctions-GetActivityTask-response-taskToken](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html#StepFunctions-GetActivityTask-response-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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)` oder `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)` bereitstellen. Diese beiden Aufrufe verwenden das`taskToken`, das von `GetActivityTask` bereitgestellt wurde, um das Ergebnis dieser Aufgabe zuzuordnen.

### APIs Bezieht sich auf Aktivitätsaufgaben
<a name="activities-api"></a>

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: 
+ `[CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`
+ `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`
+ `[ListActivities](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListActivities.html)`
+ `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)`
+ `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)`
+ `[SendTaskSuccess](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)`

**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](sfn-best-practices.md#bp-activity-pollers).

## Auf den Abschluss einer Aktivitätsaufgabe warten
<a name="activities-wait"></a>

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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)` 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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`. Notieren Sie sich den ARN der Aktivität.

1. Verweisen Sie auf diesen ARN in einem Aktivitätsaufgabenstatus in der Definition Ihres Zustandsautomaten und setzen Sie `TimeoutSeconds`.

1. Implementieren Sie einen Aktivitäts-Worker, der Arbeit mit `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)` abruft und dabei auf diesen Aktivitäts-ARN verweist. 

1. Verwenden Sie regelmäßig `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)` innerhalb der in `HeartbeatSeconds` in Ihrer Aufgabendefinition des Zustandsautomaten festgelegten Zeit, um zu verhindern, dass ein Timeout für die Aufgabe entsteht.

1. Starten Sie die Ausführung Ihres Zustandsautomaten.

1. 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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)` oder `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)`einen Status bereitstellt. Erhält die Ausführung keinen dieser Status oder einen `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)`-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
<a name="example-ruby-activity-worker"></a>

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 in der [AWS SDK für Ruby-API-Referenz](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/).
+ Um diesen Code und zugehörige Ressourcen herunterzuladen, besuchen Sie das [step-functions-ruby-activity-worker-Repository](https://github.com/aws-samples/step-functions-ruby-activity-worker) 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 den ARN und die Region für Ihre Aktivität angeben. Der Code enthält Standardwerte, die Sie festlegen können, z. B. die Anzahl der Threads und die Heartbeat-Verzögerung.


| Item | Description | 
| --- | --- | 
| `require_relative` | Relativer Pfad zum folgenden Beispielcode für einen Aktivitäts-Worker. | 
| `region` | AWSRegion 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
<a name="activities-nextsteps"></a>

Ausführlichere Informationen über das Erstellen eines Zustandsautomaten, der Aktivitäts-Arbeitskräfte verwendet, finden Sie unter:
+ [Einen Activity State Machine mithilfe von Step Functions erstellen](tutorial-creating-activity-state-machine.md)