To deploy Puppeteer in AWS Lambda we need to use a slim version of chromium, and layers.
Get the supported versions from this list.
npm install puppeteer-core@$PUPPETEER_VERSION
npm install @sparticuz/chromium@$CHROMIUM_VERSION
To configure puppeteer:
const browser = await puppeteer.launch({
args: chromium.args,
defaultViewport: chromium.defaultViewport,
executablePath: await chromium.executablePath(),
headless: chromium.headless,
ignoreHTTPSErrors: true,
});
Alternative option to render content:
await page.setContent(html);
const content = await page.$("body");
const imageBuffer = await content.screenshot({ omitBackground: true });
Send image to S3:
const s3File = await s3.putObject({
bucket: "<Your Bucket Name Here>",
key: `${screenshot}.png`,
body: imageBuffer,
contentType: "image/png",
});
How to setup an S3 bucket and access from the lambda function here. Create a layer.
Golang browser drivers and more: