Estamos desarrollando una aplicación de funciones en JavaScript con Serverless Framework y desplegándola en Azure.
Estamos extrayendo datos de una base de datos de Microsoft SQL Server 2014, todo va bien al probar las funciones en un entorno local con el complemento Serverless Offline y una VPN. Este es el código para establecer la conexión:
const mssql = require("mssql"); const sqlConfig = { user: process.env["DB_USER"], password: process.env["DB_PWD"], database: process.env["DB_NAME"], server: process.env["DB_HOST"], pool: { max: 10, min: 0, idleTimeoutMillis: 30000, }, options: { encrypt: true, // for azure trustServerCertificate: false, // change to true for local dev / self-signed certs }, }; // pool-manager.js const pools = new Map(); module.exports = { get: (name) => { if (!pools.has(name)) { const pool = new mssql.ConnectionPool(sqlConfig); // automatically remove the pool from the cache if `pool.close()` is called const close = pool.close.bind(pool); pool.close = (...args) => { pools.delete(name); return close(...args); }; pools.set(name, pool.connect()); } return pools.get(name); }, closeAll: () => Promise.all( Array.from(pools.values()).map((connect) => { return connect.then((pool) => pool.close()); }) ), };También estamos usando las referencias de Key Vault, estas funcionan normalmente.
El problema es que cuando se implementan las funciones, las conexiones a la base de datos nunca se establecen. Este es el error que me sale:
{ "code": "ESOCKET", "originalError": { "code": "ESOCKET" }, "name": "ConnectionError" }Entonces, mi pregunta es: ¿Qué se debe hacer en Azure o qué se debe cambiar en nuestro código para permitir esta conexión?
Gracias
¿Su servidor MS SQL 2014 está alojado localmente/en una VM detrás de una VNET?
Si es así, deberá integrar su aplicación de función con esa red virtual. Consulte la guía de Microsoft .