本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
修复和恢复工作流运行
如果工作流中的一个或多个节点(任务或爬网程序)未成功完成,这意味着工作流仅部分运行。找到根本原因并进行更正后,您可以选择要从中恢复工作流运行的一个或多个节点,然后恢复工作流运行。然后,所选节点以及这些节点下游的所有节点就会运行。
恢复工作流运行:工作原理
请考虑下图中的工作流 W1。
工作流运行进程如下所示:
-
触发器 T1 启动任务 J1。
-
J1 成功完成,从而触发触发器 T2 和 T3,分别运行任务 J2 和 J3。
-
任务 J2 和 J3 失败。
-
触发器 T4 和 T5 取决于 J2 和 J3 的成功完成结果,所以它们不会触发,任务 J4 和 J5 也不会运行。工作流 W1 仅部分运行。
现在,假设导致 J2 和 J3 失败的问题得到更正。J2 和 J3 被选为工作流运行的恢复起点。
工作流运行恢复如下所示:
-
任务 J2 和 J3 成功运行。
-
触发触发器 T4 和 T5。
-
任务 J4 和 J5 成功运行。
恢复的工作流运行作为具有新运行 ID 的单独工作流运行被跟踪。查看工作流历史记录时,您可以查看任意工作流运行的上次运行 ID。在以下屏幕截图中的示例中,具有运行 ID wr_c7a22...
(第二行)的工作流运行有未完成的节点。用户修复问题并恢复工作流运行,从而导致运行 ID wr_a07e55...
(第一行)。
注意
在本次讨论的其余部分,术语“恢复的工作流运行”是指恢复上次工作流运行时创建的工作流运行。“原始工作流运行”是指仅部分运行且需要恢复的工作流运行。
“恢复的工作流运行”图
在恢复的工作流运行中,尽管仅运行部分节点,但运行图是完整图。也就是说,恢复的工作流中未运行的节点将从原始工作流运行的运行图中复制。原始工作流运行中运行的复制任务和爬网程序节点包括运行详细信息。
再次考虑上图中的工作流 W1。从 J2 和 J3 开始恢复工作流运行时,恢复的工作流运行的运行图会显示所有任务(J1 到 J5)以及所有触发器(T1 到 T5)。从原始工作流运行中复制 J1 的运行详细信息。
工作流运行快照
启动工作流运行时,AWS Glue 会在该时间点拍摄工作流设计图的快照。该快照在工作流运行期间使用。如果您在运行启动后对任何触发器进行更改,这些更改不会影响当前工作流运行。快照确保工作流运行以一致方式继续执行。
快照确保仅触发器不可改变。您在工作流运行期间对下游任务和爬网程序所做的更改对当前运行有效。
恢复工作流运行
请按照以下步骤操作,恢复工作流运行。您可以使用 AWS Glue 控制台、API、或 AWS Command Line Interface(AWS CLI)恢复工作流。
恢复工作流运行(控制台)
-
通过 https://console.aws.amazon.com/glue/
打开 AWS Glue 控制台。 以有权查看工作流和恢复工作流运行的用户身份登录。
注意
要恢复工作流运行,您需要
glue:ResumeWorkflowRun
AWS Identity and Access Management(IAM)权限。 -
在导航窗格中,选择 Workflows (工作流)。
-
选择工作流,然后选择 History (历史记录) 选项卡。
-
选择仅部分运行的工作流运行,然后选择 View run details (查看运行详细信息)。
-
在运行图中,选择您要重新启动并且从中恢复工作流运行的第一个(或唯一)节点。
-
在图形右侧的详细信息窗格中,选中 Resume (恢复) 复选框。
节点会更改颜色,并在右上角显示一个小恢复图标。
-
完成前面 2 个步骤,以便其他节点重新启动。
-
选择 Resume run (恢复运行)。
恢复工作流运行(AWS CLI)
-
确保您拥有
glue:ResumeWorkflowRun
IAM 权限。 -
检索要重新启动的节点的节点 ID。
-
运行原始工作流运行的
get-workflow-run
命令。提供工作流名称和运行 ID,然后添加--include-graph
选项,如以下示例所示。从控制台上的 History (历史记录) 选项卡中获取运行 ID,或者运行get-workflow
命令以获取运行 ID。aws glue get-workflow-run --name cloudtrailtest1 --run-id wr_a07e55f2087afdd415a404403f644a4265278f68b13ba3da08c71924ebe3c3a8 --include-graph
命令以大型 JSON 对象的形式返回图形的节点和边缘。
-
按照节点对象的
Type
和Name
属性,找到感兴趣的节点。以下是输出中的示例节点对象。
{ "Type": "JOB", "Name": "test1_post_failure_4592978", "UniqueId": "wnode_d1b2563c503078b153142ee76ce545fe5ceef66e053628a786ddd74a05da86fd", "JobDetails": { "JobRuns": [ { "Id": "jr_690b9f7fc5cb399204bc542c6c956f39934496a5d665a42de891e5b01f59e613", "Attempt": 0, "TriggerName": "test1_aggregate_failure_649b2432", "JobName": "test1_post_failure_4592978", "StartedOn": 1595358275.375, "LastModifiedOn": 1595358298.785, "CompletedOn": 1595358298.785, "JobRunState": "FAILED", "PredecessorRuns": [], "AllocatedCapacity": 0, "ExecutionTime": 16, "Timeout": 2880, "MaxCapacity": 0.0625, "LogGroupName": "/aws-glue/python-jobs" } ] } }
-
从节点对象的
UniqueId
属性中获取节点 ID。
-
-
运行
resume-workflow-run
命令。提供工作流名称、运行 ID 和节点 ID 列表(使用空格分隔),如以下示例所示。aws glue resume-workflow-run --name cloudtrailtest1 --run-id wr_a07e55f2087afdd415a404403f644a4265278f68b13ba3da08c71924ebe3c3a8 --node-ids wnode_ca1f63e918fb855e063aed2f42ec5762ccf71b80082ae2eb5daeb8052442f2f3 wnode_d1b2563c503078b153142ee76ce545fe5ceef66e053628a786ddd74a05da86fd
命令会输出已恢复(新)工作流运行的运行 ID 以及将启动的节点列表。
{ "RunId": "wr_2ada0d3209a262fc1156e4291134b3bd643491bcfb0ceead30bd3e4efac24de9", "NodeIds": [ "wnode_ca1f63e918fb855e063aed2f42ec5762ccf71b80082ae2eb5daeb8052442f2f3" ] }
请注意,尽管示例
resume-workflow-run
命令列出了两个要重新启动的节点,但示例输出指明仅重新启动了一个节点。这是因为,一个节点位于另一个节点的下游,下游节点无论如何会按工作流的正常流程重新启动。
工作流运行恢复的注释和限制
恢复工作流运行时,请牢记以下注释和限制。
-
仅当工作流处于
COMPLETED
状态时,您可恢复工作流。注意
即使工作流运行中有一个或多个节点未完成,工作流运行状态也会显示为
COMPLETED
。请务必检查运行图,发现任何未成功完成的节点。 -
您可以从原始工作流运行尝试运行的任务或爬网程序节点恢复工作流运行。您不能从触发器节点恢复工作流运行。
-
重新启动节点不会重置其状态。部分处理的数据都不会回滚。
-
您可以多次恢复同一工作流运行。如果恢复的工作流运行仅部分运行,您可以解决该问题并恢复已恢复的运行。
-
如果您选择两个要重新启动的节点,并且它们彼此依赖,则上游节点将在下游节点之前运行。事实上,无需选择下游节点,因为它将按照工作流的正常流程运行。