LoginSignup
87
56

More than 3 years have passed since last update.

AWS LambdaでPuppeteerを動かす

Last updated at Posted at 2019-02-25

はじめに

AWS LambdaでPuppeteerを動かすためのメモです。
npm の @serverless-chrome/lambda と chrome-remote-interface を使用した例はいくつかありますが、開発停止の影響のためか、一部のPuppeteer APIが動作しなかったので、chrome-aws-lambda パッケージを使用します。

環境

  • AWS Lambda
    • ランタイム:Node.js 8.10
  • ローカル
    • macOS Mojave(10.14.3)
    • npm 6.8.0

手順

Lambda Layerに登録するパッケージの作成

$ mkdir nodejs && cd $_
$ npm i chrome-aws-lambda puppeteer-core
$ cd ..
$ zip -r modules.zip nodejs

Lambda Layer登録

AWSのコンソールからLambdaを開く。

Layer設定画面を開く

スクリーンショット_2019-02-25_13_41_43.png

Layerの作成

スクリーンショット_2019-02-25_13_46_37.png

Layerのアップロード

  • 名前: 任意のLayer名
  • 説明: 任意の説明文
  • コードエントリタイプ: .zipファイルをアップロード
  • アップロード: 作成したzipファイルを選択
  • 互換性のあるランタイム: Node.js 8.10
  • 「作成」をクリック スクリーンショット 2019-02-25 13.52.25.png

Lambda関数の作成

関数設定画面を開く

スクリーンショット_2019-02-25_21_09_18.png

関数の作成

スクリーンショット_2019-02-25_21_13_08.png
スクリーンショット 2019-02-25 21.19.02.png

  • 名前: 任意の関数名
  • ランタイム: Node.js 8.10
  • ロール: 1つ以上のテンプレートから新しいロールを作成
  • ロール名: 任意のロール名
  • ポリシーテンプレート: 未選択で可
  • 「関数の作成」をクリック

Layerの追加

スクリーンショット_2019-02-25_21_22_48.png
スクリーンショット 2019-02-25 21.26.59.png

  • ランタイムと互換性のあるレイヤーのリストから選択
  • レイヤー: 登録したLayer名を選択
  • バージョン: 登録したLayerの任意のバージョンを選択
  • 「追加」をクリック

関数コードを作成

スクリーンショット_2019-02-25_21_41_57.png

node.js
const chromium = require('chrome-aws-lambda');
const puppeteer = require('puppeteer-core');

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

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

    let page = await browser.newPage();

    await page.goto(event.url || 'https://yahoo.co.jp/');

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

  return context.succeed(result);
};

基本設定を調整

スクリーンショット 2019-02-25 21.45.06.png

  • メモリ: 512MB〜1600MB(chrome-aws-lambdaパッケージ推奨値)
  • タイムアウト:任意の時間

保存および実行

スクリーンショット_2019-02-25_21_53_40.png
スクリーンショット 2019-02-25 21.57.34.png

  • イベントテンプレート: Hello World
  • イベント名: 任意のイベント名
  • 「作成」をクリック

再度、画面右上テストをクリック

実行結果

スクリーンショット_2019-02-25_22_00_44.png

まとめ

ブラウザ操作を自動化できるPuppeteerをLambdaで動かせると、API Gateway(API化)やCloudWatch Events(定期バッチ処理)など、他のAWSサービスとの連携が容易になります。
ただでさえ便利なPuppeteerがさらに便利になるので、よければ試してみてください。

参考

87
56
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
87
56