我们有一个AWS Glue DataBrew作业,它将输出放到某个S3桶文件夹中。然后将此Put通知通知给java lambda。但是下面的示例代码会抛出异常:
S3EventNotification.S3EventNotificationRecord record = event.getRecords().get(0);
String s3Bucket = record.getS3().getBucket().getName();
String s3Key= record.getS3().getObject().getUrlDecodedKey();
//下面抛出异常——404 NoSuchKey
S3Object s3object = s3Client.getObject(s3Bucket , s3Key);
在日志中,我们看到键是这样的:
* * input_file/processed_file_22Dec2022_1671678897600 fdg629ae - 4 f91 - 4869 - 891 - c - 79200772 fb92/databrew-test-put-object.temp
那么,lambda是否获得了仍被复制到S3文件夹中的文件?当我们使用控制台手动上传文件时,它工作得很好。但是当databrew job上传它时,我们看到了问题。
我希望lambda函数用正确的键读取文件。
感谢你的触发事件类型是什么?
所以它是,lambda得到的文件仍被复制到S3文件夹?
如果您有一个Put触发器,Lambda将在对象上传完成时被触发。S3不会先创建一个临时对象,然后再删除它。
我以前没有使用过AWS Glue DataBrew,但也许这是创建临时对象?如果是这种情况,您需要在代码中处理它。