我想要实现的目标是:通过AWS SES接收电子邮件并将其存储到AWS S3。然后,AWS Lambda函数解析电子邮件,并将结果存储到数据库中。每当在S3上创建新对象时,Lambda会被S3调用。
问题:只有一小部分(我会说不到10%)的电子邮件被存储到我的数据库中。
在S3上,我设置了一个“事件通知”。它在“ObjectCreated(All)”上调用我的Lambda函数。据我理解,这意味着对于在S3上创建的每个新对象(即由SES存储的电子邮件),都会调用Lambda函数。
Lambda函数做了几件事情,但至少它做了这个:
问题:只有一小部分(我会说不到10%)的电子邮件被存储到我的数据库中。
在S3上,我设置了一个“事件通知”。它在“ObjectCreated(All)”上调用我的Lambda函数。据我理解,这意味着对于在S3上创建的每个新对象(即由SES存储的电子邮件),都会调用Lambda函数。
Lambda函数做了几件事情,但至少它做了这个:
exports.handler = function(event, context) {
Async.mapSeries(event.Records,
function dealWithOneMail(record, callback) {
var srcKey = decodeURIComponent(record.s3.object.key.replace(/\+/g, " "));
console.log('> Working on object ' + srcKey);
}
}
正如您所看到的,我在event
中遍历Records
数组,并至少打印对象的名称一次。我还在Lambda代码的第一行执行此操作:
console.log('> Lambda function invoked!');
从我的日志来看,Lambda函数并不总是被调用,而只是有时才被调用。我为什么这么认为呢?
我下载了今天所有的新电子邮件,共1,245个对象。所有这些邮件也存储在S3上。但是,在我自动设置的Lambda CloudWatch日志中,只找到了85次“Lambda函数被调用”的记录。
是否有人知道可能出现的错误或者有什么调试的想法?