Serverless Frameworkのデプロイ用S3バケットの設定
Serverless Frameworkでデプロイすると、デプロイ用のS3バケットが勝手に作成されます。勝手な作成を抑制する設定のメモです。
Serverless FrameworkはCloudFormationのテンプレートやLambdaに使うソースコードをS3バケットに保存してデプロイ処理します。バケット名は、「サービス名-ステージ名-英数字12文字」という名前になり、サービスやステージごとに作成されてしまいます。
バケットの中は「serverlss/サービス名/ステージ名/デプロイ日時/」というフォルダの中にjsonやzipファイルが置かれます。したがってServerless Framework用のバケットを1つ用意して、それを複数のサービスやステージで共有しても衝突はしません。
デプロイ用S3バケットの指定
バケット名を serverless.yml
に以下のように書けばよいです。
provider: deploymentBucket: name: FOOBAR_DEPLOYMENT_BUCKET
このようにバケット名を明示的に指定した場合は、バケット自動作成されませんので、バケットがない場合は「Could not locate deployment bucket. Error: The specified bucket does not exist」というエラーになります。事前に自分で作成が必要です。
バケット作成のコマンドの例
$ aws s3 mb s3://FOOBAR_DEPLOYMENT_BUCKET
maxPreviousDeploymentArtifacts の設定
デプロイ用S3には最大で過去5回のデプロイのファイルが保存されます。それより古いデプロイファイルは自動で削除されます。
この5回という値を変更するには serverless.yml
に以下のように書きます。
provider: deploymentBucket: name: FOOBAR_DEPLOYMENT_BUCKET maxPreviousDeploymentArtifacts: 3 # デプロイ用S3バケットには最大で3世代のみ保存
versionFunctions の設定
上記と紛らわしくて私は最初混乱したのですが versionFunctions
という設定があります。
versionFunctions
は、デプロイ用S3バケットとは関係なく、Lambda自体のバージョニングをするかどうかの設定です。 versionFunctions
を true
にすると下のスクショにあるVersionsのところのバージョン番号が進んでいきます。false
にすると、バージョン番号が進まず $LATEST
のみが更新されるようです。デフォルトは true
です。
serverless-prune-plugin プラグイン
versionFunctions
を true
にしてLambdaのバージョニングをする場合、古いバージョンが残り続けてしまいます。古いバージョンのLambdaは上記デプロイ用S3バケットとは別のLambda用のS3バケットに保存されてますので、場合によってはS3の容量を消費します。
古いバージョンを自動で削除させるには serverless-prune-plugin
プラグインを導入します。
$ serverless plugin install -n serverless-prune-plugin
インストールすると serverless.yml
に以下の記述が追記されます。
plugins: - serverless-prune-plugin
このプラグイン指定のほかに以下のような記述を追加すると、Lambdaの古いバージョンを自動で削除してくれるようになります。
custom: prune: automatic: true number: 3 # 最大で3バージョンを保存
リンク
ドキュメント
Serverless Frameworkに関する私の記事