本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
您可以通过以下方式在 Map Run 中重新启动失败的子工作流程执行 redriving您的家长工作流程。A redriven 父工作流程 redrives 所有失败状态,包括分布式地图。如果父工作流完成执行时没有与状态的 <stateType>Exited
事件相对应的 <stateType>Entered
事件,则父工作流会重新驱动未成功的状态。例如,如果事件历史记录中不包含MapStateExited
事件的事件,则可以 MapStateEntered
redrive 的父工作流程 redrive Map Run 中所有未成功的子工作流程执行。
当状态机没有访问 ItemReader (地图)、ResultWriter (地图) 或两者所需的权限时,Map Run 要么未启动,要么在原始执行尝试中失败。如果 Map Run 不是在父工作流程的原始执行尝试中启动的,redriving 父工作流程首次启动 Map Run。要解决这个问题,请向你的状态机角色添加所需的权限,然后 redrive 父工作流程。如果您 redrive 在不添加所需权限的情况下,父工作流程会尝试启动新的 Map Run 运行,但会再次失败。有关可能需要的权限信息,请参阅使用分布式 Map 状态的 IAM 策略。
主题
Redrive Map Run 中子工作流程的资格
你可以 redrive 如果满足以下条件,则在 Map Run 中执行的子工作流程失败:
-
在 2023 年 11 月 15 日或之后启动父工作流执行。您在此日期之前开始的处决不符合资格 redrive.
-
你还没有超过 1000 的硬限制 redrives 给定的 Map Run。如果已超过此限制,则会收到
States.Runtime
错误消息。 -
父工作流程是 redrivable。 如果父工作流程不是 redrivable,你不能 redrive Map Run 中的子工作流程执行。有关 redrive 工作流程的资格,请参阅Redrive 处决失败的资格。
-
Map Run 中标准类型的子工作流执行未超过 2.5 万个执行事件历史记录上限。超过事件历史记录上限的子工作流执行将计入容许的故障阈值并被视为失败。有关更多信息 redrive 处决资格,请参阅Redrive 处决失败的资格。
新的 Map Run 已启动,而现有的 Map Run 尚未启动 redriven 在以下情况下,即使 Map Run 在最初的执行尝试中失败:
-
由于
States.DataLimitExceeded
错误,Map Run 失败。 -
由于 JSON 数据插值错误 (
States.Runtime
),Map Run 失败。例如,您在 使用过滤状态输出 OutputPath 中选择了一个不存在的 JSON 节点。
即使在父工作流停止或超时后,Map Run 仍可以继续运行。在这些场景中,redrive 不会立即发生:
-
Map Run 可能仍在取消正在进行的标准类型子工作流执行,或者等待快速类型子工作流执行完成执行。
-
如果您将 Map Run 配置为导出结果,它可能仍在向 ResultWriter (地图) 中写入结果。
在这些情况下,正在运行的 Map Run 会先完成其操作,然后再尝试 redrive.
子工作流执行 redrive 行为
这些区域有:redriven Map Run 中的子工作流程执行表现出下表所述的行为。
快速子工作流 | 标准子工作流 |
---|---|
所有在原始执行尝试中失败或超时的子工作流程执行均使用 StartExecutionAPI 操作启动。首先运行 ItemProcessor 中的第一个状态。 | 在最初的执行尝试中失败、超时或取消的所有子工作流程执行都是 redriven 使用 RedriveExecutionAPI 操作。这些子工作流程是 redriven 从导致他们处决失败的最后一个状态开始。 ItemProcessor |
执行失败总是可能是 redriven。 这是因为 Express 子工作流程执行总是使用 StartExecution API 操作作为新执行启动。 |
标准子工作流程执行不可能总是失败 redriven。 如果处决不是 redrivable,不会再尝试了。执行的最后一个错误或输出是永久性的。当一次执行超过 25,000 个历史事件或其历史事件时,这是可能的 redrivable 14 天的期限已过期。 标准子工作流程执行可能不是 redrivable 如果父工作流程执行已在 14 天内关闭,但子工作流程执行在 14 天之前关闭。 |
Express 子工作流程执行使用与原始执行尝试相同的执行 ARN,但您无法明确识别其个人 redrives. | 标准子工作流执行使用与原始执行尝试相同的执行 ARN。你可以清楚地识别出个人 redrives 在控制台中使用 APIs,例如GetExecutionHistory和DescribeExecution。有关更多信息,请参阅 正在检查 redriven 处决。 |
如果你有 redriven a Map Run,并且已达到其并发限制,则该 Map Run 中的子工作流程执行会过渡到待处理状态。Map Run 的执行状态也会转换为 “待处理” redrive州。在指定的并发限制允许运行更多子工作流程执行之前,该执行将一直处于 “待处理” 状态 redrive州。
例如,工作流中分布式 Map 的并发数上限为 3000,而需要重新运行的子工作流数量为 6000。这会导致 3000 个子工作流并行运行,而其余 3000 个工作流程仍处于待重启状态。在第一批 3000 个子工作流完成执行后,剩余的 3000 个子工作流才会开始运行。
当 Map Run 完成执行或中止时,子工作流程执行次数将处于待处理状态 redrive状态重置为 0。
Map Run 中使用的输入场景 redrive
根据您在最初的执行尝试中向分布式地图提供输入的方式,redriven Map Run 将使用下表中所述的输入。
原始执行尝试中的输入 | 在 Map Run 上使用的输入 redrive |
---|---|
从上一状态传递的输入或执行输入。 | 这些区域有:redriven Map Run 使用相同的输入。 |
由于以下条件之一为 true,使用 ItemReader (地图) 传递的输入和 Map Run 未启动子工作流执行:
|
这些区域有:redriven Map Run 使用 Amazon S3 存储桶中的输入。 |
使用传递的输入 ItemReader。启动或尝试启动子工作流执行后,Map Run 失败。 | 这些区域有:redriven Map Run 使用的输入与最初执行尝试中提供的输入相同。 |
IAM 权限 redrive Map Run
Step Functions 需要适当的权限才能 redrive a Map Run。以下 IAM 策略示例授予您的状态机所需的最低权限 redriving a Map Run。请记住用您的资源特定信息替换italicized
文本。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:RedriveExecution" ], "Resource": "arn:aws:states:us-east-2:
123456789012
:execution:myStateMachine
/myMapRunLabel
:*" } ] }
Redriving 地图在控制台中运行
下图显示了包含分布式 Map 的状态机执行图。Map Run 失败,导致此执行失败。目的 redrive Map Run,你必须 redrive 父工作流程。

