【问题标题】:Lambda function access by RDS trigger creates connection lostRDS 触发器的 Lambda 函数访问导致连接丢失
【发布时间】:2020-05-13 09:27:45
【问题描述】:

我在 RDS aurora 中创建了 2 个表:

  1. test-table 在极光数据库中,值为 id(PK)、tasknumber、status、contactid(FK)
  2. 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


【解决方案1】:

如果你想要即时响应,你必须关闭连接,否则关闭连接需要默认时间,如果有意义请告诉我

【讨论】:

  • 请您详细说明一下,我听不懂。
  • con.query(sql, function(err, result) { if (err) throw err; var email = result[0].email; console.log(email); 尝试关闭连接获取数据后
  • con.end() - 仍然给出同样的问题。错误是“连接 ETIMEOUT”
  • 他们在同一个vpc中吗?
  • 不,以前没有。刚刚更正它,仍然出现以下错误: >操作失败:将 SQL 脚本应用于 > 数据库时出错。 >ERROR 2013: 2013: 在查询期间丢失与 MySQL 服务器的连接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 2019-10-14
  • 2019-04-26
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
相关资源
最近更新 更多