DEV Community

Kaibalya Kar
Kaibalya Kar

Posted on

🚀 How to Install Chromium for Puppeteer on AWS (EC2 or Lambda)

🧠 Why This Happens

AWS environments (like Amazon Linux 2 on EC2 or Lambda) don’t come with Chromium installed by default. Also, the headless version Puppeteer tries to download is often incompatible with AWS's OS.

To make Puppeteer work, you need:

  1. A compatible headless Chromium binary.

  2. Proper dependencies installed (fonts, sandbox libs, etc.).

  3. The right launch options.

🧠 Why This Happens

AWS environments (like Amazon Linux 2 on EC2 or Lambda) don’t come with Chromium installed by default. Also, the headless version Puppeteer tries to download is often incompatible with AWS's OS.

To make Puppeteer work, you need:

  1. A compatible headless Chromium binary.

  2. Proper dependencies installed (fonts, sandbox libs, etc.).

  3. The right launch options.

sudo yum update -y

# Install missing libraries
sudo yum install -y \
  atk.x86_64 \
  cups-libs.x86_64 \
  gtk3.x86_64 \
  libXcomposite.x86_64 \
  libXcursor.x86_64 \
  libXdamage.x86_64 \
  libXext.x86_64 \
  libXi.x86_64 \
  libXrandr.x86_64 \
  libXss.x86_64 \
  libXtst.x86_64 \
  pango.x86_64 \
  alsa-lib.x86_64 \
  ipa-gothic-fonts \
  xorg-x11-fonts-100dpi \
  xorg-x11-fonts-75dpi \
  xorg-x11-utils \
  xorg-x11-fonts-cyrillic \
  xorg-x11-fonts-Type1 \
  xorg-x11-fonts-misc \
  wget
Enter fullscreen mode Exit fullscreen mode

✅ Step 2: Download a Compatible Chromium Binary

cd ~
mkdir chromium && cd chromium

wget https://github.com/Sparticuz/chromium/releases/download/v123.0.0/chromium.br
# OR another known working build for Amazon Linux

# Decompress
brew install brotli # if needed
brotli --decompress chromium.br
chmod +x chromium

Enter fullscreen mode Exit fullscreen mode

✅ Step 3: Point Puppeteer to This Chromium

Now in your Node.js code:

import puppeteer from 'puppeteer-core';

const browser = await puppeteer.launch({
  executablePath: '/home/ec2-user/chromium/chromium',
  headless: true,
  args: [
    '--no-sandbox',
    '--disable-setuid-sandbox',
  ],
});
Enter fullscreen mode Exit fullscreen mode

☁️ Bonus: Using Puppeteer with Chromium in AWS Lambda?

Use chrome-aws-lambda:

npm install puppeteer-core chrome-aws-lambda

Then:

import chromium from 'chrome-aws-lambda';
import puppeteer from 'puppeteer-core';

export const handler = async () => {
  const browser = await puppeteer.launch({
    args: chromium.args,
    defaultViewport: chromium.defaultViewport,
    executablePath: await chromium.executablePath,
    headless: chromium.headless,
  });

  const page = await browser.newPage();
  await page.goto('https://example.com');
  const screenshot = await page.screenshot();

  await browser.close();

  return screenshot;
};
Enter fullscreen mode Exit fullscreen mode

🧪 Test It

After setup:

node yourScript.js
Enter fullscreen mode Exit fullscreen mode

✅ If all goes well, Chromium should launch and Puppeteer will work as expected!


✅ Summary

Task Done

Install system dependencies ✅
Download compatible Chromium ✅
Launch Puppeteer with custom binary ✅

Running Puppeteer on AWS isn’t plug and play and but once Chromium is correctly installed and referenced, everything runs smoothly.

Top comments (0)