Redriving执行 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Redriving执行

您可以使用redrive重启过去 14 天内未成功完成的标准工作流执行。其中包括执行失败、中止或超时的执行。

redrive执行时,将继续执行未成功步骤的失败执行,并使用相同的输入。 Step Functions 会保留成功步骤的结果和执行历史记录,并且在redrive执行时不会重新运行这些步骤。例如,假设您的工作流包含两个状态:一个Pass 状态,后跟一个 Task 状态。如果您的工作流执行在 Task 状态下失败,而您redrive执行,那么执行会重新安排时间,然后重新运行 Task 状态。

Redriven执行使用与原始执行尝试相同的状态机定义和执行 ARN。如果您原始执行尝试与版本别名或两者相关联,则redriven执行将与相同的版本、别名或两者相关联。即使更新别名指向其他版本,redriven执行也会继续使用与原始执行尝试相关联的版本。由于redriven执行使用相同的状态机定义,因此如果您更新状态机定义,则必须启动新的执行。

redrive执行时,状态机级别的超时(如果已定义)将重置为 0。有关状态机级别超时的更多信息,请参阅 TimeoutSeconds

执行redrives被视为状态转换。有关状态转换如何影响计费的信息,请参阅 Step Functions 定价

未成功执行的Redrive资格

如果您原始执行尝试满足以下条件,则可以redrive执行:

  • 在 2023 年 11 月 15 日或之后启动执行。在此日期之前开始的执行不符合redrive资格。

  • 执行状态不是 SUCCEEDED

  • 工作流执行未超过 14 天的redrivable期限。Redrivable期限是指可以redrive给定执行的时间。这段时间从状态机完成执行的当天开始计算。

  • 工作流执行未超过一年的最长开放时间。有关状态机执行配额的信息,请参见与状态机执行相关的配额

  • 执行事件历史记录计数小于 24999。Redriven执行会将其事件历史记录附加到现有的事件历史记录中。确保您的工作流执行包含少于 24,999 个事件,从而可以容纳 ExecutionRedriven 历史事件和至少一个其他历史事件。

单个状态的Redrive行为

根据工作流中失败的状态,所有失败状态的redrive行为会有所不同。下表描述了所有状态的redrive行为。

状态名称 Redrive执行行为
Pass

如果前面的步骤失败或状态机超时,Pass 状态将退出且不会在redrive上面执行。

Task

重新安排和启动 Task 状态。

redrive重新运行 Task 状态的执行时,该状态的 TimeoutSeconds(如果已定义)将重置为 0。有关超时的更多信息,请参阅 Task 状态

Choice 重新评估 Choice 状态规则。
Wait

如果状态指定的 TimestampTimestampPath 指向过去的时间戳,redrive会退出 Wait 状态并进入 Next 字段中指定的状态。

Succeed

进入 Succeed 状态的状态机执行不会redrive。

Fail

重新进入 Fail 状态并再次失败。

Parallel

仅重新安排和redrives失败或中止的分支。

如果状态由于 States.DataLimitExceeded 错误而失败,则会重新运行 Parallel 状态,包括在原始执行尝试中成功的分支。

内联 Map 状态

仅重新安排和redrives失败或中止的迭代。

如果状态由于 States.DataLimitExceeded 错误而失败,则会重新运行内联 Map 状态,包括在原始执行尝试中成功的迭代。

分布式 Map 状态

redrives Map Run 中未成功执行的子工作流。有关更多信息,请参阅Redriving Map Run

如果状态因 States.DataLimitExceeded 错误而失败,则重新运行分布式 Map 状态。这包括在原始执行尝试中成功的子工作流。

redrive执行的 IAM 权限

Step Functions 需要适当的权限才能redrive执行。以下 IAM 策略示例授予状态机所需的最低权限,以便redriving执行。切记用特定资源信息替换斜体 文本。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:RedriveExecution" ], "Resource": "arn:aws:states:us-east-2:123456789012:execution:myStateMachine:*" } ] }

有关redrive Map Run 所需权限的示例,请参阅redriving分布式 Map 的 IAM 策略示例

在控制台中Redriving执行

您可以从 Step Functions 控制台中redrive符合条件的执行。

例如,假设以下图像代表状态机的工作流图。


                状态机的工作流图,包括以下状态:Pass、Parallel、Lambda 调用和 Wait。

想象一下,您运行了这个状态机。下图显示了状态机执行图。


                失败的状态机执行图。在这次执行中,名为 Do square number 的 Parallel 状态分支失败,导致 Parallel 状态失败。

