😇

【5分で動く】AWS LambdaでPuppeteer【100%確実に】

2023/06/13に公開

筆者のつぶやき

Lambdaでスクレイピングがしたいだけなのに、、、
どうして人はターミナルとS3とレイヤとLambdaの往復で3時間も溶かしてしまうのか?
どうせみんなやってることは同じなのに。。。どうして。。。?
迷える子羊を輪廻から解き放つために書いた備忘録です。
5分でlambdaでスクレイピングが始められるはずです。
だめだったらごめんなさいm(_ _)m

以下の設定のLambda関数を用意する

・Node.js 14.x にする
・メモリを512MB以上に設定する
・タイムアウトを1分に設定する

使用するLambda関数にレイヤを追加

@sparticuz/chrome-aws-lambdaをLambdaレイヤを公開しているリソースがある。
https://github.com/shelfio/chrome-aws-lambda-layer
Lambda関数画面の最下部のAdd Layerにて、
以下のARNを指定してLambdaにレイヤを追加する

arn:aws:lambda:ap-northeast-1:764866452798:layer:chrome-aws-lambda:31

以下のコードを実行

const chromium = require('@sparticuz/chrome-aws-lambda');

exports.handler = async (event, context, callback) => {
  let result = null;
  let browser = null;

  try {
    browser = await chromium.puppeteer.launch({
      args: chromium.args,
      defaultViewport: chromium.defaultViewport,
      executablePath: await chromium.executablePath,
      headless: chromium.headless,
      ignoreHTTPSErrors: true,
    });

    let page = await browser.newPage();

    await page.goto(event.url || 'https://example.com');

    result = await page.title();
  } catch (error) {
    return callback(error);
  } finally {
    if (browser !== null) {
      await browser.close();
    }
  }

  return callback(null, result);
};

最後に

救われましたか?
失ったはずだった貴重な時間を守れたでしょうか...?
もしそうならば私を神と崇めなくていいので、❤いいねを押してくれると喜びます...!

Discussion