You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda调用Glue start_job_run时字符串格式化错误咨询

问题原因及解决方案

报错触发原因

  • 直接触发源是异常捕获分支的日志打印代码logger.error('ERROR DETAILS', e):Python logging模块的日志方法要求第一个参数为格式化字符串,后续传入的参数会按顺序替换字符串内的%类占位符。你的格式化字符串没有任何占位符,却传入了第二个参数e,执行时就会抛出not all arguments converted during string formatting错误。
  • 间歇性出现的原因:只有start_job_run调用真的抛出异常(如Glue并发超限、API限流、参数非法等)进入except块时,才会触发该日志打印错误,正常运行时不会走到该分支,因此表现为偶发。
  • 你最初定位到start_job_run行是因为该方法抛出的原始异常进入except块后,日志打印代码又抛出了新的异常,覆盖了原始异常信息,导致你看不到Glue启动失败的真实原因。

排查解决步骤

  1. 优先修复异常分支的日志打印写法,释放原始异常信息,可选写法如下:
    • 用f-string拼接异常:logger.error(f'ERROR DETAILS: {e}')
    • 用logging原生占位符:logger.error('ERROR DETAILS: %s', e)
    • 需要打印完整异常栈时:logger.error('ERROR DETAILS', exc_info=e)
  2. 日志修复完成后重新运行代码,即可获取start_job_run抛出的真实异常,针对常见异常的处理方案如下:
    • 若为Glue API限流错误:即使你设置了任务最大并发为17,短时间批量调用API也可能触发限流,可给start_job_run调用增加指数退避重试逻辑,或在循环内加100-200ms的短延迟
    • 若为参数类型错误:确认CONFIG_PATH、job_key_name均为字符串类型,Glue运行参数仅支持字符串传入,非字符串类型需要先做类型转换
    • 若为权限错误:确认Lambda执行角色拥有glue:StartJobRun权限,无权限边界、资源策略的额外限制
  3. 可选优化:给boto3的glue_client配置默认重试策略,自动处理偶发的服务端错误、限流错误。

内容的提问来源于stack exchange,提问作者Aatisha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:45:04