С помощью @PeterPan мне удалось решить мою проблему, используя основанную на Docker функцию Azure с Кукольник .
Функция FunctionApp на основе Init Docker:
func init MyFunctionProj --docker
(выберите -> узел -> javascript)
Отредактируйте MyFunctionProj \ Dockerfile для использования estruyf / azure-function-node-puppeteer и fs:
FROM estruyf/azure-function-node-puppeteer
RUN npm i fs
COPY . /home/site/wwwroot
Добавить fs к зависимостям в MyFunctionProj \ package.json:
"dependencies": {
"fs": "0.0.1-security"
}
Создать функцию HttpTrigger:
cd MyFunctionProj
func new --name MyHttpTrigger --template "HttpTrigger"
Предоставить доступ к функции:
Установить "authLevel": "anonymous"
в MyFunctionProj \ MyHttpTrigger \ function.json (причину см. здесь .)
Создать файл MyFunctionProj \ MyHttpTrigger \ content.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>ContentHtml</title>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2019.2.514/js/kendo.all.min.js"></script>
</head>
<body>
<script>
$(document).ready(function() {
var myComputationResult = .... // use included scripts to perform computation
$("#resultData").html(JSON.stringify(myComputationResult));
});
</script>
<div id="resultData"></div>
</body>
</html>
Редактирование логики функций в MyFunctionProj \ MyHttpTrigger \ index.js (на основе this ):
const puppeteer = require('puppeteer');
const fs = require("fs");
module.exports = async (context, req) => {
const browser = await puppeteer.launch({
args: [
'--no-sandbox',
'--disable-setuid-sandbox'
]
});
var contentHtml = fs.readFileSync(__dirname + '//content.html', 'utf8');
const page = await browser.newPage();
await page.goto(`data:text/html,${contentHtml}`, { waitUntil: 'networkidle2' });
const resultData = await page.evaluate(() => document.querySelector('#resultData').innerHTML);
await browser.close();
context.res = {
// status: 200, /* Defaults to 200 */
body: `Result: ${resultData}`
};
};
Сборка образа докера:
docker build --tag <docker-id>/mydockerimage:v1.0.0 .
Запустить образ докера:
docker run -p 8080:80 -it <docker-ID>/mydockerimage:v1.0.0
Проверка локального изображения функции в браузере:
http://localhost:8080/api/MyHttpTrigger
Загрузка изображения в Docker Hub:
docker login --username <docker-id>
docker push <docker-id>/mydockerimage:v1.0.0
Создайте новую функцию Azure онлайн и используйте изображение из Docker Hub, как описано здесь .