LoginSignup
2
0

More than 1 year has passed since last update.

ServerlessFrameworkでLambda + puppeteer

Last updated at Posted at 2021-12-14

Uzabase Advent Calendar 2021 15日目は @overgoro56 が担当します。

今年の夏くらいにブラウザ操作の作業で自動化したいことがあってLambda + puppeteerをServerlessFramework使って構築してみたので紹介します。

Lambda + puppeteer で気をつける点

Lambdaデプロイパッケージのサイズ制限とpuppeteerのサイズとの戦いです。
250MBの制限とコンソールエディタ3MBの制限に気をつけます。

Lambda クォータ の一部抜粋

50 MB (zip 圧縮済み、直接アップロード)
250 MB (解凍後)
このクォータは、レイヤーやカスタムランタイムなど、アップロードするすべてのファイルに適用されます。
3 MB (コンソールエディタ)

今回やったこと

puppeteerをChromeのバイナリなしで利用する

PuppeteerのChromeは容量が大きので使わない設定を行う

.npmrc
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=TRUE

puppeteer-core のインストールでやる方法でもよさそうですが、 PUPPETEER_DOWNLOAD_PATH の環境変数の設定が必要そうだったりしたので今回は上記を使用しました。

chrome-aws-lambda を使う

Lambda用に軽量化されたchromiumを使って容量削減します。
chrome-aws-lambda

Lambdaを軽量化し、コンソールでコード編集できるようにする

折角スクリプト言語でLambda書くんだから、簡単に編集してデバッグできるようにしておきたいです。

node_modulesはLambdaレイヤーに退避

serverless-layers のプラグインを導入します。

serverless.yml
custom:
    serverless-layers:
        functions: # optional
            - sampleHandler
        dependenciesPath: ./package.json
        layersDeploymentBucket: ${self:custom.envfile.environment.${self:provider.stage}.layersDeploymentBucket}

lambdaのコード以外をアップロードしないように除外する

以下のような形でソース以外除外する設定をします。
3MB制限に引っかかることは少ないかと思いますが念のため。

serverless.yml
package:
    patterns:
        - '!**'
        - src/**

serverless-prune-plugin を入れておく

デプロイするごとにLambdaの各バージョンのコードを保持するため、容量が大きくなることを防いでおきます。
以下は直近10バージョンを残す設定。

serverless.yml
custom:
    prune:
        automatic: true
        number: 10

最後に

短いですが、上記の点を気をつけるだけでLambda + puppeteerが簡単にできます。
さすがServerlessFrameworkといったところです。
ローカル実行も簡単にできちゃいます。

今回紹介した内容のサンプルコードを以下のレポジトリにアップしておきました。
環境ごとに変数を切り替える設定も入れてるので実運用に用いやすいと思います。
よかったら参考にしていただけると嬉しいです。
eslint入れてないなど気になるところはありますがご容赦ください。
https://github.com/overgoro56/serverless-lambda-puppeteer

2
0
0

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
2
0