修复和恢复工作流运行 - 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。在以下屏幕截图的示例中,工作流程以运行ID运行 wr_c7a22... (第二行)有一个节点未完成。用户修复了问题并恢复了工作流运行,导致运行ID wr_a07e55... (第一行)。


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

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

恢复的工作流运行图

在已恢复的工作流程运行中,尽管仅运行节点的子集,但运行图是一个完整的图表。也就是说,在恢复的工作流程中未运行的节点将从原始工作流程运行的运行图中复制。在原始工作流运行中运行的复制作业和爬网节点包括运行详细信息。

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

工作流运行快照

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

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

恢复工作流运行

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

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

  1. 通过以下网址打开 AWS Glue 控制台:https://console.amazonaws.cn/glue/

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

    注意

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

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

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

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

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

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

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

    节点会更改颜色,并在右上方显示一个小的恢复图标。

    
                        对运行图的更改在文本中进行了描述。已选中恢复复选框。
  7. 要重新启动任何附加节点,请完成前两个步骤。

  8. 选择 恢复运行.

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

  1. 确保您拥有 glue:ResumeWorkflowRun IAM 权限。

  2. 检索节点 IDs 用于要重新启动的节点。

    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和节点列表 IDs 用空格分隔,如以下示例所示。

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

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

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

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

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