🧠 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:
A compatible headless Chromium binary.
Proper dependencies installed (fonts, sandbox libs, etc.).
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:
A compatible headless Chromium binary.
Proper dependencies installed (fonts, sandbox libs, etc.).
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
✅ 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
✅ 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', ], });
☁️ 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; };
🧪 Test It
After setup:
node yourScript.js
✅ 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)