簡體   English   中英

AWS Lambda/Nodejs 沒有執行 mysql connection.query

[英]AWS Lambda/Nodejs is not executing mysql connection.query

我有一個簡單的 Lambda 函數來連接到 MYSQL,但是connection.query沒有執行。 Lambda 具有AWSLambdaVPCAccessExecutionRole訪問權限,並且它是部署 RDS 的同一 VPC 的一部分。

RDS 安全組已添加到 Lambda 的配置中。 log1 是我總是得到的輸出。 有一次我得到了Log2。 我不確定發生了什么。

    var mysql      = require('mysql');
    var connection = mysql.createConnection({
      host     : 'xxxxxxxx.us-east-1.rds.amazonaws.com',
      user     : 'admin',
      password : 'pass',
      database : 'dbname'
    });
    console.log('CONNECTION ' + connection);
    connection.connect();
    console.log('2 ');  
    exports.handler = async (event,context,callback) => {
      console.log('3 ');
      context.callbackWaitsForEmptyEventLoop = false;
        connection.query('SELECT emp_num from tag where emp_id=1', function (error, results, fields) {
          console.log('2 ');
          if (error) throw error;
          else
            callback(null, results)
          //console.log('The solution is: ', results[0].tag_num);
        });
        connection.end();
    };

日志1

RESTART RequestId:04c2d758-ac40-474f-ac55-045ccea8a9ff 版本:$LATEST 2020-11-08T02:02:58.976Z 04c2d758-ac40-474f-ac55-045ccea8a9ff 信息 3 END RequestId:04c2d758-ac40-cceaa-4874fPORT RequestId:04c2d758-ac40-474f-ac55-045ccea8a9ff 持續時間:5.75 毫秒計費持續時間:100 毫秒內存大小:128 MB 使用的最大內存:20 MB

日志2

START RequestId: abeb6a6d-7480-4acc-91e2-5971e6fe74fe 版本: $LATEST 2020-11-08T02:02:43.293Z abeb6a6d-7480-4acc-91e2-5971e6fe74fe INFO 3 2020-11-08Z02:02:43.293Z abeb6a6d-7480-4acc-91e2-5971e6fe74fe 信息 3 2020-11-08Z02:02:43.284a a4be769。 -4acc-91e2-5971e6fe74fe INFO 2 2020-11-08T02:02:43.294Z abeb6a6d-7480-4acc-91e2-5971e6fe74fe ERROR Uncaught Exception {"errorType":"Error","errorMessage":"Cannot enqueue Query after invoking quit .","code":"PROTOCOL_ENQUEUE_AFTER_QUIT","fatal":false,"stack":["Error: Cannot enqueue Query after invoking quit."," at Protocol._validateEnqueue (/var/task/node_modules/mysql/lib /protocol/Protocol.js:215:16)","
在 Protocol._enqueue (/var/task/node_modules/mysql/lib/protocol/Protocol.js:138:13)","
在 Connection.query (/var/task/node_modules/mysql/lib/Connection.js:198:25)"," 在 Runtime.exports.handler (/var/task/index.js:18:16)","在 Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"]} [錯誤] [1604800963301] LAMBDA_RUNTIME 未能發布處理程序成功響應。Http 響應代碼:403。END RequestId:abeb6a6d-7480-4acc- 91e2-5971e6fe74fe 報告請求 ID:abeb6a6d-7480-4acc-91e2-5971e6fe74fe 持續時間:29.47 毫秒計費持續時間:100 毫秒內存大小:128 MB 使用的最大內存:20 MB
RequestId:abeb6a6d-7480-4acc-91e2-5971e6fe74fe 錯誤:運行時退出錯誤:退出狀態 129 Runtime.ExitError

您的句柄被定義為async並且您沒有await承諾。 可能的解決方案:

  1. 將 await 調用添加到您的承諾中(即await connection.query(...).promise()
  2. 將處理程序的簽名更改為非異步(即exports.handler = (event,context,callback) => {...} ),然后它將等待回調。
  3. (丑陋的解決方法)添加context.callbackWaitsForEmptyEventLoop = true; ,它告訴 AWS 等待一個空的事件循環。

披露:我在 Lumigo 工作,這是一家幫助您調試無服務器應用程序的公司。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM