我們有一個簡單的查詢,使用部署在nodejs上的無服務器應用程序從我們的數據庫獲取信息。不幸的是,我無法獲得藍鳥承諾的任何迴應 - 迴應總是超時,我不確定可能導致問題的原因。下面是我的文件:Lambda沒有返回數據的藍鳥
serverless.yml:
service: myAuth0
provider:
name: aws
iamRoleARN: arn:aws:iam::XXXXXXXXX:role/test-role
runtime: nodejs4.3
stage: production
region: us-us-1
iamRoleStatements:
- Effect: "Allow"
Action:
- "ec2:CreateNetworkInterface"
- "ec2:DescribeNetworkInterfaces"
- "ec2:DeleteNetworkInterface"
Resource: "*"
vpc:
securityGroupIds:
- ${self:custom.${opt:stage, self:provider.stage}.${opt:region, self:provider.region}.vpc.securitygroup}
subnetIds:
- ${self:custom.${opt:stage, self:provider.stage}.${opt:region, self:provider.region}.vpc.subnet1}
- ${self:custom.${opt:stage, self:provider.stage}.${opt:region, self:provider.region}.vpc.subnet2}
custom:
production:
us-east-1:
vpc:
subnet1: subnet-11111111
subnet2: subnet-22222222
securitygroup: sg-33333333
functions:
getUserRoles:
handler: app/handler.handle
events:
- http:
method: get
path: userstest/roles
handler.js:
'use strict';
require('dotenv').config();
var Promise = require('bluebird');
var getConn = require('./dbConn');
module.exports.handle = (event, context, callback) => {
Promise.using(getConn(), function(conn){
return conn.query('select ert.name from emp_roles ert order by ert.name').then(function(rows){
let roles = [];
rows.forEach(function(row){
roles.push(row.name);
});
return roles;
}).catch(function(err){
console.log(error);
});
}).then(function(roles){
console.log("found roles: " + roles);
callback(null, {roles: roles});
});
};
dbConn.js:
var mysql = require('promise-mysql');
var pool = mysql.createPool({
connectionLimit: 10,
host : process.env.MYSQL_HOST,
user : process.env.MYSQL_USER,
password : process.env.MYSQL_PW,
database : process.env.MYSQL_DB
});
function getConn() {
return pool.getConnection().disposer(function(connection) {
pool.releaseConnection(connection);
});
}
module.exports = getConn;
我添加了控制檯日誌條目,我可以看到它完成了它們...但是它不會返回任何內容,並最終導致連接錯誤。我看到數據被提取,而Lambda只是坐在那裏,沒有任何東西返回6秒。下面是從雲觀看最新的條目:
18時15分01秒開始的requestId:195a7218-a516-11e6-b52d-5f028bb2bdf6 版本:$最新18點15分01秒2016-11-07T18:15: 01.820Z 195a7218-a516-11e6-b52d-5f028bb2bdf6找到角色:9 18時15分07秒結束 的requestId:195a7218-a516-11e6-b52d-5f028bb2bdf6 18時15分07秒報告 的requestId:195a7218-a516-11e6-b52d -5f028bb2bdf6持續時間:6002.14 ms 計費時長:6000 ms內存大小:1024 MB使用的最大內存:18 MB 18:15:07 2016-11-07T18:15:07.468Z 195a7218-a516-11e6-b52d-5f028bb2bdf6 任務6.00秒後超時
使用藍鳥與Lambda時是否有什麼突破?
謝謝......不幸的是,它仍然在回調(cb)超時: var Promise = require('bluebird'); var pool = require('./ dbConn'); (函數(行)){ module.exports.handle =(event,context,cb)=> pool.getConnection()。然後(函數(conn){conn.query(query).then(function(rows){ let roles = []; rows.forEach(function(row){ roles.push(row.name); }); cb(null,{roles:roles}); })。catch(function(err){ 的console.log(誤差); })最後(函數(){ pool.releaseConnection(conn);在 });} )捕獲(功能(E){ 回調(e)中; }) ; }; –
你的新dbConn怎麼樣,看起來如何?編輯:我想它現在只是返回一個池。 – Erndob
@DavidD我更新了我的答案。 – Erndob