本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Redriving执行
您可以使用redrive重启过去 14 天内未成功完成的标准工作流执行。其中包括执行失败、中止或超时的执行。
redrive执行时,将继续执行未成功步骤的失败执行,并使用相同的输入。 Step Functions 会保留成功步骤的结果和执行历史记录,并且在redrive执行时不会重新运行这些步骤。例如,假设您的工作流包含两个状态:一个Pass 状态,后跟一个 任务状态 状态。如果您的工作流执行在 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 状态。 redrive重新运行 Task 状态的执行时,该状态的 |
Choice | 重新评估 Choice 状态规则。 |
Wait |
如果状态指定的 |
Succeed |
进入 Succeed 状态的状态机执行不会redrive。 |
Fail |
重新进入 Fail 状态并再次失败。 |
Parallel |
仅重新安排和redrives失败或中止的分支。 如果状态由于 |
内联 Map 状态 |
仅重新安排和redrives失败或中止的迭代。 如果状态由于 |
分布式 Map 状态 |
redrives Map Run 中未成功执行的子工作流。有关更多信息,请参阅Redriving Map Run。 如果状态因 |
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符合条件的执行。
例如,假设以下图像代表状态机的工作流图。
想象一下,您运行了这个状态机。下图显示了状态机执行图。
如下图所示,在 Parallel 状态下名为 Do square number 的 Lambda 调用 步骤返回了一个错误。这导致了 Parallel 状态失败。正在执行或未启动的分支将停止,状态机执行失败。
从控制台redrive执行
-
打开 Step Functions 控制台
,然后选择执行失败的现有状态机。 -
在状态机详细信息页面的执行下,选择一个失败的执行实例。
-
选择Redrive。
-
在Redrive对话框中,选择Redrive执行。
提示
如果您在执行失败的执行详细信息 页面,请执行以下操作之一来redrive执行:
-
选择恢复,然后从故障中Redrive。
-
选择操作,然后选择Redrive。
请注意,redrive将使用相同的状态机定义和 ARN。它从原始执行失败的步骤开始继续执行。在这个例子中,这里的步骤是 Parallel 状态下的 Do square number 步骤和 Wait 3 sec 分支。在 Parallel 状态下重新开始执行这些未成功的步骤后,redrive将继续执行到 Done 步骤。
-
-
选择该执行,打开执行详细信息 页面。
在此页面上,您可以查看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执行情况:GetExecutionHistory和DescribeExecution。
在控制台中检查redriven执行
-
打开 Step Functions 控制台
,然后选择已redriven执行的现有状态机。 -
打开执行详细信息 页面。
在此页面上,您可以查看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执行重新运行了已定义重试的 任务状态、Parallel 或内联 Map状态,这些状态的重试尝试计数将重置为 0。这允许redrive上的最大尝试次数。对于redriven执行,您可以使用控制台跟踪这些状态的单个重试尝试。
在控制台中检查单个重试尝试
-
在 Step Functions 控制台
的执行详细信息 页面上,选择redrive上已重试过的状态。 -
选择重试次数和redrives选项卡。
-
选择每次重试尝试旁边的 ,查看其详细信息。如果重试尝试成功,则可以在下拉框中显示的 输出 中查看结果。
下图举例说明了在原始执行尝试和redrives执行尝试中对某个状态执行的重试次数。在此图像中,原始执行尝试和redrive执行尝试中进行了三次重试。第四次redrive尝试执行成功并返回输出 16。