【发布时间】:2020-05-13 09:27:45
【问题描述】:
我在 RDS aurora 中创建了 2 个表:
-
test-table在极光数据库中,值为 id(PK)、tasknumber、status、contactid(FK) -
contact-table在同一个数据库中,值为 contactid(PK)、电子邮件、电话
我在“测试表”中创建了一个触发器,每当“状态”发生变化时,触发器都应该调用 AWS-Lambda ARN。
Lambda 函数和 Aurora 具有所有权限,并且已清除安全性,但仍在从 Lambda 进行测试时出现以下图像错误,并在 aurora 中手动更新“状态”字段(通过 Workbench Sql 查询),它显示:
操作失败:将 SQL 脚本应用到数据库时出错。
ERROR 2013: 2013: 在查询期间丢失与 MySQL 服务器的连接
我也附上了我的 Lambda Node.Js 代码。
var AWS = require('aws-sdk');
AWS.config.update({ region: 'us-east-1' });
const mysql = require('mysql');
var con = mysql.createConnection({
host: 'correct value',
user: 'root',
password: 'correct value',
port: correct value,
database: 'correct value'
});
exports.handler = (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false;
var fk = event.contact_id;
console.log('FOREIGN KEY=', fk)
con.connect(function(err) {
if (err) throw err;
var sql = `SELECT * FROM db.contacts where contact_id=${fk}`
con.query(sql, function(err, result) {
if (err) throw err;
var email = result[0].email;
console.log(email);
var sns = new AWS.SNS();
var params = {
Message: email,
Subject: "Test SNS From Lambda",
TopicArn: "arn:correct value"
};
sns.publish(params, function(err, data) {
if (err) console.log(err, err.stack);
else {
console.log(data);
callback(null, 'Success');
}
});
});
});
};
同样适用于 NodeJs 包:https://github.com/isaacs
【问题讨论】:
-
作为解决方案: - 我增加了 Lambda 函数的超时期限 - 增加了 Lambda 的内存 - 安全组配置:MYSQL/Aurora TCP 3306 0.0.0.0/0 - 更正了 IAM 策略,RDS 和 Lambda相同的 IAM
-
MySql 触发器在条件不满足时工作。我想这是合乎逻辑的,因为当时它不必调用 Lambda ARN
标签: amazon-web-services aws-lambda mysql-workbench database-trigger amazon-aurora