仕事で用いているAWSアカウントでLambdaのストレージが上限いっぱいとなった。
既に上限緩和申請しているが、これでは、この後の作業に支障が出るので対応していく。
原因としては、一つ一つのLambdaのバージョン管理だけでも相当なストレージを圧迫しているようで、バージョンを削除するものとした。
バージョンは削除したが、今後もdeployするたびに増え続けていってしまうので、今回はLambdaのバージョン管理を停止する。
原因と対策
今回は、ストレージが上限達成していることで、以降のlambdaの更新ができなくなってしまった。
ストレージを圧迫の対策としては、不要なものは消していくことも重要になると思うが、今回はまず、無駄に溜まっているLambdaのバージョン管理を削除するものとした。
バックエンドの構成には、serverlessFrameworkを利用していているが、デフォルト設定の場合、バージョン管理機能がtrueとなっている。
デプロイするたびに、過去のバージョンが残り続けるので、多いものはこのように100を超えるバージョンがいくつものLambdaで作られてしまっていた。
バージョン管理自体は、確かにありがたいが、ServerlessFramework利用することでプロジェクト自体はgit管理できているし、特段不要ではないのだろうか。
とりあえず、現行で作成されているバージョンは手動削除した。
今後、バージョンが作られないように、バージョン管理をOFFにする設定を加えていく
バージョン管理を併用することも可能
今回は、バージョン管理不要としたけど、servelessFrameworkのプラグインに最新何件のバージョンのみ保持するといった自動削除機能を有するプラグインがあるようだ。
バージョンを残したい場合は、このプラグインを利用してもいいかもしれない。
ServerlessFrameworkの設定変更
さて、対策実践編に話を戻す。
と言っても、やることは非常に単純で、ServerlessFrameworkの構成ファイルにバージョン管理する設定versionFunctionsをfalse設定するだけであった
serverless.yamlの更新
serverless.yamlが構成ファイルでルートディレクトリ直下にある。
これに設定を追加するだけで簡単に設定できた。
yamlで記載されているので、インデントだけには注意が必要であるが、特段悩むことはなかった。
providerの項目内に、versionFunctionsオプションを記載して、falseとするだけである。
frameworkVersion: '3'
provider:
name: aws
runtime: python3.9
region: ${opt:region, "ap-northeast-1"}
iamRoleStatements:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
- lambda:InvokeFunction
- s3:PutObject
- s3:GetObject
Resource: '*'
stackTags:
Author: "Autor-name"
versionFunctions: false // ここを追加するだけ
すでに作られたバージョンは頑張って消す
ただ、この設定だけでは、すでに作られているバージョンは、消すことができないので、手動で削除していく必要がある。
Lambdaのバージョン管理からバージョンを一つ一つ選択して、削除していくことになる(複数選択ができない)ので、数が少なければ手作業で頑張ってしまってもいいかもしれない。
今回は、手作業でやるより、UbuntuでCLI使って消した方がまだマシかと思い、バッシュを作成はした。
さすがに汎用的なものにはなっていないので、ここには掲載しないが100程度であれば手動で消した方が、確実だし安全な気がします。
おわりに
何も意識せず、serverlessFramework利用していたら、ある日突然えらいことになっていた!!
課金もほぼされてないし、問題ないだろうとLambdaを乱発していたが、まさかの落とし罠だった。
やっぱ、ストレージの監視も必要になって来るんだな。
コメント