BeeX Tech blog

BeeXではクラウドネイティブアプリ開発、企業の基幹クラウド基盤構築、システム移行、運用保守を行っています。

S3 ライフサイクルの有効期限設定で軽く悩んだ話


最近ハマる時はだいたい S3 関連です。那須です。

S3 っていいですよね。

ストレージクラスによって料金調整とかできたり、別リージョンにレプリケーションできたり、バージョン管理できたり。

特にライフサイクルは本当にありがたい。

削除忘れも防げるし料金節約にもなります。

先日からライフサイクルで特定のフォルダ配下のオブジェクトを作成から数日経過したら削除する、ってのを設定したんですが、ちょっと悩んでしまったことがあったので共有したいと思います。

何が起こったのか?

S3 バケットのライフサイクルやその他の設定を下記のようにしました。

・test フォルダを作成してそこに一時的に EC2 インスタンス間で共有するオブジェクトを置く

・1日経過したらオブジェクトを削除

・ライフサイクル対象プレフィックスは test/

・バージョニング無効

nasu-media バケットに test フォルダ作成して、その中に test.yml を置きました。

ライフサイクルの動作タイミングは UTC 0:00 なので、日本時間 9:00 AM です。

test フォルダの中に test.yml を置いて 2 日後に確認してみると、

???

test フォルダどこ行ったの??

というわけで、test フォルダ内のオブジェクトは消えたのはよかったのですが、なんとフォルダごと消されてしまいました。

2,3 回やっても同じ結果になったので、なんかおかしいぞ?と思って調べ始めました。

正しい動きとは?

AWS ドキュメントをざーっと読んでみたんですが、それっぽい記述は見つかりません。

いや、どこかに書いてるけど私が見つけられてないだけかもしれません。

しかし頼りになるのがクラスメソッドさんのブログです!

同じ内容を書いている方がいらっしゃいました!

S3のフォルダ配下のオブジェクトをすべて削除したときの挙動について

CLI の操作で紹介してくれていますが、私のように「s3 ライフサイクル フォルダ 削除」みたいな感じでググってしまって答えが見つからないよぉ…って方のために私はこの記事を書こうと思いました。

なのでほぼ内容は同じです。

フォルダ内のオブジェクトがなくなると、フォルダも消えてしまう。

というか、そもそも S3 にフォルダという概念がない、というのは勉強になりました。

普段から S3 使ってますが、そんな細かいことまで気にしてないですからね。

というわけで、動きとしては正しいことが見えてきました。

じゃあどうすればいいのか?

AWS CLI で S3 にオブジェクトをアップロードする時もプレフィックスを指定しますよね?

で、その通りのプレフィックスが存在しなければフォルダっぽく勝手に作ってくれますよね?

なので、S3 にそのプレフィックスがあるかどうかを定期的に確認する、ってことをしない限り運用には何も影響がないはずです。

というわけで、私の結論は「そういうものなので気にするな!」になりました。

さいごに

今までのストレージと同じようにディレクトリやフォルダがあると思って S3 を触ってると意外なところで悩みます。

たぶんこれからも S3 で悩むことになるでしょう。

でも S3 を使わないシステムって案外少ないような気はしてるので、今後も細かい点まで触って活用していこうと思いました。