Azure. Как проверить входящий большой двоичный файл / файл, прежде чем он попадет в хранилище больших двоичных объектов? - PullRequest
0 голосов
/ 10 апреля 2019

В настоящее время я работаю над созданием функции сканирования на вирусы.

Что я пытаюсь сделать: когда файл загружается в указанный контейнер хранения больших двоичных объектов, запускается функция Azure.Эта функция сканирует файл на наличие вирусов и, если он очищен, перемещает файл в другой контейнер для хранения больших двоичных объектов.

Я создал функцию Azure, которая запускается при создании большого двоичного объекта (т. Е. При загрузке файла), но я не могу понять, как интегрировать сканирование вирусов в смесь.

Я пытался использовать ClamAV.js , но не смог заставить его работать.Я не уверен, как установить ClamAV (демон), чтобы он мог использоваться функцией Azure, что, вероятно, способствовало тому, что он не работал.Кроме того, я не уверен, как установить пакеты npm (в функции Azure), поэтому мне пришлось загрузить сам файл js из пакета в функцию, а затем импортировать его.Не уверен, что это даже верно ...

Я пытался использовать AttachmentScanner , но я не мог заставить это работать в рамках функции Azure (точнее, я не мог получить функциюотправить запрос POST).

Одна серьезная проблема, с которой я сталкиваюсь, я не думаю, что могу обойти: как использовать пакеты npm в функции Azure?Могу ли я npm установить их где-нибудь?Могу ли я просто загрузить пакет и вручную загрузить файл js в функцию Azure и импортировать его таким образом?

Вот моя попытка использования AttachmentScanner:

module.exports = async function (context, myBlob) {
    var req = new XMLHttpRequest();
    req.open( "POST", "https://beta.attachmentscanner.com/requests", false );

    req.headers({
        "authorization": "bearer [OMITTED]",
        "content-type": "application/json"
    });

    req.type("json");
    req.send({
        "url": context.bindingData.uri //"http://www.attachmentscanner.com/eicar.com"
    });

    req.end(function (res) {
        if (res.error) throw new Error(res.error);

        context.log(req.responseText);
    });

    context.log("JavaScript blob trigger function processed blob \n Name:", context.bindingData.name, "\n Blob Size:", myBlob.length, "Bytes");
    context.log("context");
    context.log(context);
    context.log("myBlob");
    context.log(myBlob);
};

, приводящая к ошибке:Exception: ReferenceError: XMLHttpRequest is not defined

С помощью следующей функции я могу обнаружить большой двоичный объект и распечатать информацию о нем:

module.exports = async function (context, myBlob) {    
    context.log("JavaScript blob trigger function processed blob \n Name:", context.bindingData.name, "\n Blob Size:", myBlob.length, "Bytes");
    context.log("context");
    context.log(context);
    context.log();
    context.log("myBlob");
    context.log(myBlob);
};

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 12 апреля 2019

Прежде всего, я уверен, что вы не можете установить ClamAV в функции Azure, поэтому для его установки необходимо создать виртуальную машину Linux.

Далее вы можете выполнить официальные руководства по быстрому запуску, например, Код Visual Studio , Azure CLI , Python или Linux для установки Базовый инструмент функций Azure в вашей локальной среде для Windows или Linux, чтобы создать проект func для Node.js и опубликовать его в Azure.

Наконец, вот мои собственные мысли о ваших потребностях. Вы можете попробовать использовать функцию Azure с Blob Trigger, чтобы сгенерировать URL-адрес с токеном sas для большого двоичного объекта, который необходимо отсканировать. Существует пример кода Node.js Azure Function for generating SAS tokens, на который вы ссылаетесь, чтобы знать, как это сделать. А затем передать URL-адрес большого двоичного объекта с токеном sas в ClamAV в виртуальной машине через сервер Node.js с ClamAV.js для сканирования его с помощью потока HTTP.

Конечно, вы можете интегрировать ClamAV.js с функциями Azure, но я думаю, что сканирование большого файла в течение длительного времени не является хорошей идеей для архитектуры без сервера, такой как функции Azure. Надеюсь, это поможет.

...