Я использую AWS SES mail с nodemailer. Когда электронное письмо отправлено, идентификатор сообщения, созданный для этого электронного письма, сохраняется в моей БД. Как только электронное письмо получено получателем, с помощью SNS я получаю электронное письмо с уведомлением, и срабатывает лямбда. Я использую эту лямбду, чтобы получить обновленный статус электронной почты и обновить его в своей БД. Я создал лямбда-функцию, загрузив zip-папку пакета в AWS.
Когда я отправляю одно электронное письмо, оно отправляется, и лямбда может обновить БД. Но если я отправляю 10 писем сразу, все письма отправляются, но лямбда обновляет только 5-8 записей.
Mysql: 2.18.1 УЗЕЛ: 12.x
Код PFB of Lambda,
const config = require("./config.json");
const getConnectionPool = ( dbname ) => {
const params = {
host: config.dbhost,
user: config.dbuser,
password: config.dbpassword,
database: dbname,
multipleStatements: true,
// debug:true
}
const pool = mysql.createPool( params );
return pool;
}
const getParameters = ( event ) => {
const data =event.Records[0];
let eventType = 0;
const record = JSON.parse(data.Sns.Message);
const mail = record.mail;
const headers = mail.headers[3];
let dbname = headers.value;
dbname = dbname.replace("<", "");
dbname = dbname.replace(">", "");
if( record.eventType == "Delivery" ) {
eventType = 2;
} else if( record.eventType == "Bounce" ) {
eventType = 3;
}else if( record.eventType == "Complaint" ) {
eventType = 4;
}else if( record.eventType == "Reject" ) {
eventType = 5;
}
return {
eventType: eventType,
messageId: mail.messageId,
dbname: dbname
}
}
exports.handler = (event, context, callback) => {
let params = getParameters( event );
//prevent timeout from waiting event loop
context.callbackWaitsForEmptyEventLoop = false;
const pool = getConnectionPool( params.dbname );
pool.getConnection( (err, connection) => {
// Use the connection
connection.query(
"START TRANSACTION;SET SQL_SAFE_UPDATES = 0;update email_logs set bool_is_sent = " + mysql.escape( params.eventType ) + " where message_id= " + mysql.escape( params.messageId ) + ";SET SQL_SAFE_UPDATES = 1;COMMIT;",
(error, results ) => {
// And done with the connection.
connection.release();
// Handle error after the release.
if (error) callback(error);
else callback(null, results[0]);
}
);
});
};
Просто фрагмент журнала cloudwatch
OkPacket {
fieldCount: 0,
affectedRows: 0,
insertId: 0,
serverStatus: 43,
warningCount: 0,
message: '(Rows matched: 0 Changed: 0 Warnings: 0',
protocol41: true,
changedRows: 0
},
Что здесь не так.