

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.

# Bewährte Methoden für Step Functions
<a name="sfn-best-practices"></a>

**Status verwalten und Daten transformieren**  
Erfahren Sie mehr über das [Übergeben von Daten zwischen Zuständen mithilfe von Variablen](workflow-variables.md) und das [Transformieren von Daten mit JSONata](transforming-data.md).

Die folgenden Themen sind bewährte Methoden, die Sie bei der Verwaltung und Optimierung Ihrer Step Functions Functions-Workflows unterstützen sollen.

**Topics**
+ [

## Optimierung der Kosten mithilfe von Express Workflows
](#cost-opt-exp-workflows)
+ [

## Zustandsmaschinen und Aktivitäten in Step Functions kennzeichnen
](#concepts-tagging)
+ [

## Verwendung von Timeouts zur Vermeidung von festgefahrenen Step Functions Functions-Workflow-Ausführungen
](#sfn-stuck-execution)
+ [

## Amazon S3 verwenden, ARNs anstatt große Nutzlasten in Step Functions zu übergeben
](#avoid-exec-failures)
+ [

## Neue Ausführungen starten, um zu verhindern, dass das Verlaufsquota in Step Functions erreicht wird
](#bp-history-limit)
+ [

## Behandeln Sie vorübergehende Lambda-Serviceausnahmen
](#bp-lambda-serviceexception)
+ [

## Vermeidung von Latenz bei der Abfrage von Aktivitätsaufgaben
](#bp-activity-pollers)
+ [

## Vermeidung von Größenbeschränkungen CloudWatch durch Ressourcenrichtlinien
](#bp-cwl)

## Optimierung der Kosten mithilfe von Express Workflows
<a name="cost-opt-exp-workflows"></a>

Step Functions bestimmt die Preise für Standard- und Express-Workflows auf der Grundlage des Workflowtyps, den Sie zum Erstellen Ihrer Zustandsmaschinen verwenden. Um die Kosten Ihrer serverlosen Workflows zu optimieren, können Sie eine oder beide der folgenden Empfehlungen befolgen:

Informationen dazu, wie sich die Wahl eines Standard- oder Express-Workflow-Typs auf die Abrechnung auswirkt, finden Sie unter [AWS Step FunctionsPreisgestaltung](https://aws.amazon.com/step-functions/pricing/).

### Nest Express-Workflows innerhalb von Standard-Workflows
<a name="cost-opt-exp-wflow-nesting"></a>

Step Functions führt Workflows aus, die eine begrenzte Dauer und Anzahl von Schritten haben. Einige Workflows können die Ausführung innerhalb eines kurzen Zeitraums abschließen. Andere erfordern möglicherweise eine Kombination aus high-event-rate Workflows mit langer Laufzeit. Mit Step Functions können Sie große, komplexe Workflows aus mehreren kleineren, einfacheren Workflows erstellen. 

Um beispielsweise einen Workflow für die Auftragsabwicklung zu erstellen, können Sie alle Aktionen, die nicht idempotent sind, in einen Standard-Workflow aufnehmen. Dies könnte Aktionen wie die Genehmigung von Bestellungen durch menschliche Interaktion und die Bearbeitung von Zahlungen beinhalten. Anschließend können Sie eine Reihe idempotenter Aktionen, wie das Senden von Zahlungsbenachrichtigungen und die Aktualisierung des Produktbestands, in einem Express-Workflow kombinieren. Sie können diesen Express-Workflow innerhalb des Standard-Workflows verschachteln. In diesem Beispiel wird der Standard-Workflow als *Parent State Machine* bezeichnet. Der verschachtelte Express-Workflow wird als *Child State Machine* bezeichnet.

### Migrieren Sie Standard-Workflows zu Express-Workflows
<a name="cost-opt-exp-wflow-conversion"></a>

Sie sollten erwägen, Ihre Standard-Workflows auf Express-Workflows zu migrieren, wenn sie die folgenden Anforderungen erfüllen:
+ Die Ausführung Ihres Workflows muss innerhalb von fünf Minuten abgeschlossen sein.
+ Ihr Workflow entspricht einem *at-least-once*Ausführungsmodell, was bedeutet, dass jeder Schritt im Workflow mehr als genau einmal ausgeführt werden kann.
+ Ihr Workflow verwendet **nicht** die `.waitForTaskToken` oder `.sync` Service-Integrationsmuster.

**Wichtig**  
Express-Workflows verwenden Amazon CloudWatch Logs, um Ausführungsverläufe aufzuzeichnen. Bei der Verwendung CloudWatch von Logs fallen zusätzliche Kosten an.

**Um einen Standard-Workflow mithilfe der Konsole zu einem Express-Workflow zu migrieren**

1. Öffnen Sie die [Step Functions Functions-Konsole](https://console.aws.amazon.com/states/home?region=us-east-1#/).

1. Wählen Sie auf der Seite **State Machines** einen State-Machine vom Typ Standard aus, um ihn zu öffnen.
**Tipp**  
Wählen Sie in der Dropdownliste **Beliebiger Typ** die Option **Standard** aus, um die Liste der Zustandsmaschinen zu filtern und nur Standard-Workflows anzuzeigen.

1. Wählen Sie **In neue kopieren** aus.

   Workflow Studio wird geöffnet und [Entwurfsmodus](workflow-studio.md#wfs-interface-design-mode) zeigt den Workflow des ausgewählten Zustandsmaschinen an.

1. (Optional) Aktualisieren Sie den Workflow-Entwurf.

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.

1. (Optional) Geben Sie unter **State-Machine-Konfiguration** weitere Workflow-Einstellungen an, z. B. den Zustandsmaschinentyp und seine Ausführungsrolle.

   Stellen Sie sicher, dass Sie als **Typ** die Option **Express** wählen. Behalten Sie alle anderen Standardauswahlen in den **State-Machine-Einstellungen** bei.
**Anmerkung**  
Wenn Sie einen Standard-Workflow migrieren, der zuvor in [AWS CDK](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-stepfunctions-readme.html)oder definiert wurdeAWS SAM, müssen Sie den Wert `Type` und `Resource` den Namen ändern.

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

Weitere Informationen zu bewährten Methoden und Richtlinien für die Verwaltung der Kostenoptimierung für Ihre Workflows finden Sie unter [Erstellen](https://aws.amazon.com/blogs/compute/building-cost-effective-aws-step-functions-workflows/) kostengünstiger Workflows. AWS Step Functions

## Zustandsmaschinen und Aktivitäten in Step Functions kennzeichnen
<a name="concepts-tagging"></a>

AWS Step Functionsunterstützt das Markieren von Zustandsmaschinen (sowohl Standard als auch Express) und Aktivitäten. Mithilfe von Tags können Sie Ihre Ressourcen verfolgen und verwalten und für mehr Sicherheit in Ihren AWS Identity and Access Management (IAM-) Richtlinien sorgen. Nachdem Sie die Ressourcen von Step Functions markiert haben, können Sie sie mit AWS -Ressourcengruppen verwalten. Wie das geht, erfahren Sie im [AWS -RessourcengruppenBenutzerhandbuch](https://docs.aws.amazon.com/ARG/latest/userguide/). 

Bei der Tag-basierten Autorisierung erben die Ressourcen zur Ausführung von Zustandsmaschinen, wie im folgenden Beispiel gezeigt, die einem Zustandsmaschine zugewiesenen Tags.

```
arn:partition:states:region:account-id:execution:<StateMachineName>:<ExecutionId>
```

Wenn Sie die Ausführungsressource ARN aufrufen [DescribeExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeExecution.html)oder anderweitig APIs angeben, verwendet Step Functions Tags, die der Zustandsmaschine zugeordnet sind, um die Anfrage anzunehmen oder abzulehnen, während die Tag-basierte Autorisierung durchgeführt wird. Auf diese Weise können Sie den Zugriff auf Zustandsmaschinenausführungen auf Zustandsmaschinenebene zulassen oder verweigern.

Weitere Informationen zu Einschränkungen in Bezug auf das Markieren von Ressourcen finden Sie unter [Einschränkungen im Zusammenhang mit dem Tagging](service-quotas.md#sfn-limits-tagging).

### Markieren für die Kostenzuordnung
<a name="tagging-cost"></a>

Mithilfe von Tags zur Kostenzuweisung können Sie den Zweck einer Zustandsmaschine identifizieren und diese Organisation in Ihrer AWS Rechnung berücksichtigen. Melden Sie sich an, um Ihre AWS Kontorechnung mit den Tag-Schlüsseln und -Werten zu erhalten. Einzelheiten [zur Einrichtung von Berichten finden Sie im *AWS BillingBenutzerhandbuch* unter Einen monatlichen Kostenzuordnungsbericht](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/configurecostallocreport.html#allocation-report) einrichten.

Sie könnten beispielsweise wie folgt Tags hinzufügen, die Ihre Kostenstelle und den Zweck Ihrer Step Functions Functions-Ressourcen repräsentieren.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/step-functions/latest/dg/sfn-best-practices.html)

### Markieren für-Sicherheit
<a name="tagging-security"></a>

IAM unterstützt die Steuerung des Zugriffs auf Ressourcen anhand von Tags. Um den Zugriff anhand von Tags zu steuern, geben Sie Informationen zu Ihren Ressourcen-Tags im Bedingungselement einer IAM-Richtlinie an.

Sie könnten beispielsweise den Zugriff auf alle Step Functions-Ressourcen einschränken, die ein Tag mit dem Schlüssel `environment` und dem Wert enthalten`production`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "states:TagResource",
                "states:DeleteActivity",
                "states:DeleteStateMachine",
                "states:StopExecution"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {"aws:ResourceTag/environment": "production"}
            }
        }
    ]
}
```

Weitere Informationen finden Sie unter [Zugriffssteuerung mit Tags](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) im IAM-Benutzerhandbuch.

### Verwaltung von Tags in der Step Functions Functions-Konsole
<a name="tagging-console"></a>

Sie können Tags für Ihre Zustandsmaschinen in der Step Functions Functions-Konsole anzeigen und verwalten. Wählen Sie auf der Seite **Details** eines Zustandsautomaten die Option **Tags** aus.

### Verwaltung von Tags mit Step Functions API-Aktionen
<a name="tagging-api"></a>

Verwenden Sie die folgenden API-Aktionen, um Tags mithilfe der Step Functions API zu verwalten:
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListTagsForResource.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListTagsForResource.html)
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_TagResource.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_TagResource.html)
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_UntagResource.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UntagResource.html)

## Verwendung von Timeouts zur Vermeidung von festgefahrenen Step Functions Functions-Workflow-Ausführungen
<a name="sfn-stuck-execution"></a>

Standardmäßig gibt die Sprache von Amazon States keine Timeouts für State-Machine-Definitionen an. Ohne ein explizites Timeout verlassen sich Step Functions oft ausschließlich auf die Antwort eines Aktivitätsmitarbeiters, um zu wissen, dass eine Aufgabe abgeschlossen ist. Wenn etwas schief geht und das `TimeoutSeconds` Feld nicht für den `Task` Status `Activity` oder angegeben ist, bleibt eine Ausführung hängen und wartet auf eine Antwort, die niemals kommen wird.

Um diese Situation zu vermeiden, geben Sie ein angemessenes Timeout an, wenn Sie eine `Task` Zustandsmaschine erstellen. Beispiel: 

```
"ActivityState": {
  "Type": "Task",
  "Resource": "arn:aws:states:region:account-id:activity:HelloWorld",
  "TimeoutSeconds": 300,
  "Next": "NextState"
}
```

Wenn Sie einen [Callback mit einem Task-Token verwenden (. waitForTaskToken)](connect-to-resource.md#connect-wait-token), empfehlen wir, Heartbeats zu verwenden und das `HeartbeatSeconds` Feld zu Ihrer `Task` Statusdefinition hinzuzufügen. Sie können einen Wert festlegen`HeartbeatSeconds`, der unter dem Zeitlimit für die Aufgabe liegt. Wenn Ihr Workflow also mit einem Heartbeat-Fehler fehlschlägt, wissen Sie, dass es am Aufgabenfehler liegt und nicht daran, dass die Ausführung der Aufgabe viel Zeit in Anspruch nimmt.

```
{
  "StartAt": "Push to SQS",
  "States": {
    "Push to SQS": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
      "HeartbeatSeconds": 600,
      "Parameters": {
        "MessageBody": { "myTaskToken.$": "$$.Task.Token" },
        "QueueUrl": "https://sqs.us-east-1.amazonaws.com/account-id/push-based-queue"
      },
      "ResultPath": "$.SQS",
      "End": true
    }
  }
}
```

Weitere Informationen finden Sie [Workflow-Status der Aufgabe](state-task.md) in der Sprachdokumentation von Amazon States.

**Anmerkung**  
Sie können mithilfe des `TimeoutSeconds` Felds in Ihrer Amazon States-Sprachdefinition ein Timeout für Ihren State Machine festlegen. Weitere Informationen finden Sie unter [Zustandsmaschinenstruktur in Amazon States Language für Step Functions Functions-Workflows](statemachine-structure.md).

## Amazon S3 verwenden, ARNs anstatt große Nutzlasten in Step Functions zu übergeben
<a name="avoid-exec-failures"></a>

Ausführungen, die große Datennutzlasten zwischen Zuständen übergeben, können beendet werden. Wenn die Daten, die Sie zwischen Bundesstaaten übertragen, auf über 256 KiB anwachsen könnten, verwenden Sie Amazon Simple Storage Service (Amazon S3), um die Daten zu speichern, und analysieren Sie den Amazon-Ressourcennamen (ARN) des Buckets im `Payload` Parameter, um den Bucket-Namen und den Schlüsselwert abzurufen. Alternativ passen Sie Ihre Implementierung an, sodass Sie in Ihren Ausführungen kleinere Nutzlasten übergeben.

Im folgenden Beispiel übergibt eine Zustandsmaschine Eingaben an eine AWS Lambda Funktion, die eine JSON-Datei in einem Amazon S3 S3-Bucket verarbeitet. Nachdem Sie diese Zustandsmaschine ausgeführt haben, liest die Lambda-Funktion den Inhalt der JSON-Datei und gibt den Dateiinhalt als Ausgabe zurück.

**So erstellen Sie die Lambda-Funktion:**  
Die folgende Lambda-Funktion mit dem Namen `pass-large-payload` liest den Inhalt einer JSON-Datei, die in einem bestimmten Amazon S3 S3-Bucket gespeichert ist.

**Anmerkung**  
Nachdem Sie diese Lambda-Funktion erstellt haben, stellen Sie sicher, dass Sie ihrer IAM-Rolle die entsprechende Berechtigung zum Lesen aus einem Amazon S3 S3-Bucket erteilen. Fügen Sie beispielsweise die **ReadOnlyAccessAmazonS3-Berechtigung** der Rolle der Lambda-Funktion hinzu.

```
import json
import boto3
import io
import os

s3 = boto3.client('s3')

def lambda_handler(event, context):
    event = event['Input']
    final_json = str()
    
    s3 = boto3.resource('s3')
    bucket = event['bucket'].split(':')[-1]
    filename = event['key']
    directory = "/tmp/{}".format(filename)
    
    s3.Bucket(bucket).download_file(filename, directory)
    
    with open(directory, "r") as jsonfile:
    
        final_json = json.load(jsonfile)
    
    os.popen("rm -rf /tmp")
    
    return final_json
```

**Erstellen Sie die Zustandsmaschine**  
Die folgende Zustandsmaschine ruft die Lambda-Funktion auf, die Sie zuvor erstellt haben.

```
{  
   "StartAt":"Invoke Lambda function",
   "States":{  
      "Invoke Lambda function":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke",
         "Parameters":{  
            "FunctionName":"arn:aws:lambda:us-east-2:123456789012:function:pass-large-payload",
            "Payload":{  
               "Input.$":"$"
            }
         },
         "OutputPath": "$.Payload",
         "End":true
      }
   }
}
```

Anstatt eine große Datenmenge in der Eingabe zu übergeben, könnten Sie diese Daten in einem Amazon S3 S3-Bucket speichern und den Amazon-Ressourcennamen (ARN) des Buckets im `Payload` Parameter übergeben, um den Bucket-Namen und den Schlüsselwert zu erhalten. Ihre Lambda-Funktion kann dann diesen ARN verwenden, um direkt auf die Daten zuzugreifen. Im Folgenden finden Sie eine Beispieleingabe für die State-Machine-Ausführung, bei der die Daten `data.json` in einem Amazon S3 S3-Bucket mit dem Namen gespeichert werden`amzn-s3-demo-large-payload-json`.

```
{
  "key": "data.json",
  "bucket": "arn:aws:s3:::amzn-s3-demo-large-payload-json"
}
```

## Neue Ausführungen starten, um zu verhindern, dass das Verlaufsquota in Step Functions erreicht wird
<a name="bp-history-limit"></a>

AWS Step Functionshat ein festes Kontingent von 25.000 Einträgen im Verlauf der Ausführungsereignisse. Wenn eine Ausführung 24.999 Ereignisse erreicht, wartet sie auf das nächste Ereignis.
+ Wenn die Ereignisnummer 25.000 lautet`ExecutionSucceeded`, wird die Ausführung erfolgreich abgeschlossen.
+ Wenn die Ereignisnummer 25.000 nicht angegeben ist`ExecutionSucceeded`, wird das `ExecutionFailed` Ereignis protokolliert und die Ausführung der Zustandsmaschine schlägt fehl, da das Verlaufslimit erreicht ist

Um zu verhindern, dass dieses Kontingent für lang andauernde Ausführungen erreicht wird, können Sie eine der folgenden Problemumgehungen ausprobieren:
+ [Verwenden Sie den Status Map im Modus Verteilt](state-map-distributed.md). In diesem Modus führt der `Map` Status jede Iteration als untergeordnete Workflow-Ausführung aus, wodurch eine hohe Parallelität von bis zu 10.000 parallel untergeordneten Workflow-Ausführungen ermöglicht wird. Jede untergeordnete Workflow-Ausführung hat ihren eigenen Ausführungsverlauf, der von dem des übergeordneten Workflows getrennt ist.
+ Starten Sie eine neue State-Machine-Ausführung direkt vom `Task` Status einer laufenden Ausführung aus. Um solche verschachtelten Workflow-Ausführungen zu starten, verwenden Sie die `[StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)` API-Aktion von Step Functions in der übergeordneten Zustandsmaschine zusammen mit den erforderlichen Parametern. Weitere Informationen zur Verwendung verschachtelter Workflows finden Sie unter [Starten Sie Workflow-Ausführungen von einem Aufgabenstatus aus in Step Functions](concepts-nested-workflows.md) oder [Verwenden einer Step Functions Functions-API-Aktion, um ein neues Ausführungs-Tutorial fortzusetzen](tutorial-continue-new.md).
**Tipp**  
Ein Beispiel für einen verschachtelten Workflow finden Sie unter [Kosten optimieren](https://catalog.workshops.aws/stepfunctions/nested-workflow) in *The AWS Step Functions* Workshop.
+ Implementieren Sie ein Muster, das eine AWS Lambda Funktion verwendet, die eine neue Ausführung Ihrer Zustandsmaschine starten kann, um die laufende Arbeit auf mehrere Workflow-Ausführungen aufzuteilen. Weitere Informationen finden Sie im Tutorial [Verwenden einer Lambda-Funktion, um eine neue Ausführung in Step Functions fortzusetzen](tutorial-use-lambda-cont-exec.md).

## Behandeln Sie vorübergehende Lambda-Serviceausnahmen
<a name="bp-lambda-serviceexception"></a>

AWS Lambdakann gelegentlich zu vorübergehenden Servicefehlern kommen. In diesem Fall führt der Aufruf von Lambda zu einem 500-Fehler, z. B.`ClientExecutionTimeoutException`, `ServiceException``AWSLambdaException`, oder. `SdkClientException` Es hat sich bewährt, diese Ausnahmen in Ihrer Zustandsmaschine proaktiv zu behandeln, um Ihre Lambda-Funktion `Retry` aufzurufen oder um den Fehler zu `Catch` beheben.

Lambda-Fehler werden als `Lambda.ErrorName` gemeldet. Um einen Lambda-Serviceausnahmefehler erneut zu versuchen, können Sie den folgenden `Retry` Code verwenden.

```
"Retry": [ {
   "ErrorEquals": [ "Lambda.ClientExecutionTimeoutException", "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException"],
   "IntervalSeconds": 2,
   "MaxAttempts": 6,
   "BackoffRate": 2
} ]
```

**Anmerkung**  
Unbehandelte Fehler in Lambda-Laufzeiten wurden in der Vergangenheit nur als gemeldet. `Lambda.Unknown` In neueren Laufzeiten werden Timeouts wie `Sandbox.Timedout` in der Fehlerausgabe gemeldet.  
Wenn Lambda die maximale Anzahl von Aufrufen überschreitet, wird der gemeldete Fehler angezeigt. `Lambda.TooManyRequestsException`  
Stimmt auf`Lambda.Unknown`, und ab`Sandbox.Timedout`, `States.TaskFailed` um mögliche Fehler zu behandeln. Sie können es auch verwenden`States.ALL`, aber es muss alleine und am Ende der Liste stehen.  
Weitere Informationen zu Lambda `Handled` und `Unhandled` Fehlern finden Sie `FunctionError` im [AWS LambdaDeveloper Guide](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_ResponseSyntax). 

Weitere Informationen finden Sie hier:
+ [Erneuter Versuch nach einem Fehler](concepts-error-handling.md#error-handling-retrying-after-an-error)
+ [Behandlung von Fehlerbedingungen in einer Step Functions Functions-Zustandsmaschine](tutorial-handling-error-conditions.md)
+ [Fehler beim Aufrufen von Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_Errors)

## Vermeidung von Latenz bei der Abfrage von Aktivitätsaufgaben
<a name="bp-activity-pollers"></a>

Die `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`-API ist so konzipiert, dass sie ein [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) *einmalig unterstützt*. Wenn ein `taskToken` während der Kommunikation mit einem Aktivitäts-Worker verloren geht, können mehrere `GetActivityTask`-Anfragen für 60 Sekunden blockiert werden, die auf eine Antwort warten, bis ein Timeout für `GetActivityTask` stattfindet. 

Wenn Sie nur eine kleine Anzahl von Abrufen haben, die auf eine Antwort warten, ist es möglich, dass alle Anforderungen hinter der blockierten Anforderung auflaufen und anhalten. Wenn Sie jedoch eine große Anzahl ausstehender Umfragen für jede Aktivität haben (Amazon Resource Name, ARN), und ein Teil Ihrer Anfragen in der Warteschleife stecken bleibt, können noch viele weitere Anfragen erhalten `taskToken` und mit der Bearbeitung beginnen. 

Für Produktionssysteme empfehlen wir mindestens 100 offene Abrufe pro Aktivitäts-ARN zu jedem Zeitpunkt. Wenn ein Abruf blockiert wird, und einen Teil dieser Abrufe dahinter auflaufen, gibt es nach wie vor viele weitere Anfragen, die ein `taskToken` erhalten, um weiterzuarbeiten, während die `GetActivityTask`-Anfrage blockiert ist. 

So vermeiden Sie diese Art von Latenzproblemen beim Abrufen von Aufgaben
+ Implementieren Sie Ihre Poller als separate Threads aus der Arbeit in Ihrer Aktivitäts-Worker-Implementierung.
+ Verwenden Sie mindestens 100 offene Abrufe pro Aktivitäts-ARN zu jedem Zeitpunkt.
**Anmerkung**  
Eine Skalierung auf 100 offene Abrufe pro ARN kann kostspielig sein. Beispielsweise ist das Abfragen von 100 Lambda-Funktionen pro ARN 100-mal teurer als die Verwendung einer einzigen Lambda-Funktion mit 100 Abfrage-Threads. Um sowohl die Latenz zu reduzieren *als auch* die Kosten zu minimieren, verwenden Sie eine Sprache mit asynchronem E/A und implementieren pro Worker mehrere Abfrage-Threads. Ein Beispiel für einen Aktivitäts-Worker, in dem die Poller-Threads unabhängig von der Arbeitsthreads sind, finden Sie unter [Beispiel: Activity Worker in Ruby](concepts-activities.md#example-ruby-activity-worker). 

Weitere Informationen zu Aktivitäten und Aktivitäts-Workern finden Sie unter [Erfahren Sie mehr über Aktivitäten in Step Functions](concepts-activities.md).

## Vermeidung von Größenbeschränkungen CloudWatch durch Ressourcenrichtlinien
<a name="bp-cwl"></a>

Wenn Sie eine Zustandsmaschine mit Protokollierung erstellen oder eine vorhandene Zustandsmaschine aktualisieren, um die Protokollierung zu aktivieren, muss Step Functions Ihre CloudWatch Logs-Ressourcenrichtlinie mit der von Ihnen angegebenen Protokollgruppe aktualisieren. CloudWatch Die Ressourcenrichtlinien für Protokolle sind auf 5.120 Zeichen begrenzt.

Wenn CloudWatch Logs feststellt, dass sich eine Richtlinie der Größenbeschränkung nähert, aktiviert CloudWatch Logs automatisch die Protokollierung für Protokollgruppen, die mit beginnen. `/aws/vendedlogs/`

Sie können Ihren CloudWatch Logs-Protokollgruppennamen ein Präfix voranstellen`/aws/vendedlogs/`, um die Größenbeschränkung der CloudWatch Logs-Ressourcenrichtlinie zu umgehen. Wenn Sie in der Step Functions Functions-Konsole eine Protokollgruppe erstellen, wird dem vorgeschlagenen Protokollgruppennamen bereits ein Präfix `/aws/vendedlogs/states` vorangestellt. 

CloudWatch Logs hat außerdem ein Kontingent von zehn Ressourcenrichtlinien pro Region und Konto. Wenn Sie versuchen, die Protokollierung auf einem Zustandsmaschine zu aktivieren, der bereits zehn CloudWatch Logs-Ressourcenrichtlinien in einer Region für ein Konto hat, wird der Zustandsmaschine nicht erstellt oder aktualisiert. Weitere Informationen zu Protokollierungskontingenten finden Sie unter [CloudWatch Protokollkontingente](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html). 

Wenn Sie Probleme beim Senden von Protokollen an CloudWatch Logs haben, finden Sie weitere Informationen unter[Troubleshooting state machine logging to CloudWatch Logs](cw-logs.md#troubleshooting-logging-to-cloudwatch).