如何将AWS EventBridge事件参数成功传递给Glue作业
问题描述
已搭建数据管道:当S3存储桶新增文件时,通过AWS EventBridge触发Glue Workflow,触发流程可正常启动Glue作业。现在需要将EventBridge事件中的S3桶名和对象路径参数传递给Glue作业,但配置输入转换器后,Glue作业无法获取到这些参数。
当前配置
- Input Path:
{ "bucket_name": "$.detail.bucket.name", "object_key": "$.detail.object.key" } - Input Template:
{"--bucket_name": <bucket_name>,"--object_key": <object_key>}
注:已尝试过输入模板键名添加/不添加“--”两种方式。
现状
新增文件仍能触发EventBridge并启动Glue作业,但通过打印sys.argv验证,Glue作业无法获取bucket_name和object_key参数。
解决方法
1. 调整参数传递逻辑
如果是触发Glue Workflow,参数不会自动流转到Workflow内的Glue Job。可以二选一:
- 改为EventBridge直接触发Glue Job(而非Workflow);
- 在Glue Workflow的Job节点中配置参数映射,把EventBridge传入的参数传递给Job。
2. 修正Input Template格式
EventBridge给Glue Job传参数时,必须将参数嵌套在Arguments字段下,且模板中的变量要加引号。正确配置如下:
- Input Path(保持不变):
{ "bucket_name": "$.detail.bucket.name", "object_key": "$.detail.object.key" } - Input Template:
{ "Arguments": { "--bucket_name": "<bucket_name>", "--object_key": "<object_key>" } }
之前的模板未嵌套在Arguments中,导致Glue Job无法识别参数。
3. 正确读取Glue Job参数
不要仅依赖sys.argv打印,使用Glue官方提供的getResolvedOptions方法更稳定:
import sys from awsglue.utils import getResolvedOptions # 指定需要获取的参数名称 args = getResolvedOptions(sys.argv, ['bucket_name', 'object_key']) bucket_name = args['bucket_name'] object_key = args['object_key'] print(f"待处理文件路径:s3://{bucket_name}/{object_key}")
4. 验证EventBridge事件结构
前往EventBridge的事件历史页面,查看触发的具体事件内容,确认$.detail.bucket.name和$.detail.object.key路径确实存在,避免因事件格式不符导致参数提取失败。
内容的提问来源于stack exchange,提问作者Toby Badman
相关产品推荐
相关产品推荐

