Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python AWS Glue--从作业内访问工作流参数_Python_Amazon Web Services_Aws Glue - Fatal编程技术网

Python AWS Glue--从作业内访问工作流参数

Python AWS Glue--从作业内访问工作流参数,python,amazon-web-services,aws-glue,Python,Amazon Web Services,Aws Glue,如何从粘合作业中检索粘合工作流参数 我有一个类型为“pythonshell”的AWS胶水作业,它在胶水工作流中定期触发 作业代码将在大量不同的工作流中重用,因此我希望检索工作流参数,以消除冗余作业的需要 《AWS开发人员指南》提供了以下教程: 但是我没有成功地让示例代码在不触发错误的情况下执行。我怀疑这个示例可能只适用于scala/pyspark作业,而不适用于pythonshell作业 我在相关工作中尝试了以下代码 import sys import boto3 from awsglue.u

如何从粘合作业中检索粘合工作流参数

我有一个类型为“pythonshell”的AWS胶水作业,它在胶水工作流中定期触发

作业代码将在大量不同的工作流中重用,因此我希望检索工作流参数,以消除冗余作业的需要

《AWS开发人员指南》提供了以下教程:

但是我没有成功地让示例代码在不触发错误的情况下执行。我怀疑这个示例可能只适用于scala/pyspark作业,而不适用于pythonshell作业

我在相关工作中尝试了以下代码

import sys
import boto3
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ['JOB_NAME','WORKFLOW_NAME', 'WORKFLOW_RUN_ID'])
workflow_name = args['WORKFLOW_NAME']
workflow_run_id = args['WORKFLOW_RUN_ID']
workflow_params = glue_client.get_workflow_run_properties(Name=workflow_name,
                                    RunId=workflow_run_id)["RunProperties"]

print(workflow_name, workflow_run_id, workflow_params)
当我按需触发工作流时,我收到以下错误消息:

> Traceback (most recent call last):
> File "/tmp/runscript.py", line 115, in <module>
> runpy.run_path(temp_file_path, run_name='__main__')
> File "/usr/local/lib/python3.6/runpy.py", line 263, in run_path
> pkg_name=pkg_name, script_name=fname)
> File "/usr/local/lib/python3.6/runpy.py", line 96, in _run_module_code
> mod_name, mod_spec, pkg_name, script_name)
> File "/usr/local/lib/python3.6/runpy.py", line 85, in _run_code
> exec(code, run_globals)
> File "/tmp/glue-python-scripts-w4fbwl3n/map_etl_python_shell_test_env.py", line 10, in <module>
> File "/glue/lib/awsglue/utils.py", line 10, in getResolvedOptions
> parsed, extra = parser.parse_known_args(args)
> File "/usr/local/lib/python3.6/argparse.py", line 1766, in parse_known_args
> namespace, args = self._parse_known_args(args, namespace)
> File "/usr/local/lib/python3.6/argparse.py", line 2001, in _parse_known_args
', '.join(required_actions))
> File "/usr/local/lib/python3.6/argparse.py", line 2393, in error
> self.exit(2, _('%(prog)s: error: %(message)s\n') % args)
> File "/usr/local/lib/python3.6/argparse.py", line 2380, in exit
> _sys.exit(status)
> SystemExit: 2
> 
> During handling of the above exception, another exception occurred:
>
> Traceback (most recent call last):
> File "/tmp/runscript.py", line 134, in <module>
> raise e_type(e_value).with_tracsback(new_stack)
> AttributeError: 'SystemExit' object has no attribute 'with_tracsback'
>回溯(最近一次呼叫最后一次):
>文件“/tmp/runscript.py”,第115行,在
>runpy.run\u路径(临时文件路径,run\u名称=“”\uuuu主路径)
>文件“/usr/local/lib/python3.6/runpy.py”,第263行,在运行路径中
>pkg_name=pkg_name,script_name=fname)
>文件“/usr/local/lib/python3.6/runpy.py”,运行模块代码第96行
>模块名称、模块规格、组件名称、脚本名称)
>文件“/usr/local/lib/python3.6/runpy.py”,第85行,在运行代码中
>exec(代码、运行\全局)
>文件“/tmp/glue-python-scripts-w4fbwl3n/map_etl_python_shell_test_env.py”,第10行,在
>文件“/glue/lib/awsglue/utils.py”,第10行,在getResolvedOptions中
>已解析,extra=parser.parse_known_args(args)
>parse_known_args中的文件“/usr/local/lib/python3.6/argparse.py”,第1766行
>名称空间,args=self.\u解析\u已知\u args(args,名称空间)
>文件“/usr/local/lib/python3.6/argparse.py”,第2001行,在已知的参数中
“,”。联接(必需的_操作))
>文件“/usr/local/lib/python3.6/argparse.py”,第2393行出错
>self.exit(2,u('%(prog)s:error:%(message)s\n')%args)
>文件“/usr/local/lib/python3.6/argparse.py”,第2380行,在出口处
>_系统退出(状态)
>系统出口:2
> 
>在处理上述异常期间,发生了另一个异常:
>
>回溯(最近一次呼叫最后一次):
>文件“/tmp/runscript.py”,第134行,在
>提升e_类型(e_值)。使用_tracsback(新的_堆栈)
>AttributeError:“SystemExit”对象没有“with_tracsback”属性

boto3库为您提供了一个有趣的函数

glue = boto3.client(service_name='glue', region_name="my-region")
job = glue.get_job(JobName="my-job-name")

default_parameters = job['Job']['DefaultArguments']
default_parameters[u'--my-parameter']

通过这种方式,您应该能够通过
default\u参数
操纵粘合作业参数。我不确定它是否能直接在粘合作业中工作,但外部脚本应该能够处理粘合作业参数。

在工作流中运行上述代码会出现错误:

usage: workflow-test.py [-h] --JOB_NAME JOB_NAME --WORKFLOW_NAME WORKFLOW_NAME
                    --WORKFLOW_RUN_ID WORKFLOW_RUN_ID
workflow-test.py: error: the following arguments are required: --JOB_NAME
然后是您在上面粘贴的内容

AWS文档似乎已过时,并且作为工作流一部分的作业中未使用
JOB\u NAME
参数

您将通过以下方式获得工作流参数:

args = getResolvedOptions(sys.argv, ['WORKFLOW_NAME', 'WORKFLOW_RUN_ID'])
注意这里: