#aws-lambda #puppeteer #netlify
#aws-lambda #puppeteer #netlify
Вопрос:
Я пытаюсь использовать Puppeteer в функции в Netlify (я думаю, оболочка вокруг AWS Lambda). Функция выполняется, но при посещении URL-адреса я получаю эту ошибку: «Ошибка: версия Chromium не загружена. Запустите «npm install» или «yarn install»»
Я не уверен, в чем проблема, но если я запускаю функцию локально с node index.js
, она запускается без проблем.
Функция:
const puppeteer = require('puppeteer');
let browser;
let page;
exports.handler = async function(event, context, callback) {
await setup();
await snap('http://example.org', 'file.png');
browser.close();
console.log('Done!');
return {
statusCode: 200,
body: 'OK',
};
};
async function setup() {
browser = await puppeteer.launch({headless: true});
page = await browser.newPage();
await page.setViewport({ width: 1024, height: 512 });
}
async function snap(url, file) {
try {
console.log('snapping :', url);
await page.goto(url);
await page.screenshot({ path: file, type: 'png' });
console.log('snapped :', file);
}
catch (err) {
console.log('err :', err);
}
}
Комментарии:
1. В вашей функции netlify puppeteer пытается загрузить Chrome; но вы не можете загружать такие большие вещи на aws lambda, вам нужно собрать версию без заголовка и загрузить ее вместе с вашим пакетом.
2. Спасибо за ваш ответ, есть ли у вас какие-либо ресурсы для этого?
Ответ №1:
Функции Netlify действительно поддерживаются AWS Lambda и подпадают под ограничения AWS Lambda. Размер пакета развертывания ограничен 50 МБ (архивированный), что ниже, чем требуется для Puppeteer.
Тем не менее, как упоминалось на странице устранения неполадок в Puppeteer GitHub, доступны обходные пути. Вы могли бы, например, использовать этот двоичный файл Chromium:https://github.com/alixaxel/chrome-aws-lambda.