exports.handler = async (event) => { const sql = require('mssql'); let config = { user: "MyUsername", password: "MyPassword", server: "MyServer", port: 1433, options: { database: 'MyDatabase', encrypt: false, } }; sql.connect(config, (err) => { if (err) { console.log(err);} else { console.log('connected'); let request = new sql.Request(); const theQuery = "SELECT * FROM MyTable"; request.query(theQuery, (err, data)=> { if(err) { console.log(err); } else { console.log(data); } }) } }); };Estoy tratando de hacer una consulta SELECCIONAR simple con esto, y parece funcionar bien cuando lo ejecuto localmente, pero cuando lo pruebo en Lambda, se agota el tiempo de espera. Tengo el lambda en la misma VPC que SQL Server, por lo que no es un problema de conexión. ¿Algunas ideas?
2022-07-17T03:10:02.912Z a4775342-517a-4511-920e-46269ee07627 INFO ConnectionError: Failed to connect to ********:1433 in 15000ms at /opt/nodejs/node_modules/mssql/lib/tedious/connection-pool.js:70:17 at Connection.onConnect (/opt/nodejs/node_modules/tedious/lib/connection.js:1051:9) at Object.onceWrapper (node:events:642:26) at Connection.emit (node:events:527:28) at Connection.emit (node:domain:475:12) at Connection.emit (/opt/nodejs/node_modules/tedious/lib/connection.js:1079:18) at Connection.connectTimeout (/opt/nodejs/node_modules/tedious/lib/connection.js:1284:10) at Timeout._onTimeout (/opt/nodejs/node_modules/tedious/lib/connection.js:1229:12) at listOnTimeout (node:internal/timers:559:17) at processTimers (node:internal/timers:502:7) { code: 'ETIMEOUT', originalError: ConnectionError: Failed to connect to ********:1433 in 15000ms at Connection.connectTimeout (/opt/nodejs/node_modules/tedious/lib/connection.js:1284:26) at Timeout._onTimeout (/opt/nodejs/node_modules/tedious/lib/connection.js:1229:12) at listOnTimeout (node:internal/timers:559:17) at processTimers (node:internal/timers:502:7) { code: 'ETIMEOUT', isTransient: undefined } }Resulta que el guión simplemente está terminando antes de terminar. Para arreglar esto, tuve que devolver una promesa.
exports.handler = async (event) => { const promise = new Promise(function(resolve, reject) { let sql = require('mssql'); sql.connect(config, (err) => { if (err) { reject(err); } else { const request = new sql.Request(); const query = "SELECT * FROM MyTable"; request.query(query, (err, result) => { if(err) { reject(err); } else { resolve(result); } }); } }); }); return promise; };