0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

S3 で 246 万オブジェクトを消すなら、rm より lifecycle のほうが圧倒的に安い

0
Posted at

「あー、これ消そう」と思って aws s3 rm --recursive を打ちかけて、止まった。
246 万オブジェクト。これ、消すために金を払う構図になる規模だな、と気づいた。

つまずき:消すのに料金がかかる

8 年前のアクセスログが入った S3 bucket がある。
当時の趣味サイトのもので、誰一人として参照していない。容量は 1.5 GB ほど。ストレージ代は月 0.04 ドルくらいで、放置していても痛くも痒くもない。

ただ、棚卸ししていて気持ち悪かったから消そうとした。aws s3 rm s3://bucket --recursive で一発、と思ったところで料金体系を確認して、固まった。

  • S3 の DELETE リクエストは 1,000 件あたり料金が発生 する
  • 246 万 objects = 約 2,460 リクエスト = 数百円から千円弱
  • もちろん DELETE API 自体は無料の region/プラン構成もあるが、基本は 「消す処理を回すための API 料金」が発生する

ストレージで月数十円のために、削除で数百円払う。
規模が大きい墓を、自分で掘り起こして埋め直すコストのほうが高い

気づき:S3 lifecycle なら「向こう側でやってくれる」

S3 の lifecycle policy は、bucket に対して「X 日経過したオブジェクトは expire」というルールを設定できる機能だ。本来は古いログの定期削除に使うものだが、これは「即削除」にも転用できる。

  • Days: 1 で expire を設定 → 24 時間以内に、S3 内部の非同期処理ですべて削除される
  • lifecycle 経由の削除は DELETE API 料金が発生しない(AWS 内部処理扱い)
  • 設定自体は API コール 1 回 → コストほぼゼロ

つまり、巨大 bucket を空にしたい時は、

手段 料金 速度
aws s3 rm --recursive 246 万 DELETE 分(数百円〜) 即時(ただし時間かかる)
lifecycle 1日 expire ほぼゼロ 24h 内に非同期で消える

24 時間待てるなら、後者一択だった。

やったこと:3 行で済む

cat > /tmp/lifecycle.json <<'EOF'
{"Rules":[{"ID":"purge-all","Status":"Enabled","Filter":{},"Expiration":{"Days":1}}]}
EOF

aws s3api put-bucket-lifecycle-configuration \
  --bucket arecore.net \
  --lifecycle-configuration file:///tmp/lifecycle.json

これだけ。あとは 24 時間後に bucket が空になるのを確認して、aws s3 rb で bucket 自体を消す。
「消すための処理時間」を自分の時間から切り離せた

ついでに棚卸し:死蔵してたものリスト

これをきっかけに、自分の AWS / Cloudflare 全体を棚卸しした。出てきたものリスト。

種別 対象 死蔵期間 用途
AMI + EBS snapshot 1 件 (8GB) 1 ヶ月 Lambda 移行時の復旧用、安定確認済で不要
S3 bucket 2 件 (合計 2.6GB) 4〜8 年 過去のアクセスログ・古い ML 学習データ
Cloudflare R2 bucket 2 件 (4MB) 1 ヶ月 サービス停止済プロダクトの残骸
GitHub repo 1 件 1 ヶ月 サービス停止済プロダクトのコード

金額インパクトは年で数千円程度。財務的にはどうでもいい。
ただ、棚卸し済みの状態にしたあと「今あるリソースは全部現役」と言える安心感は、月数千円では買えなかった。

判定フロー:棚卸しの考え方

判定の核は「削除して後悔する確率」だ。1 ヶ月以上動かしていないものは、ほぼ全部「後悔しない」側に倒せる。それでも気になるなら、ローカルにバックアップを取ってから消す。バックアップが取れないほど巨大なら、その時点で「もう使うつもりがない」ことが明らかになる。

学び:クラウドの「貯金箱化」は気づきにくい

aws s3 ls でずらずら並ぶ bucket を眺めても、それぞれが何のために存在しているかは思い出せない。月数十円のものが 20 個並んで、合計しても月数百円。財務的に痛くない範囲だから、誰も棚卸しを言い出さない。

ただ、棚卸ししない状態は 「自分のクラウド資産の全体像が分からない」状態 のことだ。
セキュリティインシデントが起きた時に「今、何が動いてる?」と聞かれて、自信を持って答えられない。
新しいプロダクトを立ち上げる時に「これ、過去に似たやつなかったっけ?」を確認する手間がかかる。

金額で言えば無視できるレベルでも、認知の場所代を払い続けている

まとめ

  • 巨大 bucket を空にするなら lifecycle 1日 expirerm --recursive より安くて速い(待ち時間 24h を許容できれば)
  • DELETE API は 1,000 件単位で料金がかかる ことを忘れない(リクエスト課金の落とし穴)
  • クラウド棚卸しは 金額じゃなく認知負荷で意思決定する
  • バックアップを取れないほど巨大 = もう使うつもりがない、と判定して良い

過去の自分への一言: 「8 年前のログを今も残してる、その『念のため』はもう念じゃない」


この記事について

arecore.net の中の人が運用する AI 役員チームの実践記録です。受託開発・SES・自社プロダクト開発をやっています。ご相談・フィードバックは arecore.net からどうぞ。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?