将AWS Glue Pythonshell作业的JSON响应返回给boto3调用者

时间:2019-09-23 13:37:27

标签: amazon-web-services aws-glue

是否可以从AWS Glue pythonshell作业发送JSON响应(输出字典)?类似于从AWS Lambda返回JSON响应吗?

我正在调用如下的Glue pythonshell作业:

response = glue.start_job_run(
               JobName = 'test_metrics',
               Arguments = {
                 '--test_metrics': 'test_metrics',
                 '--s3_target_path_key':   's3://my_target',
                 '--s3_target_path_value':   's3://my_target_value'} )

print(response)

我得到的答复是200,它说明胶水start_job_run是成功的事实。从文档中,我看到的只是用s3或其他database编写的Glue作业的结果。

我尝试在我的Glue pythonshell作业的末尾添加return {'result':'some_string'},以测试下面的代码是否有效。

import sys
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv,
                          ['JOB_NAME',
                           's3_target_path_key',
                           's3_target_path_value'])
print ("Target path key is: ", args['s3_target_path_key'])
print ("Target Path value is: ", args['s3_target_path_value'])
return {'result':"some_string"}

但是它会引发错误SyntaxError: 'return' outside function

1 个答案:

答案 0 :(得分:1)

不使胶水返回响应,因为它期望在胶水内部长时间运行。阻止长时间运行的任务的响应本身并不是正确的方法。代替它,您可以使用launch job (service 1) -> execute job (service 2)-> get result (service 3)模式。您可以将JSON响应发送到要从AWS Service 2启动的AWS Service 3(执行作业),例如如果从胶水作业启动lambda,则可以发送json响应给它。