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

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

Redriving 在 Step Functions 执行中运行地图

您可以通过以下方式在 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 运行,但会再次失败。有关可能需要的权限信息,请参阅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 在最初的执行尝试中失败:

即使在父工作流停止或超时后,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,例如GetExecutionHistoryDescribeExecution。有关更多信息,请参阅 正在检查 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 父工作流程。

由于 Map Run 失败导致的状态机执行失败的图表。
目的 redrive a 从控制台运行地图
  1. 打开 Step Functions 控制台,然后选择一个包含执行失败的分布式 Map 的现有状态机。

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

  3. 选择 Redrive.

  4. Redrive对话框中,选择 Redrive 处决

    提示

    您也可以 redrive 来自 “执行详细信息” 或 “地图运行详细信息” 页面的 Map Run。

    如果您在 “执行详情” 页面上,请执行以下任一操作 redrive 处决:

    • 选择 “恢复”,然后选择 Redrive 来自失败

    • 选择 “操作”,然后选择 Redrive.

    如果你在 Map Run Detail s 页面上,请选择恢复,然后选择 Redrive 来自失败

    请注意 redrive 使用相同的状态机定义和ARN。它从原始执行失败的步骤开始继续执行。在此示例中,失败的步骤是名为 Map 的分布式 Map 步骤和其中的处理输入步骤。重新启动 Map Run 的子工作流程执行失败后,redrive 将继续执行 “完成” 步骤。

  5. 在 “执行详细信息” 页面中,选择 Map Run 以查看执行的详细信息 redriven Map Run。

    在此页面上,您可以查看结果 redriven 处决。例如,在该Map Run 执行摘要部分中,你可以看到 Redrive count,它表示 Map Run 的次数 redriven。 在 “活动” 部分,你可以看到 redrive 相关的执行事件附加到原始执行尝试的事件之后。有关示例,请参阅 MapRunRedriven 事件。

在你完成之后 redriven 一个 Map Run,你可以检查它的 redrive 控制台中的详细信息或使用GetExecutionHistoryDescribeExecutionAPI操作。有关检查的更多信息 redriven 执行,请参阅正在检查 redriven 处决

Redriving 使用地图运行 API

你可以 redrive 使用符合条件的 Map Run RedriveExecutionAPI在父工作流程上。这将API重新启动 Map Run 中失败的子工作流程执行。

在 Amazon Command Line Interface (Amazon 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 中标准工作流程执行的详细信息,您可以使用GetExecutionHistoryDescribeExecutionAPI操作。有关检查的更多信息 redriven 执行,请参阅正在检查 redriven 处决

你可以检查 redrive 如果您已启用父工作流程的登录功能,则在 Step Functions 控制台上的 Map Run 中执行 Express 工作流程的详细信息。有关更多信息,请参阅 在 Step Functions 中使用 CloudWatch 日志记录执行历史记录