Wir haben eine einfache Abfrage zum Abrufen von Informationen aus unserer Datenbank mit einer serverlosen Anwendung, die auf nodejs implementiert ist. Leider kann ich keine Antwort von Bluebird bekommen - die Antwort läuft immer aus und ich bin mir nicht sicher, was das Problem verursachen könnte. Hier sind meine Dateien:Bluebird mit Lambda gibt keine Daten zurück
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;
Ich habe Konsolenprotokolleinträge hinzugefügt, und ich kann sehen, dass es sie vervollständigt ... aber es gibt nichts zurück und ich habe einen Verbindungsfehler. Ich sehe, dass die Daten abgerufen werden und Lambda sitzt einfach da, ohne etwas für 6 Sekunden zurückzugeben. Unten ist der neueste Eintrag von Cloud Uhr:
18:15:01 START RequestId: 195a7218-a516-11e6-b52d-5f028bb2bdf6 Version: $ AKTUELLE 18.15.01 2016-11-07T18: 15: 01.820Z 195a7218-a516-11e6-b52d-5f028bb2bdf6 Rollen gefunden: 9 18.15.07 END RequestId: 195a7218-a516-11e6-b52d-5f028bb2bdf6 18.15.07 REPORT RequestId: 195a7218-a516-11e6-b52d -5f028bb2bdf6 Dauer: 6002,14 ms Berechnete Dauer: 6000 ms Speichergröße: 1024 MB Maximal belegter Speicher: 18 MB 18:15:07 2016-11-07T18: 15: 07.468Z 195a7218-a516-11e6-b52d-5f028bb2bdf6 Aufgabe Zeitüberschreitung nach 6,00 Sekunden
Gibt es etwas, das bei der Verwendung von Bluebird mit Lambda bricht?
Danke ... leider noch mal auf den Rückruf (cb): var Versprechen = erfordern ('bluebird'); var pool = require ('./ dbConn'); module.exports.handle = (Ereignis, Kontext, cb) => { pool.getConnection(). Dann (Funktion (conn) { conn.query (Abfrage) .then (Funktion (Zeilen) { lassen Rollen = []; rows.forEach (Funktion (Zeile) { roles.push (row.name); }); cb (null, {Rollen: Rollen}); }). Catch (function (err) { console.log (Fehler);. }) schließlich (function() { pool.releaseConnection (conn); }); }) catch (function (e) { Rückruf (e);. }) ; }; –
Was ist mit Ihrem neuen dbConn, wie sieht das aus? EDIT: Ich denke, es gibt nur einen Pool zurück. – Erndob
@DavidD Ich aktualisierte meine Antwort. – Erndob