Запустить puppeteer в Netlify Lambda

#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.