Fonctions Azure: Nodejs, Que sont les ressortingctions / limitations lors de l’utilisation d’un système de fichiers?

Je n’ai pas réussi à faire fonctionner une fonction azure utilisant le module de système de fichiers du noeud.

J’ai créé une toute nouvelle application fonctionnelle avec la fonction de déclenchement HTTP la plus élémentaire et inclus le module ‘fs’:

var fs = require('fs'); module.exports = function (context, req, res) { context.log('function sortingggered'); context.log(req); context.done(); } 

Cela fonctionne bien. Je vois la demande complète dans les journaux de diffusion en direct et dans la liste d’appel de fonctions.

Cependant, dès que j’ajoute le code qui utilise réellement le système de fichiers, il semble que la fonction azuree se bloque. Il ne termine ni ne jette l’erreur. Cela ne semble pas non plus apparaître dans la liste des invocations de fonctions azure, ce qui est effrayant car il s’agit d’une perte d’informations en cas de défaillance et je pourrais penser que mon service fonctionnait correctement en cas de plantage.

 var fs = require('fs'); module.exports = function (context, req, res) { context.log('function sortingggered'); context.log(req); fs.writeFile('message.txt', 'Hello Node.js', (err) => { if (err) throw err; console.log('It\'s saved!'); context.done(); }); } 

Le code fs.writeFile extrait directement du site Web node.js: https://nodejs.org/dist/latest-v4.x/docs/api/fs.html#fs_fs_writefile_file_data_options_callback

J’ai ajouté le context.done() dans le rappel, mais cet extrait devrait fonctionner sans problème dans l’environnement de développement normal.

Cela soulève les questions:

  • Est-il possible d’utiliser le système de fichiers lorsque vous utilisez Azure Functions?
  • Si oui, quelles sont les ressortingctions?
  • S’il n’y a pas de ressortingctions, les développeurs doivent-ils garder trace et effectuer le nettoyage ou est-ce que cela est pris en charge par un sandboxing?

À ma connaissance, même si cela est considéré comme une informatique sans serveur, il existe toujours un service d’application de site Web VM / Azure doté d’un système de fichiers. Je peux utiliser la console Kudu pour naviguer et voir tous les fichiers de / wwwroot et les fichiers / home / functions / secrets.

Imaginons un scénario dans lequel une fonction azuree est écrite pour écrire un fichier avec un nom unique sans effectuer de nettoyage. Elle utilisera finalement tout l’espace disque de la machine virtuelle hôte et dégradera les performances. Cela pourrait arriver accidentellement à un développeur et éventuellement passer inaperçu jusqu’à ce qu’il soit trop tard.

Cela me fait me demander si, naturellement, le système de fichiers n’est pas utilisé ou si ma fonction est simplement mal écrite?

Oui, vous pouvez utiliser le système de fichiers, avec les ressortingctions décrites ici . Cette page décrit certains répertoires auxquels vous pouvez accéder, tels que D: \ HOME et D: \ LOCAL \ TEMP . J’ai modifié votre code ci-dessous pour écrire dans le répertoire temp et cela fonctionne:

 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(); }); } 

Votre code initial échouait car il essayait d’écrire dans D: \ Windows \ system32, ce qui n’est pas autorisé.