如下图所示,在 Parallel 状态下名为 Do square numberLambda 调用 步骤返回了一个错误。这导致了 Parallel 状态失败。正在执行或未启动的分支将停止,状态机执行失败。

从控制台redrive执行
  1. 打开 Step Functions 控制台,然后选择执行失败的现有状态机。

  2. 在状态机详细信息页面的执行下,选择一个失败的执行实例。

  3. 选择Redrive

  4. Redrive对话框中,选择Redrive执行

    提示

    如果您在执行失败的执行详细信息 页面,请执行以下操作之一来redrive执行:

    • 选择恢复,然后从故障中Redrive

    • 选择操作,然后选择Redrive

    请注意,redrive将使用相同的状态机定义和 ARN。它从原始执行失败的步骤开始继续执行。在这个例子中,这里的步骤是 Parallel 状态下的 Do square number 步骤和 Wait 3 sec 分支。在 Parallel 状态下重新开始执行这些未成功的步骤后,redrive将继续执行到 Done 步骤。

  5. 选择该执行,打开执行详细信息 页面。

    在此页面上,您可以查看redriven执行的结果。例如,在执行摘要部分中,您可以看到Redrive计数,它表示执行redriven的次数。在事件部分,可以看到与redrive相关的执行事件附加到原始执行尝试的事件中。有关示例,请参阅 ExecutionRedriven 事件。

使用 API Redriving执行

您可以使用 RedriveExecutionAPI 进行redrive符合条件的执行。此 API 会从失败、中止或超时的步骤中重新启动标准工作流的未成功执行。

在 Amazon Command Line Interface (Amazon CLI) 中,运行以下命令以使redrive状态机执行失败。切记用特定资源信息替换斜体 文本。

aws stepfunctions redrive-execution --execution-arn arn:aws:states:us-east-2:123456789012:execution:myStateMachine:foo

检查redriven执行

您可以在控制台中或使用 API 检查redriven执行情况:GetExecutionHistoryDescribeExecution

在控制台中检查redriven执行
  1. 打开 Step Functions 控制台,然后选择已redriven执行的现有状态机。

  2. 打开执行详细信息 页面。

    在此页面上,您可以查看redriven执行的结果。例如,在执行摘要部分中,您可以看到Redrive计数,它表示执行redriven的次数。在事件部分,可以看到与redrive相关的执行事件附加到原始执行尝试的事件中。有关示例,请参阅 ExecutionRedriven 事件。

使用 API 检查redriven执行

如果您已经redriven了状态机执行,则可以使用以下 API 之一来查看有关redriven执行的详细信息。切记用特定资源信息替换斜体 文本。

  • GetExecutionHistory — 以事件列表的形式返回指定执行的历史记录。此 API 还会返回有关执行redrive尝试的详细信息(如果有)。

    在中 Amazon CLI,运行以下命令。

    aws stepfunctions get-execution-history --execution-arn arn:aws:states:us-east-2:123456789012:execution:myStateMachine:foo
  • DescribeExecution — 提供有关状态机执行的信息。这可以是与执行关联的状态机、执行输入和输出、执行redrive详细信息(如果有)以及相关的执行元数据。

    在中 Amazon CLI,运行以下命令。

    aws stepfunctions describe-execution --execution-arn arn:aws:states:us-east-2:123456789012:execution:myStateMachine:foo

redriven执行的重试行为

如果您的redriven执行重新运行了已定义重试的 TaskParallel内联 Map状态,这些状态的重试尝试计数将重置为 0。这允许redrive上的最大尝试次数。对于redriven执行,您可以使用控制台跟踪这些状态的单个重试尝试。

在控制台中检查单个重试尝试
  1. Step Functions 控制台执行详细信息 页面上,选择redrive上已重试过的状态。

  2. 选择重试次数和redrives选项卡。

  3. 选择每次重试尝试旁边的 
                             arrow icon
                        ,查看其详细信息。如果重试尝试成功,则可以在下拉框中显示的 输出 中查看结果。

下图举例说明了在原始执行尝试和redrives执行尝试中对某个状态执行的重试次数。在此图像中,原始执行尝试和redrive执行尝试中进行了三次重试。第四次redrive尝试执行成功并返回输出 16。


                redriven Task 状态的重试次数和redrives。此选项卡显示了在原始执行中进行的三次重试尝试以及该执行的redrives。第四次redrive尝试执行成功并返回输出 16。