なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

AWS LambdaでLayer機能を使う

Layers

AWSのドキュメント AWS Lambda レイヤー - AWS Lambda

AWSのLayersを使うと、Pythonの依存ライブラリなどを設定し共通ライブラリとして使える。(AWS Lambdaのソースコード容量制限は厳しいので、これを使うのが正しいだろう)

AWS Lambdaのデプロイパッケージサイズ上限は

  • 50 MB (圧縮)
  • 250 MB (解凍、例: レイヤー)
  • 3 MB (コンソールエディタ)

参考にしたサイト

もともとpandasを使いたかったので助かった。 注意点としてはpipで依存ライブラリを保存するディレクトリが'python'で始めないといけない点だろう。

デプロイ自動化

  • 開発を進めるとrequirements.txtのライブラリが追加されると思います
  • これがあるたびに手動でzip化を行うのは非効率
  • なのでEC2上のJankinsで pip install -r requiements.txt → zip化 → boto3でpublish のようなことをやっています

Layer用のzipファイルを作る際には標準ライブラリのshutilを使うと楽だった。python - How to create a zip archive of a directory - Stack Overflow

$ pip install -r requiements.txt -t ./python

のようにpythonディレクトリ以下にライブラリを出力して、それを包含するzipファイルをshutilでやればOK。