LoginSignup
0
0

Lambda関数の古いバージョンを一括削除するスクリプト

Posted at

背景

 AWSのSAMテンプレートを利用しており、AutoPublishAliasプロパティを使い、Lambda関数にエイリアスとバージョンを設定しています。この場合、関数を更新するたびに新しいバージョンが作られるため、これを何度も繰り返した場合、気づかないうちにLambdaのストレージの制限である75GBを超えてしまう恐れがあります。
 現状、SAMのプロパティに古いバージョンのLambdaを削除するような設定は無く、Issuesを見る限り今後も実装されなさそうであるため、独自で古いバージョンのLambdaの削除を行う必要があります。
 今回は、問題が発生した場合にすぐに戻せるよう、最新から数バージョンは残しておきつつ、それ以前の古いバージョンは削除するようなスクリプトを作成しました。

スクリプト

delete-lambda-old-version.sh
#! /bin/bash
# 古いバージョンのLambdaを削除する
#   第一引数:Lambda関数名
#   第二引数:残すバージョン数

aws lambda list-versions-by-function --function-name $1 | \
jq -r '.Versions[] | select(.Version != "$LATEST") | .Version' | \
sort -V | head -n -$2 | \
xargs -I{} aws lambda delete-function --function-name $1 --qualifier {}

仕掛けとしては、list-versions-by-functionで当該Lambda関数のバージョンを取得し、jqで整形しつつ$LATESTを除き昇順でバージョンをリスト化し、第二引数で指定した分だけバージョンをリストから除外し、最後にそのリストを使ってdelete-functionしています。
(※ご利用は自己責任でお願いします)

呼び出し例

# Lambda関数test-funcを最新10バージョン残し、残りを削除する
sh delete-lambda-old-version.sh test-func 10
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0