今まで https://github.com/JupiterOne/playwright-aws-lambda を使わせてもらっていたのですが、コードを更新すると急に動かなくなってしまい https://github.com/Sparticuz/chromium に乗り換えたので導入メモです。
ほとんどREADMEに記載の通りです。
npm init
npm install --save playwright-core
npm install --save-dev @sparticuz/chromium
- node_modulesフォルダをzip化
- 50MBを超えるのでS3にアップ
- Lambdaのレイヤーを作成
- 先ほどS3にアップしたzipのURLを指定
- x86_64とNode.js 18.xを指定
- Lambdaの関数を作成
- 先ほど作成したカスタムレイヤーを追加
- 設定→一般設定からメモリを2000MB程度、タイムアウトを2分程度に増やす
- コードソースのindex.mjsをindex.jsに変更して中身を書き換え
- DeployとTestを実行してページタイトルが表示されたら完了
const { chromium: playwright } = require('/opt/node_modules/playwright-core');
const chromium = require('/opt/node_modules/@sparticuz/chromium');
chromium.setHeadlessMode = true;
exports.handler = async (event) => {
const browser = await playwright.launch({
args: chromium.args,
executablePath: await chromium.executablePath(),
headless: chromium.headless,
});
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
const pageTitle = await page.title();
await browser.close();
console.log(pageTitle)
}
ちなみに、以前の環境で出ていたエラーログは以下でした。
page.goto: Target page, context or browser has been closed