目的 redrive 从控制台运行地图
-
打开 Step Functions 控制台
,然后选择一个包含执行失败的分布式 Map 的现有状态机。 -
在状态机详细信息页面的执行下,选择此状态机的失败执行实例。
-
选择 Redrive.
-
在 Redrive对话框中,选择 Redrive 处决。
提示
您也可以 redrive 来自 “执行详细信息” 或 “地图运行详细信息” 页面的 Map Run。
如果您在 “执行详情” 页面上,请执行以下任一操作 redrive 处决:
-
选择 “恢复”,然后选择 Redrive 来自失败。
-
选择 “操作”,然后选择 Redrive.
如果你在 Map Run Detail s 页面上,请选择恢复,然后选择 Redrive 来自失败。
请注意 redrive 使用相同的状态机定义和 ARN。它从原始执行失败的步骤开始继续执行。在此示例中,失败的步骤是名为 Map 的分布式 Map 步骤和其中的处理输入步骤。重新启动 Map Run 的子工作流程执行失败后,redrive 将继续执行 “完成” 步骤。
-
-
在 “执行详细信息” 页面中,选择 Map Run 以查看执行的详细信息 redriven Map Run。
在此页面上,您可以查看结果 redriven 处决。例如,在该Map Run 执行摘要部分中,你可以看到 Redrive count,它表示 Map Run 的次数 redriven。 在 “活动” 部分,你可以看到 redrive 相关的执行事件附加到原始执行尝试的事件之后。有关示例,请参阅
MapRunRedriven
事件。
在你完成之后 redriven 一个 Map Run,你可以检查它的 redrive 控制台中的详细信息或使用GetExecutionHistory和 DescribeExecutionAPI 操作。有关检查的更多信息 redriven 执行,请参阅正在检查 redriven 处决。
Redriving 使用 API 运行地图
你可以 redrive 使用符合条件的 Map Run RedriveExecution父工作流程上的 API。此 API 可重启 Map Run 中未成功的子工作流执行。
在 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 一个 Map Run,你可以检查它的 redrive 控制台中的详细信息或使用 DescribeMapRunAPI 操作。要检查 redrive Map Run 中标准工作流程执行的详细信息,您可以使用GetExecutionHistory或 DescribeExecutionAPI 操作。有关检查的更多信息 redriven 执行,请参阅正在检查 redriven 处决。
你可以检查 redrive 如果您已启用父工作流程的登录功能,则在 Step Functions 控制台