

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
<a name="tutorial-creating-activity-state-machine"></a>

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](concepts-activities.md) im Abschnitt [Erfahren Sie mehr über Zustandsmaschinen in Step Functions](concepts-statemachines.md). 

Zum Durcharbeiten dieses Tutorials ist Folgendes erforderlich:
+ Das [ SDK für Java](https://aws.amazon.com/sdk-for-java/). Die Beispielaktivität in diesem Tutorial ist eine Java-Anwendung, die verwendet, AWS SDK für 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](https://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/set-up-creds.html) im *AWS SDK für Java Entwicklerhandbuch*.

## Schritt 1: Erstellen einer Aktivität
<a name="create-activity-state-machine-step-1"></a>

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.

1. Wählen Sie in der [Step Functions Functions-Konsole](https://console.aws.amazon.com/states/home) im Navigationsbereich auf der linken Seite **Aktivitäten** aus.

1. Wählen Sie **Create activity** (Aktivität erstellen) aus.

1. Geben Sie beispielsweise einen **Namen** für die Aktivität ein und wählen Sie dann **Aktivität erstellen** aus. `get-greeting`

1. Wenn Ihre Aktivitätsaufgabe erstellt wird, notieren Sie sich deren ARN, wie im folgenden Beispiel gezeigt.

   ```
   arn:aws:states:region:123456789012:activity:get-greeting
   ```

## Schritt 2: Erstellen Sie eine Zustandsmaschine
<a name="create-activity-state-machine-step-2"></a>

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](workflow-studio.md#wfs-interface-code-editor) den Workflow Studio.

1. Wählen Sie in der [Step Functions Functions-Konsole](https://console.aws.amazon.com/states/home) im Navigationsbereich auf der linken Seite **State Machines** aus.

1. Wählen Sie auf der Seite **State Machines** die Option **Create State Machine** aus.

1. Wählen Sie **Aus leerem Feld erstellen**.

1. Geben Sie Ihrem Zustandsmaschine einen Namen und wählen Sie dann **Weiter**, um Ihren Zustandsmaschine in Workflow Studio zu bearbeiten.

1. Für dieses Tutorial schreiben Sie die [Sprache der Amazonas-Staaten](concepts-amazon-states-language.md) (ASL) -Definition Ihres State Machine im Code-Editor. Wählen Sie dazu **Code.**

1. Entfernen Sie den vorhandenen Boilerplate-Code und fügen Sie den folgenden Code ein. Denken Sie daran, den Beispiel-ARN im `Resource` Feld durch den ARN der Aktivitätsaufgabe zu ersetzen, die Sie zuvor erstellt haben[Schritt 1: Erstellen einer Aktivität](#create-activity-state-machine-step-1).

   ```
   {
     "Comment": "An example using a Task state.",
     "StartAt": "getGreeting",
     "Version": "1.0",
     "TimeoutSeconds": 300,
     "States":
     {
       "getGreeting": {
         "Type": "Task",
         "Resource": "arn:aws:states:region:123456789012:activity:get-greeting",
         "End": true
       }
     }
   }
   ```

   Dies ist eine Beschreibung Ihrer Zustandsmaschine, die die [Sprache der Amazonas-Staaten](concepts-amazon-states-language.md) (ASL) verwendet. Sie definiert einen einzelnen `Task`-Zustand namens `getGreeting`. Weitere Informationen finden Sie unter [State Machine Structure](statemachine-structure.md).

1. Vergewissern Sie sich[Diagrammvisualisierung](workflow-studio.md#wfs-interface-code-graph-viz), dass das Workflow-Diagramm für die ASL-Definition, die Sie hinzugefügt haben, dem folgenden Diagramm ähnelt.  
![\[Graphische Darstellung der Zustandsmaschine mit RunActivity Aufgabenstatus.\]](http://docs.aws.amazon.com/de_de/step-functions/latest/dg/images/tutorial-create-state-machine-custom-preview.png)

1. 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.

1. (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](procedure-create-iam-role.md) 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 **Einen Rollen-ARN eingeben** aus und geben Sie dann einen ARN für diese IAM-Rolle ein.

1. 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 Principals in der IAM-Richtlinie entfernen). 

## Schritt 3: Implementieren eines Workers
<a name="create-activity-state-machine-step-3"></a>

Erstellen Sie einen *Worker*. Ein Worker ist ein Programm, das für Folgendes verantwortlich ist:
+ Polling-Step-Funktionen 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).
+ Zurückgeben der Ergebnisse mithilfe der API-Aktionen `SendTaskSuccess`, `SendTaskFailure` und `SendTaskHeartbeat`.

**Anmerkung**  
Ein umfassendes Beispiel für einen Aktivitäts-Worker finden Sie unter [Beispiel: Activity Worker in Ruby](concepts-activities.md#example-ruby-activity-worker). 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
<a name="create-activity-state-machine-implement-worker"></a>

1. Erstellen Sie eine Datei namens `GreeterActivities.java`.

1. 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 Umgebungsvariablen `AWS_ACCESS_KEY_ID` (oder `AWS_ACCESS_KEY`) und `AWS_SECRET_KEY` (oder `AWS_SECRET_ACCESS_KEY`) gesetzt sind. Weitere Informationen zur Bereitstellung der erforderlichen Anmeldeinformationen für das Werk finden Sie unter [AWSCredentialsAnbieter](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/AWSCredentialsProvider.html) in der *AWS SDK für Java API-Referenz* und unter [AWS Anmeldeinformationen und Region für die Entwicklung einrichten](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html) im *AWS SDK für Java Entwicklerhandbuch*.  
Standardmäßig wartet das AWS SDK bei jedem Vorgang bis zu 50 Sekunden, bis es 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 ein `SocketTimeoutException` Fehler angezeigt wird.

1. Ersetzen Sie in der Parameterliste des `GetActivityTaskRequest().withActivityArn()` Konstruktors den `ACTIVITY_ARN` Wert durch den ARN der Aktivitätsaufgabe, die Sie zuvor erstellt haben. [Schritt 1: Erstellen einer Aktivität](#create-activity-state-machine-step-1)

## Schritt 4: Führen Sie die Zustandsmaschine aus
<a name="create-activity-state-machine-step-4"></a>

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.

1. Wählen Sie auf der ***ActivityStateMachine***Seite die Option **Ausführung starten** aus.

   Das Dialogfeld **Ausführung starten** wird angezeigt.

1. Gehen **Sie im Dialogfeld Ausführung starten** wie folgt vor:

   1. (Optional) Geben Sie einen benutzerdefinierten Ausführungsnamen ein, um den generierten Standard zu überschreiben.
**Nicht-ASCII-Namen und Protokollierung**  
Step Functions akzeptiert Namen für Zustandsmaschinen, Ausführungen, Aktivitäten und Beschriftungen, die Nicht-ASCII-Zeichen enthalten. Da solche Zeichen Amazon CloudWatch daran hindern, Daten zu protokollieren, empfehlen wir, nur ASCII-Zeichen zu verwenden, damit Sie die Step Functions Functions-Metriken verfolgen können.

   1. Geben Sie in das **Eingabefeld** die folgende JSON-Eingabe ein, um Ihren Workflow auszuführen.

      ```
      {
        "who": "AWS Step Functions"
      }
      ```

   1. Wählen Sie **Start execution (Ausführung starten)** aus.

   1. 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](concepts-view-execution-details.md#exec-details-intf-step-details) 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](concepts-view-execution-details.md#exec-details-interface-overview).

## Schritt 5: Ausführen und Beenden des Workers
<a name="create-activity-state-machine-step-5"></a>

Damit der Worker Ihren Zustandsautomaten nach Aktivitäten abfragen kann, müssen Sie den Worker ausführen.

1. Navigieren Sie über die Befehlszeile zu dem Verzeichnis, in dem Sie `GreeterActivities.java` erstellt haben.

1. Um das AWS SDK zu verwenden, fügen Sie den vollständigen Pfad der `third-party` Verzeichnisse `lib` und zu den Abhängigkeiten Ihrer Build-Datei und zu Ihrer Java-Datei hinzu`CLASSPATH`. Weitere Informationen finden Sie unter [Herunterladen und Extrahieren des SDK](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-install.html#download-and-extract-sdk) im *AWS SDK für Java Entwicklerhandbuch*.

1. Kompilieren Sie die Datei.

   ```
   $ javac GreeterActivities.java
   ```

1. Führen Sie die Datei aus.

   ```
   $ java GreeterActivities
   ```

1. Navigieren Sie in der [Step Functions Functions-Konsole](https://console.aws.amazon.com/states/home?region=us-east-1#/) zur Seite mit den *Ausführungsdetails*.

1. Wenn die Ausführung abgeschlossen ist, überprüfen Sie die Ergebnisse Ihrer Ausführung.

1. Beenden Sie den Worker.