AWS:从Step函数将作业参数值传递给Glue作业

时间:2020-05-01 15:16:57

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

我创建了3个Glue作业,它们的作业参数键/值之一如下:runid id

如果我使用这样的AWS CLI执行Glue作业,则工作正常: aws胶水start-job-run --jobname $ job --arguments ='-runid =“ Runid_10”'

这3个Glue作业位于一步功能和状态机内部,定义为:

{
  "Comment":"Sample Step Function",
  "StartAt":"First Glue Job",
  "States": {
      "First Glue Job":{
         "Type": "Task",
         "Resource": "arn:aws:states:::glue:startJobRun.sync",
         "Parameters": {
            "JobName": "GlueJob-Firstjob"
      },
      "Next": "Second Glue Job"
    },
    "Second Glue Job":{
         "Type": "Task",
         "Resource": "arn:aws:states:::glue:startJobRun.sync",
         "Parameters": {
            "JobName": "GlueJob-Secondjob"
      },
      "Next": "Third Glue Job"
    },
    "Third Glue Job":{
         "Type": "Task",
         "Resource": "arn:aws:states:::glue:startJobRun.sync",
         "Parameters": {
            "JobName": "GlueJob-Thirdjob"
      },
      "End": true
    }
  }
}

如果我尝试使用Input参数执行此状态机,则此输入参数值不会传递给Gluejob。 我是否需要修改状态机作业定义以将输入参数值传递给作为状态机运行的一部分传递的胶水作业。请指导我如何做。

aws stepfunctions开始执行--state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld --input“ {runid”:“ Runid_10”}

状态机执行成功,但Runid值未传递给Gluejob参数。

请让我知道如何传递具有内部状态机定义的胶水作业参数值。


我正在使用像这样的Arguments参数:

{
  "Comment":"Sample Step Function",
  "StartAt":"First Glue Job",
  "States": {
      "First Glue Job":{
         "Type": "Task",
         "Resource": "arn:aws:states:::glue:startJobRun.sync",
         "Parameters": {
            "JobName": "GlueJob-Firstjob",
            "Arguments": {
                  "--runid":"$.runid"
                }
      },
      "ResultPath" : "$.runid",
      "Next": "Second Glue Job"
    },
    "Second Glue Job":{
         "Type": "Task",
         "Resource": "arn:aws:states:::glue:startJobRun.sync",
         "Parameters": {
            "JobName": "GlueJob-Secondjob",
            "Arguments": {
                  "--runid":"$.runid"
                }
      },
      "ResultPath" : "$.runid",
      "Next": "Third Glue Job"
    },
    "Third Glue Job":{
         "Type": "Task",
         "Resource": "arn:aws:states:::glue:startJobRun.sync",
         "Parameters": {
            "JobName": "GlueJob-Thirdjob",
            "Arguments": {
                  "--runid":"$.runid"
                }
      },
      "ResultPath" : "$.runid",
      "End": true
    }
  }
}

在执行“开始执行”状态机期间,在输入可选窗口中传递输入JSON {“ --runid”:“ runid_10”}。

请注意:runid_n,其中n是整数,将改变。

我将runid_10值附加到Glue作业的输出文件中,并且输出文件就像GlueJob-Firstjob_output_runid_10.csv

2 个答案:

答案 0 :(得分:2)

您需要将其添加到const arr1 = null; const arr2 = []; // Satisfies first condition: if (!arr1 || arr1.length < 1) console.log('No values in arr1.'); // Satisfies second condition: if (!arr2 || arr2.length < 1) console.log('No values in arr2.'); // Breaks: if (arr1.length < 1) console.log('No values in arr1.');属性内的Arguments内,这样就可以了:

Parameters

您可以参考。受支持的参数部分:here

更新: 您需要在任务定义中添加ResultPath,例如:

"Parameters" : {
           "JobName": "GlueJob-Firstjob",
           "Arguments": {
                  "--run_id":"$.runid"
                }

}

答案 1 :(得分:0)

输入值'runid'作为事件传递给您的Step Function内部的Lambda函数。要将其从一个Lambda函数传递给另一个函数,您只需返回该事件即可从头到尾传递数据。该事件包含您的“ runid”参数。

看看here