为什么我的 Step Functions 状态机卡滞在 DELETING(正在删除)状态?

1 分钟阅读
0

我的 AWS Step Functions 状态机卡滞在 DELETING(正在删除)状态,我想知道我的后续步骤。

简短描述

DeleteStateMachine API 操作会异步删除 Step Functions 状态机以及状态机的版本与别名功能。在调用 DeleteStateMachine 并且状态切换为 DELETING(正在删除)之后,您无法停止状态机的删除。但是,当执行处于 Wait(等待)状态或任务正在等待响应时,状态机可能会卡滞在 DELETING(正在删除)状态。

状态机删除过程取决于您的计算机遵循的是标准工作流程还是快速工作流程。删除操作通常会卡滞在使用标准工作流程的状态机中,执行失败并出现以下错误:

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

解决方法

要删除卡滞在 DELETING(正在删除)状态的标准工作流程状态机,请完成以下步骤:

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

**注意:**使用快速工作流程的状态机不支持 ListExecutions 和 StopExecutions API。

保护您的状态机免遭意外删除

您无法在 Step Functions 中备份状态机,但您可以使用以下方法保护您的状态机:

AWS 官方
AWS 官方已更新 1 年前