如何解决向AWS Glue传递动态参数时取值均为'a'的问题
AWS Glue 动态参数传参取值异常排查
问题场景
- 参考AWS Glue动态参数传参的通用方案完成全链路配置:
- 在Glue作业控制台完成自定义参数项的预配置

- 通过boto3代码触发作业启动,传入自定义参数,代码片段:
- 在Glue作业控制台完成自定义参数项的预配置
event = { '--ncoa': "True", '--files': 'file.csv', '--group_file': '3e93475d45b4ebecc9a09533ce57b1e7.csv', '--client_slug': 'test', '--slm_id': '12345' } glueClient.start_job_run(JobName='TriggerNCOA', Arguments=event)
- 在Glue作业脚本中通过
getResolvedOptions解析参数并输出日志,脚本片段:
args = getResolvedOptions(sys.argv, ['NCOA','Files','GroupFile','ClientSlug', 'SLMID']) v_list=[{"ncoa":args['NCOA'],"files":args['Files'],"group_file":args['GroupFile'], "client_slug":args['ClientSlug'], "slm_id":args['SLMID']}] print(v_list)
异常表现
作业运行后日志打印的所有参数值均为字符a,和boto3传入的实际预设值完全不符,经多轮公开资料排查未定位到遗漏的配置问题。
问题根因
出现这类所有参数值都返回单字符a的异常,核心原因是参数名不满足Glue的严格匹配规则:
- Glue内置的
getResolvedOptions方法对参数名的匹配是严格区分大小写的,没有自动大小写转换的兼容逻辑 - boto3传参时使用的键名是全小写格式:
ncoa/files/group_file/client_slug/slm_id - 脚本里通过
getResolvedOptions声明要获取的参数名是混合大写格式:NCOA/Files/GroupFile/ClientSlug/SLMID
当两者的参数名没有严格匹配时,getResolvedOptions不会抛出“找不到参数”的明确报错,而是会从传入的sys.argv参数列表中按顺序错位取值,最终取到零散的单个字符,就会出现所有参数值都为a的诡异现象。
修复方案
两种匹配方案任选其一即可正常取值,推荐优先选择和现有传参格式对齐的方案:
- 调整脚本内的参数解析逻辑,让参数名和boto3传参的全小写格式完全匹配:
# 修正后的Glue作业参数解析代码 args = getResolvedOptions( sys.argv, ['ncoa','files','group_file','client_slug', 'slm_id'] ) v_list = [{ "ncoa": args['ncoa'], "files": args['files'], "group_file": args['group_file'], "client_slug": args['client_slug'], "slm_id": args['slm_id'] }] print(v_list)
- 如果需要保留脚本内大写格式的参数名规则,就调整boto3传参的键名,让参数名和脚本声明的格式完全一致:
# 修正后的boto3触发传参代码 event = { '--NCOA': "True", '--Files': 'file.csv', '--GroupFile': '3e93475d45b4ebecc9a09533ce57b1e7.csv', '--ClientSlug': 'test', '--SLMID': '12345' } glueClient.start_job_run(JobName='TriggerNCOA', Arguments=event)
常见踩坑提示
- Glue作业控制台配置的预定义参数,必须和脚本取参时的键名完全一致,不要把默认值设置为无意义的单字符
- 不要在Arguments参数中传入Glue系统保留的内置参数名(如
--JOB_NAME/--JOB_ID),否则会触发作业启动的参数校验拦截 - 传布尔类型参数时,要把参数值转为字符串格式传入,避免因类型不匹配导致传值失败
内容的提问来源于stack exchange,提问作者DBA108642
相关产品推荐
相关产品推荐

