修复和恢复工作流程运行 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

修复和恢复工作流程运行

如果工作流中的一个或多个节点(作业或爬虫程序)未成功完成,这意味着工作流仅部分运行。找到根本原因并进行更正后,可以选择一个或多个节点从中恢复工作流运行,然后恢复工作流运行。然后运行所选节点和从这些节点下游的所有节点。

恢复工作流程运行:如何使用

请考虑下图中的工作流程 W1。


                触发器以矩形显示,作业以圆形显示。左侧的触发器 T1 通过运行作业 J1 启动工作流。后续触发器和作业存在,但作业 J2 和 J3 失败,因此下游触发器和作业显示为未运行。

工作流程运行过程运行过程操作过程

  1. 触发器 T1 启动作业 J1。

  2. 成功完成 J1 触发触发 T2 和 T3,它们分别运行作业 J2 和 J3。

  3. 作业 J2 和 J3 失败。

  4. 触发器 T4 和 T5 取决于 J2 和 J3 的成功完成,所以它们不会触发,并且作业 J4 和 J5 不会运行。工作流 W1 仅部分运行。

现在假设导致 J2 和 J3 失败的问题得到纠正。将选择 J2 和 J3 作为从中恢复工作流运行的起点。


                作业 J2 和 J3 被标记为要恢复的节点。下游触发器和作业显示为成功运行。

工作流程运行过程运行过程恢复如下所示:

  1. 作业 J2 和 J3 成功运行。

  2. 触发 T4 和 T5 火灾。

  3. 作业 J4 和 J5 成功运行。

恢复的工作流运行将作为具有新运行 ID 的单独工作流运行进行跟踪。查看工作流历史记录时,可以查看任何工作流运行的上一次运行 ID。在以下屏幕截图中的示例中,工作流程运行 IDwr_c7a22...(第二行)有一个未完成的节点。用户修复了问题并恢复了工作流运行,从而导致运行 IDwr_a07e55...(第一行)。


                工作流的 “历史记录” 选项卡下的表包含两行,每个工作流运行一行。第一行同时具有运行 ID 和上一个运行 ID。第二行只有一个运行 ID。第一行中的上一个运行 ID 与第二行中的运行 ID 相同。
注意

在本讨论的其余部分中,术语 “恢复工作流运行” 是指恢复上一个工作流运行时创建的工作流运行。“原始工作流运行” 是指只部分运行且需要恢复的工作流运行。

恢复工作流程运行图

在恢复的工作流运行中,尽管只运行一部分节点,但运行图是一个完整的图形。也就是说,在恢复的工作流中未运行的节点将从原始工作流运行的运行图中复制。在原始工作流运行中运行的复制作业和 Crawler 节点包括运行详细信息。

再次考虑上一图中的工作流 W1。从 J2 和 J3 开始恢复工作流运行时,恢复工作流运行的运行图显示所有作业,J1 到 J5,以及所有触发器 T1 到 T5。J1 的运行详细信息将从原始工作流运行中复制。

工作流程运行快照

当工作流程运行启动时,AWS Glue 会在该时间点拍摄工作流设计图的快照。该快照用于工作流程运行的持续时间。如果在运行开始后对任何触发器进行更改,则这些更改不会影响当前工作流运行。快照可确保工作流程运行以一致的方式进行。

快照只使触发器不可变。在工作流运行期间对下游作业和爬网程序所做的更改将对当前运行生效。

恢复工作流程运行

按照以下步骤恢复工作流运行。您可以使用 AWS Glue 控制台、API 或 AWS Command Line Interface (AWS CLI) 恢复工作流程运行。

恢复工作流程运行(控制台)

  1. 打开 AWS Glue 控制台,请访问https://console.aws.amazon.com/glue/

    以具有查看工作流程和恢复工作流程运行权限的用户身份登录。

    注意

    要恢复工作流程运行,您需要glue:ResumeWorkflowRunAWS Identity and Access Management (IAM) 权限。

  2. 在导航窗格中,选择工作流程

  3. 选择工作流程,然后选择历史记录选项卡。

  4. 选择仅部分运行的工作流程运行,然后选择查看运行详细信息

  5. 在运行图中,选择要重新启动并且要从中恢复工作流运行的第一个(或唯一)节点。

  6. 在图形右侧的详细信息窗格中,选择Resume”复选框。

    
                        运行图显示三个节点,包括一个失败的作业节点。右侧的作业详细信息窗格包括 “继续” 复选框。

    节点会改变颜色,并在右上角显示一个小简历图标。

    
                        文本中介绍了对运行图的更改。“恢复” 复选框处于选中状态。
  7. 完成前面 2 个步骤,以使任何其他节点重新启动。

  8. 选择恢复运行

恢复工作流程运行 (AWS CLI)

  1. 确保您具有glue:ResumeWorkflowRunIAM 权限。

  2. 检索要重新启动的节点的节点 ID。

    1. 运行get-workflow-run命令进行原始工作流运行。提供工作流名称和运行 ID,然后添加--include-graph选项,如以下示例所示。获取运行 ID 从历史记录选项卡,或通过运行get-workflow命令。

      aws glue get-workflow-run --name cloudtrailtest1 --run-id wr_a07e55f2087afdd415a404403f644a4265278f68b13ba3da08c71924ebe3c3a8 --include-graph

      该命令将图形的节点和边以大型 JSON 对象的形式返回。

    2. 通过TypeName属性。

      以下是输出中的节点对象示例。

      {
          "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"
                  }
              ]
          }
      }
    3. 获取节点 ID 从UniqueId属性。

  3. 运行 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。请务必检查运行图以发现任何未成功完成的节点。

  • 您可以从原始工作流运行尝试运行的任何作业或 Crawler 节点恢复工作流运行。您无法从触发器节点恢复工作流程运行。

  • 重新启动节点不会重置其状态。部分处理的任何数据都不会回退。

  • 您可以多次恢复同一工作流运行。如果恢复的工作流运行仅部分运行,则可以解决问题并恢复恢复运行。

  • 如果选择两个要重新启动的节点,并且它们彼此依赖,则上游节点将在下游节点之前运行。事实上,选择下游节点是多余的,因为它将根据工作流的正常流程运行。