😆
S3のコストを圧迫する大量の旧バージョンオブジェクト削除する
はじめに:S3のコスト高
気がつくと、S3のコストが増加していました。不要なファイルは削除したはずなの、ペットボトルのジュースが購入できるぐらいの利用料がかかっています。個人開発だとやたらとコストにシビアになり、これぐらいの金額でも気になるのです。
原因:削除したはずのオブジェクトが残ってた
AWS S3は非常に便利なストレージサービスです。一方、運用を続けていると意図しないコスト増に悩まされることがあります。その原因の1つが、オブジェクトバージョニングによって溜まった大量の古いバージョンのオブジェクトです。
特に、AWSのSAM CLIが自動生成するaws-sam-cli-managed-default-samclisourcebucket-xxxxのようなバケットが問題です。デフォルトの設定では古いバージョンを残すようになっています。デプロイのたびに新しいテンプレートがアップロードされ、古いバージョンがどんどん蓄積していきます。
しかし、めねじ麺とコンソールからは手動で削除することはできないんです。(もしかしたら、やり方があるのかもです。)
まずは現状確認
どれくらい溜まっているか確認します。下の画像はS3にたまっているファイルです。
約16GBぐらいあることがわかります。また、オブジェクトは5000ほど存在しています。

ライフサイクル設定で対処
自動で削除するように、S3のライフサイクルを設定しました。3日経過したら削除するという設定です。
個人開発なので3日も待たなくていいとは思うのですが、「やっぱり必要だった!」ってなった時のために3日の猶予を持たせました。

その他
AWS CLIでシェルを作り、まとめて消すという方法もあります。シェルだとまとめて消せるので楽です。
ですが、3日経過したら消えるという恒久的な運用ができるかのテストをかねて、シェルは使用せずライフサイクルを使用することにしました。
Discussion