理系学生日記

おまえはいつまで学生気分なのか

Serverless Frameworkで残り続けるLambdaのバージョン数を制限する

AWS Lambdaにおけるストレージのクォータ

AWS Lambdaにはバージョンという概念が存在しており、Lambda上で過去のバージョンを管理できます。 また、管理されるバージョンに対して、エイリアスも定義できます。

便利な機能であるため、Serverless FrameworkでデプロイされるLambda関数ではこのバージョンを常に保存し続けます。結果、大量のバージョンが残りつづけ、Lambdaのストレージを圧迫してしまいます。

AWS Lambdaにおけるクォータでは、ストレージ容量のデフォルトは75GBであり、これを超過するとエラーになってしまいます。

Serverless Frameworkにおける解決策

Serverless FrameworkにはServerless Prune Pluginが存在し、これを利用することでバージョン数を制限できます。 具体的には、過去n世代のバージョンを残し、それ以前のバージョンを自動的に削除可能です。

導入方法

まずは当該プラグインをインストールします。

$ npm install --save-dev serverless-prune-plugin

その上でserverless.ymlに対し、当該プラグインの利用を制限し、何世代までのバージョンを残すべきかを設定します。

diff --git a/serverless/serverless.yml b/serverless/serverless.yml
index 9d765ff..b9f43b0 100644
--- a/serverless/serverless.yml
+++ b/serverless/serverless.yml
@@ -84,3 +84,10 @@ functions:

 plugins:
   - serverless-esbuild
+  - serverless-prune-plugin
+
+custom:
+  # Lambda のバージョンは 5 世代まで保存
+  prune:
+    automatic: true
+    number: 5

こうしておけば、あとはsls deployを行う際に、自動的に不要となった関数バージョンを"prune"してくれます。管理が楽なので、重宝しています。

参考