Azure功能:Nodejs,使用文件系统时有哪些限制/限制?

Mat*_*ola 4 azure node.js azure-functions

我无法使用节点文件系统模块的azure函数工作.

我创建了一个全新的功能应用程序,具有最基本的HTTP触发功能,并包含'fs'模块:

var fs = require('fs');

module.exports = function (context, req, res) {
    context.log('function triggered');
    context.log(req);

    context.done();
}
Run Code Online (Sandbox Code Playgroud)

这很好用.我在实时流日志和函数调用列表中看到了完整的请求.

但是,只要我添加实际使用文件系统的代码,它就会崩溃 azure函数. 它既不会完成也不会抛出错误.它似乎也没有出现在天蓝色的函数调用列表中,这是可怕的,因为这是失败信息的丢失,我可能认为我的服务在实际崩溃时运行正常.

var fs = require('fs');

module.exports = function (context, req, res) {
    context.log('function triggered');
    context.log(req);

    fs.writeFile('message.txt', 'Hello Node.js', (err) => {
        if (err) throw err;
        console.log('It\'s saved!');
        context.done();
    });
}
Run Code Online (Sandbox Code Playgroud)

fs.writeFile直接从node.js的网站采取代码: https://nodejs.org/dist/latest-v4.x/docs/api/fs.html#fs_fs_writefile_file_data_options_callback

context.done()在回调中添加了该代码,但该代码段在正常开发环境中应该没有问题.

这提出了一些问题:

  • 使用Azure功能时是否可以使用文件系统?
  • 如果是这样,有什么限制?
  • 如果没有限制,开发人员是否需要跟踪并执行清理,或者是否通过一些沙盒来处理?

根据我的理解,即使这被认为是无服务器计算,仍然有一个VM/Azure网站应用服务,其下面有一个文件系统.我可以使用Kudu控制台并导航并查看/ wwwroot和/ home/functions/secrets文件中的所有文件.

想象一下这样一种场景,即编写azure函数来编写具有唯一名称的文件而不执行清理,最终会占用主机VM上的所有磁盘空间并降低性能.这可能是由开发人员意外发生的,并且可能会被忽视,直到为时已晚.

这让我想知道是不是设计不使用文件系统,或者我的函数是否写错了?

mat*_*ewc 10

是的,你可以使用文件系统,具有一定的限制,描述在这里.该页面描述了一些您可以访问的目录,如D:\ HOMED:\ LOCAL\TEMP.我已修改下面的代码以写入临时目录,它可以工作:

var fs = require('fs');

 module.exports = function (context, input) {
    fs.writeFile('D:/local/Temp/message.txt', input, (err) => {
    if (err) {
        context.log(err);
        throw err;
    }
    context.log('It\'s saved!');
        context.done();
    });
}
Run Code Online (Sandbox Code Playgroud)

您的初始代码失败,因为它试图写入D:\ Windows\system32,这是不允许的.