serverless-python-requirements の slim オプションを有効化するときの注意点

記事タイトルとURLをコピーする

要約

serverless-python-requirements で設定値を変更した後は

$ serverless requirements cleanCache

を実行しておかないと変更が反映されないときがある。

そして、プロファイルごとに実行しよう。

はじめに

こんにちは。アプリケーションサービス部の保田(ほだ)です。 気が付けば前回の投稿から丸一年経っていました。恐ろしいですね。

前提

Lambda の Python ランタイムに含まれない外部ライブラリも一緒に Serverless Framework でデプロイする際に、プラグイン serverless-python-requirements を使うのは定番だと思います。

このプラグインですが、何もしないと __pycache__ ディレクトリもいっしょにパッケージングしてしまうようです。 ライブラリをある程度の量使っていると、この __pycache__ のサイズもバカにならないケースがあります。

そんなときに有効なのが slim オプションです。

custom:
  pythonRequirements:
    slim: true # これ。デフォルトは false

これを書いておくだけで __pycache__ を全て除去した形で zip 化してくれますので、デプロイパッケージを削減することができます。嬉しいですね。

本題

このあたりの設定、どうやら実行端末にキャッシュされるみたいです。

そのため「容量オーバーしちゃった」→「slim オプションなるものがあるらしい!使ってみよう!」といった途中から導入するケースだと、有効にしたはずなのに挙動が変わらないといった事象が起きます。

冒頭にも紹介した通り、このコマンドを実行しましょう。

$ serverless requirements cleanCache

複数の AWS プロファイルを利用している場合は、プロファイルごとに実行しましょう。

$ serverless requirements cleanCache --aws-profile dev-profile
# 別々に実行しないといけない
$ serverless requirements cleanCache --aws-profile prd-profile

真っ先に思いつくのは一度ローカル環境にある zip ファイルを削除するトラシュ方法かと思いますが、この設定側のキャッシュを消さない限り __pycache__ は残り続けます。

保田 和馬 (記事一覧)

アプリケーションサービス部

ボールペンで字を書くことがあります。(書かないこともある)