首页 > 解决方案 > 在 Azure Functions 中共享 SFTP 连接

问题描述

我有一个将文件发送到 SFTP 服务器的天蓝色函数。它可能会被多次调用,因此为了节省连接到 SFTP 服务器的时间,我想重用 SFTP 连接。

const Client = require("ssh2-sftp-client");
const sftp = new Client();
let sftpConnected = false;

const sendToSFTP = async (data, location, context) => {

    await setConn(context)

    try{
        await sftp.put(data, location);
    }catch(err){
        context.log.error('sftp put error: ' + err);
    }
 }

const setConn  = async (context) => {
    if (sftpConnected) return

    try{
        await sftp.connect({
            host: 'myserver',
            username: 'user',
            passphrase: 'pwd',
        });
        sftpConnected = true;
    }catch(err){
        context.log.error('sftp connect error: ' + err);
    }  
 }

sftp.on('close', () => {
    sftpConnected = false;
    sftp.end();
});
sftp.on('end', () => {
    sftpConnected = false;
    sftp.end();
});

exports.sendToSFTP = sendToSFTP;

这在本地测试时有效,但在部署到 Azure 时,当 Azure 函数空闲时,似乎不会调用 close 和 end 侦听器。当我在一段时间后尝试使用 sftp 连接时,那里没有连接并且对 sftp 服务器的调用超时。

有没有人解决过这个问题?

标签: javascriptsshazure-functionssftp

解决方案


推荐阅读