Доступ к Azure Synapse Analytics из функции Node.js

Я пытаюсь получить доступ к пулу SQL Azure Synapse из функции Node.js. Я взял это статья в качестве основы и переключите метод аутентификации на "azure-active-directory-msi-app-service".

Если я запускаю функцию, я вижу quertyText context.log в командной строке функции, но, к сожалению, больше ничего не происходит. Он работает без какого-либо вывода.

Я не могу увидеть какой-либо другой context.log или получить какой-либо ответ от функции.

const Request = require('tedious').Request;
const TYPES = require('tedious').TYPES;
const test = require('lodash')

module.exports = function (context, req) {
   //get the Query Parameter

   // Create connection to database
   const config = {
     authentication: {
         type: "azure-active-directory-msi-app-service"
     },
     server: "database.sql.azuresynapse.net", 
     options: {
         database: "database", 
         encrypt: true,
         port: 1433
     }
   };

   const connection = new Connection(config);

   // Create array to store the query results
   let result = [];
   let rowData = {};

   // req.query.color will be passed as a Query variable in the URL
   //const payload = [req.query.color];

   // Create query to execute against the database
   const queryText = "SELECT TOP (10) [id],[column1],[culomn2] FROM [dbo].[Table]";
   context.log(queryText);
   
   // Create Request object
   request = new Request(queryText, function(err) {
       context.log("Request")
       if (err) {
           // Error in executing query
           context.log.error(err);
           context.res.status = 500;
           context.res.body = "Error executing the query";
       } else {
           context.res = {
               status: 200,
               isRaw: true,
               body: result,
               headers: {
                   'Content-Type': 'application/json'
               }
           }
       }
       context.done();
   });

   // Manipulate the results and create JSON
   request.on('row', function(columns) {
       rowData = {};
       columns.forEach(function(column) {
           // IMPORTANT: Change the conversion logic here to adjust JSON format
           rowData[column.metadata.colName] = column.value;
       });
       result.push(rowData);
   });

   connection.on('connect', function(err) {
       if (err) {
           // Error in connecting
           context.log.error(err);
           context.res.status = 500;
           context.res.body = "Error connecting to Azure Synapase";
           context.done();
       } else {
           // Connection succeeded
           connection.execSql(request);
       }
   });
}``` 

person MW00    schedule 01.04.2021    source источник


Ответы (1)


Это должно сработать...

const Connection = require('tedious').Connection;
const Request = require('tedious').Request;
const TYPES = require('tedious').TYPES;

const config = {
    server: "SQL pool endpoint goes here",
    authentication: {
        type: "azure-active-directory-msi-app-service"
    },
    options: {
        encrypt: true,
        database: "pool name goes here",
        port: 1433
    }
}
var connection = new Connection(config);  

Это предполагает, что вы надлежащим образом назначили управляемые удостоверения в качестве внешних пользователей в пуле SQL. У меня также есть PR для этого изменения, которое вы можете отслеживать здесь

person Raunak Jhawar    schedule 06.04.2021