【问题标题】:aws glue job dependency in step function步骤函数中的 aws 胶水作业依赖性
【发布时间】:2019-01-16 01:55:56
【问题描述】:

我创建了 2 个粘合作业(gluejob1、gluejob2)。

我想创建一个依赖项,因为gluejob2 应该只在gluejob1 完成后运行。

为了协调这一点,我创建了一个具有以下定义的阶跃函数:

 {
  "gluejob1": {
    "Type": "Task",
    "Resource": "gluejob1.Arn",
    "Comment": "Glue job1.",
    "Next": "gluejob2"
  },

  "gluejob2": {
    "Type": "Task",
    "Resource": "gluejob2.Arn",
    "Comment": "TGlue job2.",
    "Next": "Gluejob2 Finished Loading"
  },
  "Gluejob2 Finished Loading": {
    "Type": "Pass",
    "Result": "",
    "End": true
  }
}

当我执行这个 step 函数时,状态函数 在触发 Gluejob1 时将其称为成功,然后继续触发 gluejob2。

我想知道是否有可能仅在gluejob1 完成后才运行gluejob2。

【问题讨论】:

    标签: amazon-web-services aws-glue aws-step-functions


    【解决方案1】:

    您可以invoke Glue job from StepFunction synchronously 让它等待作业完成:

    {
      "StartAt": "gluejob1",
      "States": {
        "gluejob1": {
          "Type": "Task",
          "Resource": "arn:aws:states:::glue:startJobRun.sync",
          "Parameters": {
            "JobName.$": "ETLJobName1"
          },
          "Next": "gluejob2"
        },
        "gluejob2": {
          "Type": "Task",
          "Resource": "arn:aws:states:::glue:startJobRun.sync",
          "Parameters": {
            "JobName.$": "ETLJobName2"
          },
          "Next": "Gluejob2 Finished Loading"
        },
        "Gluejob2 Finished Loading": {
          "Type": "Pass",
          "Result": "",
          "End": true
        }
    }
    

    【讨论】:

    • 即使在胶水作业成功后,我的胶水作业步骤仍显示为进行中,因此不会进入下一步。知道为什么吗?是否与 Cloudwatch 事件权限有关?
    • 我注意到 StepFunction 可能需要一些时间来确定作业已完成(似乎内部作业状态轮询器每 X 分钟运行一次)
    • 嗯,它从来没有暗示胶水工作成功的步骤功能。还注意到 Glue 作业的 Cloudwatch 事件没有被触发,尝试使用规则捕获它们,但不能。已将 CloudWatchFullAccess 授予运行粘合作业的服务角色。我错过了什么?
    • @Saud,您可能已经解决了,但想知道 step 函数角色是否有权调用 Glue 作业。另外,我注意到,有时服务无法与 Step 函数通信(我的 lambda 函数经常发生)。所以,我添加了重试逻辑。这解决了服务无法与 Step 函数通信或由于某种原因失败的问题。
    • 您可能需要确保 step 函数的角色对 Glue 作业具有所有必要的 IAM 权限,即glue:StartJobRun、glue:GetJobRun、glue:GetJobRuns 和glue:BatchStopJobRun docs.aws.amazon.com/step-functions/latest/dg/glue-iam.html
    【解决方案2】:

    为什么不使用胶水中的触发器来处理依赖关系?

    【讨论】:

    • 将流逻辑保留在 Glue 作业之外将允许您在不触发其他组件的情况下重新使用该作业。这是一种很好的做法,因为您可以为多个数据源重复使用作业(您可以将参数传递给胶水作业)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多