是否可以通过远程MYSQL数据库调用或触发AWS lambda?

是否可以通过远程MYSQL数据库调用或触发AWS lambda?,mysql,aws-lambda,amazon-rds,Mysql,Aws Lambda,Amazon Rds,在远程MYSQL数据库表(托管在本地机器上)中插入数据时,还应通过lambda将数据插入RDS MYSQL数据库表: CREATE TRIGGER local_to_rds AFTER INSERT ON mark2 FOR EACH ROW BEGIN SELECT NEW.sno, QUOTE(NEW.name), IFNULL(NEW.geoloc,0), NEW.ranging INTO @sno, @name, @geoloc, @ranging; CALL local_

在远程MYSQL数据库表(托管在本地机器上)中插入数据时,还应通过lambda将数据插入RDS MYSQL数据库表:

 CREATE TRIGGER local_to_rds AFTER INSERT ON mark2 FOR EACH ROW
BEGIN
  SELECT  NEW.sno, QUOTE(NEW.name), IFNULL(NEW.geoloc,0), NEW.ranging INTO @sno, @name, @geoloc, @ranging;
  CALL  local_to_rds_Procedure(@sno, @name, @geoloc, @ranging);
end
CREATE PROCEDURE local_to_rds_procedure (IN sno int, IN name varchar(50), IN geoloc int, IN ranging int) LANGUAGE sql begin
CALL mysql.lambda_async('arn:aws:lambda:us-west-2:919585521528:function:local_to_rds',
CONCAT('{ "sno" : "', sno,
'", "name" : "', name,
'", "geoloc" : "', geoloc,
'", "ranging" : "', ranging,'"}'));
END
我的要求:

 CREATE TRIGGER local_to_rds AFTER INSERT ON mark2 FOR EACH ROW
BEGIN
  SELECT  NEW.sno, QUOTE(NEW.name), IFNULL(NEW.geoloc,0), NEW.ranging INTO @sno, @name, @geoloc, @ranging;
  CALL  local_to_rds_Procedure(@sno, @name, @geoloc, @ranging);
end
CREATE PROCEDURE local_to_rds_procedure (IN sno int, IN name varchar(50), IN geoloc int, IN ranging int) LANGUAGE sql begin
CALL mysql.lambda_async('arn:aws:lambda:us-west-2:919585521528:function:local_to_rds',
CONCAT('{ "sno" : "', sno,
'", "name" : "', name,
'", "geoloc" : "', geoloc,
'", "ranging" : "', ranging,'"}'));
END
  • 我的电脑里有一个本地数据库
  • 我使用远程访问通过Dbeaver连接到它来访问它
  • 现在我已经在AWS中创建了一个RDS MYSQL数据库(与我的本地数据库具有相同的模式)
  • 我将lambda作为连接这两个数据库的桥梁

    我的尝试:

     CREATE TRIGGER local_to_rds AFTER INSERT ON mark2 FOR EACH ROW
    BEGIN
      SELECT  NEW.sno, QUOTE(NEW.name), IFNULL(NEW.geoloc,0), NEW.ranging INTO @sno, @name, @geoloc, @ranging;
      CALL  local_to_rds_Procedure(@sno, @name, @geoloc, @ranging);
    end
    
    CREATE PROCEDURE local_to_rds_procedure (IN sno int, IN name varchar(50), IN geoloc int, IN ranging int) LANGUAGE sql begin
    CALL mysql.lambda_async('arn:aws:lambda:us-west-2:919585521528:function:local_to_rds',
    CONCAT('{ "sno" : "', sno,
    '", "name" : "', name,
    '", "geoloc" : "', geoloc,
    '", "ranging" : "', ranging,'"}'));
    END
    
    • 我尝试了将RDS连接到RDS的常用方法
    • 在这里,我创建了一个触发器,然后在本地数据库中创建了一个具有LAMBDA\u ARN的存储过程,以便在本地表中插入数据后调用LAMBDA
    • 其中lambda将在RDS MYSQL表中插入相同的数据
  • 例如,我尝试的是:

    我在本地数据库中有一个表,如:

    我在RDS MYSQL中创建了一个具有相同模式的数据库

    我在本地数据库中添加了如下触发器:

     CREATE TRIGGER local_to_rds AFTER INSERT ON mark2 FOR EACH ROW
    BEGIN
      SELECT  NEW.sno, QUOTE(NEW.name), IFNULL(NEW.geoloc,0), NEW.ranging INTO @sno, @name, @geoloc, @ranging;
      CALL  local_to_rds_Procedure(@sno, @name, @geoloc, @ranging);
    end
    
    CREATE PROCEDURE local_to_rds_procedure (IN sno int, IN name varchar(50), IN geoloc int, IN ranging int) LANGUAGE sql begin
    CALL mysql.lambda_async('arn:aws:lambda:us-west-2:919585521528:function:local_to_rds',
    CONCAT('{ "sno" : "', sno,
    '", "name" : "', name,
    '", "geoloc" : "', geoloc,
    '", "ranging" : "', ranging,'"}'));
    END
    
    我的本地数据库中的过程如下:

     CREATE TRIGGER local_to_rds AFTER INSERT ON mark2 FOR EACH ROW
    BEGIN
      SELECT  NEW.sno, QUOTE(NEW.name), IFNULL(NEW.geoloc,0), NEW.ranging INTO @sno, @name, @geoloc, @ranging;
      CALL  local_to_rds_Procedure(@sno, @name, @geoloc, @ranging);
    end
    
    CREATE PROCEDURE local_to_rds_procedure (IN sno int, IN name varchar(50), IN geoloc int, IN ranging int) LANGUAGE sql begin
    CALL mysql.lambda_async('arn:aws:lambda:us-west-2:919585521528:function:local_to_rds',
    CONCAT('{ "sno" : "', sno,
    '", "name" : "', name,
    '", "geoloc" : "', geoloc,
    '", "ranging" : "', ranging,'"}'));
    END
    
    现在,我已经创建了一个lambda,用于将本地数据库连接到RDS数据库,也用于一些其他用途,如在我的表中每次插入(或)更新(或)删除时通知我是否有任何错误,自动创建日志表,等等。。。我没有任何问题

    我在这里面临的问题是连接,在创建了用于调用lambda的触发器和过程之后,我得到了
    SQL错误[1305][42000]:过程my.SQL.lambda_async不存在

    我尝试浏览解决方案,但找不到合适的解决方案

    这是我正在尝试的流程的视图:

    本地数据库-->LAMBDA-->AWS\u RDS

    我遇到的问题是在本地数据库表中插入数据时调用lambda。。。而且我也不知道如果我通过这个测试,我会面临什么样的错误


    先谢谢你

    您在哪里看到本地MySQL服务器中应该提供
    lambda\u async
    ?我只在AWS Aurora的MySQL版本中看到了该功能


    对于您尝试执行的操作,您需要通过API网关向世界公开Lambda函数,然后从MySQL过程向该API网关端点公开该函数。

    是否可以在windows中为MySQL创建UDF!?所以我可以通过过程调用API…@NaveenB快速搜索使它看起来是可能的: