Amazon web services AWS:将作业参数值从Step函数传递到粘合作业

Amazon web services AWS:将作业参数值从Step函数传递到粘合作业,amazon-web-services,aws-glue,aws-step-functions,Amazon Web Services,Aws Glue,Aws Step Functions,我创建了3个粘合作业,其中一个作业参数key/value如下:runid id 如果像这样使用AWS CLI执行粘合作业,则工作正常: aws glue start job run--jobname$job--arguments='--runid=“runid_10”' 这3个粘合作业位于一步函数内,状态机定义为: { "Comment":"Sample Step Function", "StartAt":"First Glue Job", "States": { "Fi

我创建了3个粘合作业,其中一个作业参数key/value如下:runid id

如果像这样使用AWS CLI执行粘合作业,则工作正常: aws glue start job run--jobname$job--arguments='--runid=“runid_10”'

这3个粘合作业位于一步函数内,状态机定义为:

{
  "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
    }
  }
}
如果我尝试使用输入参数执行此状态机,则此输入参数值不会传递给Gluejob。 我是否需要修改状态机作业定义,以将输入参数值传递给作为状态机运行一部分传递的粘合作业。请指导我怎么做

aws stepfunctions开始执行——状态机arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld——输入“{runid”:“runid_10”}

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

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


我使用的参数如下:

{
  "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\u n,其中n是整数,将发生变化


我将把runid_10值附加到Glue job中的输出文件,输出文件类似于GlueJob-Firstjob_output_runid_10.csv

输入值“runid”作为事件传递给Step函数内的Lambda函数。要将它从一个Lambda函数传递到另一个Lambda函数,只需返回将从开始到结束传递数据的事件。该事件包含您的“runid”参数


看一看。

您需要将它添加到
参数
属性中的
参数中,这样它就像:

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

}
您可以检查。支持的参数部分:

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

"First Glue Job":{
         "Type": "Task",
         "Resource": "arn:aws:states:::glue:startJobRun.sync",
         "Parameters": {
            "JobName": "GlueJob-Firstjob",
            "Arguments": {
                  "--runid":"$.runid"
                }
      },
       "ResultPath": "$.output"
}

您必须在作业的参数部分中传递--run_id参数。它不会自行消失的。这就像glue Job参数中的
“--run_id”:$.runid
,谢谢您的回复。尝试在“粘合作业名称”后的“参数”部分中添加此参数,但该参数无效。从我的角度来看似乎有些问题。嗨,我正在设置stepfunction来运行粘合作业,如果我在stepfunction之外运行此粘合作业,它将成功,但如果我启动statemachine,粘合作业将失败。我有个问题,你能看一下吗?我怀疑权限中可能有一些不正确的设置或其他内容:谢谢您的回复。我正在尝试编写lambda函数。lambda是一个基于事件驱动的函数,请向我说明如何将lambda传递到Glue作业参数。感谢您的帮助。我已将参数作为状态机的一部分在参数部分传递,它的值为“$.runid”它并没有考虑在状态机的启动执行过程中我作为输入传递了哪个。我在输入中这样传递:{RunID(RunID):“RunIDy10”},并期望它必须考虑值“RunIDy10”。您可以用您对这个更改所做的更改来更新ASL/STEPATION定义吗?我在原始问题的步骤函数中添加了参数,并通过aws控制台执行状态机。这里的意思是超过字符数。您必须在状态定义中添加ResultPath。否则,来自粘合作业的输出将覆盖所有内容。您的下一步将找不到
$。runid
工作正常,谢谢您的帮助。