RedrivingStep Functions 中的状态机执行情况 - AWS Step Functions

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

RedrivingStep Functions 中的状态机执行情况

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

redrive执行时,将继续执行未成功步骤的失败执行,并使用相同的输入。 Step Functions 会保留成功步骤的结果和执行历史记录,并且在redrive执行时不会重新运行这些步骤。例如,假设您的工作流包含两个状态:一个传递工作流程状态 状态,后跟一个 任务工作流状态 状态。如果您的工作流执行在 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 状态将退出且不会在redrive上面执行。

任务工作流状态

重新安排和启动 Task 状态。

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

选择工作流程状态 重新评估 Choice 状态规则。
等待工作流程状态

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

成功的工作流程状态

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

失败工作流状态

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

并行工作流状态

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

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

内联 Map 状态

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

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

分布式 Map 状态

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

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

IAM处决redrive许可

Step Functions 需要适当的权限才能redrive执行。以下IAM策略示例授予状态机执行所需的最低redriving权限。记得更换 italicized 包含您的资源特定信息的文本。

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

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

在控制台中Redriving执行

您可以通过Step Functions控制台进行redrive符合条件的执行。

例如,假设你运行了一台状态机,而一个并行状态却无法运行。

下图显示了在并行状态下名为 Do square n umber 的 In Lambdav oke 步骤已返回失败。这也导致并行状态失败。正在执行或未启动的分支将停止,状态机执行失败。

状态机执行失败的示例图。
从控制台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 事件。

Redriving使用处决 API

您可以使用redrive符合条件的处决RedriveExecutionAPI。这将API重新启动失败、中止或超时的步骤中不成功执行的标准工作流程。

在 AWS Command Line Interface (AWS CLI) 中,运行以下命令以使redrive状态机执行失败。记得更换 italicized 包含您的资源特定信息的文本。

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

检查redriven执行

您可以在控制台中检查redriven执行情况,也可以使用APIs:GetExecutionHistoryDescribeExecution

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

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

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

使用检查redriven执行情况 APIs

如果您执行redriven了状态机,则可以使用以下选项之一APIs来查看有关redriven执行的详细信息。记得更换 italicized 包含您的资源特定信息的文本。

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

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

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

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

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

redriven执行的重试行为

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

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

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

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

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

说明性屏幕截图显示了三次失败的重试和第四次重试成功。