AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

Step Functions ステートマシンが DELETING 状態のままとなる理由を知りたいです。

所要時間1分
0

AWS Step Functions ステートマシンが DELETING 状態のままになっているので、次のステップを知りたいです。

簡単な説明

DeleteStateMachine API アクションは、Step Functions ステートマシンおよび、ステートマシンのバージョンとエイリアスを非同期で削除します。DeleteStateMachine を呼び出し、ステータスが DELETING に切り替わった後に、ステートマシンの削除を停止することはできません。ただし、実行が Wait 状態になっている場合や、タスクが応答を待っている場合は、ステートマシンが DELETING 状態のままとなる場合があります。

ステートマシンの削除プロセスは、マシンが Standard ワークフローに従っているか、Express ワークフローに従っているかによって異なります。通常、Standard ワークフローのステートマシンでは削除が停止し、実行が次のエラーで失敗します。

{"Type": "ExecutionFailed", "ExecutionFailedEventDetails": {"Error": States.Runtime", "Cause": "State machine testing-delete has been deleted."}}

解決策

ステータスが DELETING のままになっている Standard ワークフローステートマシンを削除するには、次の手順を実行します。

  1. 実行中のすべての実行を一覧表示します
  2. 実行中のすべての実行を停止します

次の Python コードの例では、実行を停止します。

注: 実際のコマンドでは、EXAMPLE_ARN をステートマシンの ARN に置き換えます。

sf = boto3.client('stepfunctions')

runningExecutions = sf.list_executions(
  stateMachineArn='EXAMPLE_ARN',
  statusFilter='RUNNING')

executions = runningExecutions['executions']

if not executions:
    print("No running executions")
  else:
    for exec in executions:
      try:
        executionArn = exec['executionArn']
        response = sf.stop_execution(executionArn=executionArn)
      except Exception as err:
        print(f" Couldn't stop an execution due to the following error :  {err=}")
    print("All running executions have been aborted.")

注: Express ワークフローを備えたステートマシンは、ListExecutions および StopExecutions API をサポートしていません。

ステートマシンを誤って削除しないように保護する

Step Functions ではステートマシンをバックアップできませんが、次の方法でステートマシンを保護できます。

  • 削除する前にステートマシンの定義を保存します。次に、保存した定義を使用してステートマシンを再作成します。
  • AWS CloudFormation テンプレートの削除ポリシーを更新して、スタックが削除された場合でもリソースを保持するようにします。
  • ステートマシンを保護するには、スタックの終了保護を有効にしてください。
AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