Glue Job完成S3分区文件写入后触发Lambda及查看执行历史问题
查看Lambda执行历史 & 排查S3触发器未触发问题
作为AWS新手,别慌,咱们一步步来解决你的问题:
一、怎么查看Lambda的执行历史
这是快速排查Lambda是否被触发的核心步骤:
- 登录AWS控制台,找到Lambda服务,在函数列表里选中你目标的Lambda函数
- 进入函数详情页后,切换到监控标签:
- 这里能直观看到调用次数、错误率、执行时长这些基础指标,如果最近有触发,调用次数会有变化
- 点击页面里的查看CloudWatch日志,跳转到对应的日志组,每个Lambda执行都会生成一个日志流,点进去就能看到详细的执行日志——包括触发源、执行过程中的打印信息、报错详情(如果有的话)
- 另外,你也可以在函数详情的配置标签下,找到触发器选项,查看当前S3触发器的状态是否为「启用」,部分情况下这里会显示最近的触发记录
二、排查S3触发器未触发的可能原因
结合你的Glue Job代码和触发器配置,大概率是这几个点出了问题:
- S3触发器前缀配置错误
你的Glue Job把文件写到了
s3://Bucket/a/b/c/路径下,生成的文件是run-xxx.csv,那S3触发器的前缀应该设为a/b/c/run-(要包含完整的路径前缀),而不是只写run-——因为S3的前缀是从桶根开始的完整路径片段,只写run-的话,只有当文件直接放在桶根(s3://Bucket/run-xxx.csv)才会触发,这应该是你当前的核心问题! - Glue写文件的机制导致事件不匹配
Glue写文件时会先创建临时文件(比如以_temporary开头的),最后才重命名为目标文件。你需要确保S3触发器监听的是ObjectCreated:CompleteMultipartUpload或ObjectCreated:All事件类型,因为Glue的repartition写入大概率用的是分片上传,只有上传完成的事件才会触发Lambda。 - 权限配置问题
- 检查S3桶的权限:是否允许向你的Lambda函数发送事件通知(可以在S3桶的「属性」→「事件通知」里查看触发器的权限配置)
- 检查Lambda的执行角色:是否有允许被S3触发的权限,以及如果Lambda需要读取S3文件,是否有对应的S3读取权限
- 测试触发器有效性
手动上传一个run-xxx.csv文件到s3://Bucket/a/b/c/路径下,看看Lambda是否会被触发。如果手动上传能触发,那问题出在Glue Job的写入逻辑;如果手动也不触发,那就是触发器本身的配置问题。
额外建议:更可靠的触发方式
如果希望确保Glue Job完全执行完成后再触发Lambda,而不是依赖S3文件的创建事件(避免临时文件干扰),可以在Glue Job的最后添加一段代码,主动调用Lambda的API:
import boto3 lambda_client = boto3.client('lambda') response = lambda_client.invoke( FunctionName='你的Lambda函数名', InvocationType='Event', # 异步调用,不阻塞Glue Job Payload=b'{"key": "value"}' # 可以传递需要的参数,比如S3路径 )
这样只有当Glue Job顺利执行到最后一步,才会触发Lambda,逻辑更可控。
内容的提问来源于stack exchange,提问作者Haha
相关产品推荐
相关产品推荐

