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

最近ハマる時はだいたい 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 を使わないシステムって案外少ないような気はしてるので、今後も細かい点まで触って活用していこうと思いました。

関連サービス:クラウド・SAPシステム運用保守サービス

クラウド・SAPシステム運用保守サービス

日々変わり続けるクラウドの最新技術やトレンドを取り込み、貴社に最適な基幹クラウド向け運用保守サービスを提供します。

詳細を見る

BeeX Technical Blogについてのお問い合わせ

BeeX Technical Blogのエントリにご質問が御座いましたらお気軽にお問合せください。

お電話でのお問い合わせ

☎ 03-6214-2830

受付時間 平日9:30〜18:00

フォームでのお問い合わせ

お問い合わせフォーム