Step Functions で ExecutionAlreadyExistsException が発生するときの対処方法

実行の際に指定する名前が重複すると ExecutionAlreadyExistsException が発生します
2022.06.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

Step Functions から別の Step Functions を2回実行しています。1回目の実行は正常に実行できるのですが、2回目の実行の際はExecutionAlreadyExistsExceptionが記録され、実行に失敗しました。
Step Functions は別の Step Functions を何度も実行できない制約でもあるのでしょうか?回避策があれば教えてください。

実行イベント履歴

{
  "resourceType": "states",
  "resource": "startExecution.sync:2",
  "error": "StepFunctions.ExecutionAlreadyExistsException",
  "cause": "Execution Already Exists: 'arn:aws:states:ap-northeast-1:123456789012:execution:hato-child-StateMachine:HelloWorld' (Service: AWSStepFunctions; Status Code: 400; Error Code: ExecutionAlreadyExists; Request ID: 863f4383-9e37-42d0-b3ca-635c9a096182; Proxy: null)"
}

どう対応すればいいの?

Step Functions の実行を定義したParametersNameが重複していないかご確認ください。

{  
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution.sync:2",
   "Parameters":{  
      "Input":{
        "Comment": "Hello world!"
       },
      "StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}

Step Functions の標準ワークフローでは、実行完了後 90 日間は履歴を保持し、同じ名前のワークフローが再実行された場合はExecutionAlreadyExistsExceptionで実行を失敗します。同じワークフローを複数回実行させたい場合は、重複しない異なる名前を設定する必要があります。

そのため、同じワークフローを複数回実行することはサポートされていますが、ParametersNameで指定するワークフローの名前が重複が発生しない値になるように定義するか、Nameを指定しない定義※にする必要があります。

Nameは必須属性ではなく、指定しない場合は Step Functions が重複しない値を自動生成します。

参考資料

name

The name of the execution. This name must be unique for your AWS account, region, and state machine for 90 days.

独自の実行 ID を指定しない場合、Step Functions が一意の実行 ID を生成します。