fourside.github.io

aws-cdk の aws-lambda-nodejs で puppeteer を動かす

2020/09/07 04:30:00 +00:00

  • 作ったものはこれ
    • fourside/meigaza
      • 映画の情報をスクレイプして、 Slack や IFTTT 経由 でモバイル通知する Lambda Function
    • aws-cdk で Lambda とその周辺の リソースを定義した

aws-cdk

  • AWSのリソースをコードで表現できるフレームワーク
  • TypeScript で書ける
    • コード補完が効いてうれしい
    • パーミッションなどデフォで設定されるので細々定義しなくてよい
    • CloudFormation で yaml 書くのはつらかった…
  • What is the AWS CDK? - AWS Cloud Development Kit (AWS CDK)
    • Getting started とか読んだ
  • aws-lambda-nodejs module が便利
    • まだ experimental な状態で、さらに semver を採用してない
    • Lambda のソースコードが TypeScript で書ける
    • aws-lambda module だと、CDK 部分は ts、Lambda 本体は common js になって、eslint しにくかったりコンテキストスイッチが発生したりで体験がよくない(eslint はディレクトリ毎に設定ファイルを置いても vs code が認識してくれなかった)
      • なので experimental でも使う…

puppeteer を動かす

aws-lambda-nodejs でローカルでビルドするときのコツ

  • aws-lambda-nodejs - Local bundling
    • parcel を install してると、バンドル時にそれを使ってくれる
    • そうでなければ Docker が使われる
  • Lambda を複数定義するときは、parcelのキャッシュディレクトリは分ける
  • Layerに含める npm モジュールをバンドルしないようにする
    • externalModules オプションに指定した npm は、parcel の targetsincludeNodeModules オプションに追加される

misc

  • cdk synth, cdk deploy 中は、package.json が汚れる
    • Ctrl-Cなどで中断すると残ってしまう
    • 具体的には parcel のビルドターゲット
      • includeNodeModules には {npmName}: false という形で設定される
      • parcelのドキュメントに記載されてない形なので、正しく動かないのではと思ってしまったけど、そんなことはなかった
      • 現状、externalModulesnodeModules どちらに指定しても結果は同じ
  • WSLでWindows側のディレクトリを使ってビルドすると遅い
    • WSL側のファイルシステムを使う
    • vs code は wsl extension を使う

fourside

Written by fourside