本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 状态的执行时,该状态的 |
选择工作流程状态 | 重新评估 Choice 状态规则。 |
等待工作流程状态 |
如果状态指定的 |
成功的工作流程状态 |
进入 Succeed 状态的状态机执行不会redrive。 |
失败工作流状态 |
重新进入 Fail 状态并再次失败。 |
并行工作流状态 |
仅重新安排和redrives失败或中止的分支。 如果状态由于 |
内联 Map 状态 |
仅重新安排和redrives失败或中止的迭代。 如果状态由于 |
分布式 Map 状态 |
redrives Map Run 中未成功执行的子工作流。有关更多信息,请参阅 Redriving在 Step Functions 执行中运行地图。 如果状态因 |
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执行
-
打开 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
事件。
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:GetExecutionHistory和DescribeExecution。
在控制台中检查redriven执行
-
打开 Step Functions 控制台
,然后选择已redriven执行的现有状态机。 -
打开执行详细信息 页面。
在此页面上,您可以查看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执行,您可以使用控制台跟踪这些状态的单个重试尝试。
在控制台中检查单个重试尝试
-
在 Step Functions 控制台
的执行详细信息 页面上,选择redrive上已重试过的状态。 -
选择重试次数和redrives选项卡。
-
选择每次重试旁边的箭头图标以查看其详细信息。如果重试尝试成功,则可以在下拉框中显示的 输出 中查看结果。
下图举例说明了在原始执行尝试和redrives执行尝试中对某个状态执行的重试次数。在此图像中,原始执行尝试和redrive执行尝试中进行了三次重试。第四次redrive尝试执行成功并返回输出 16。