S3ライフサイクルルールの削除ルールでフォルダを残したい

S3バケットのライフサイクルルールで、削除ルールを設定した時にフォルダを残す方法をご紹介します。
2024.04.17

困っていたこと

S3バケットのライフサイクルルールで、スコープをバケット全体にし、削除ルールを設定していたところ、フォルダも削除されてしまいました。
フォルダを残しておくにはどうすれば良いでしょうか。

どうすればいいのか

まず、S3にフォルダという概念は存在しません。 S3はオブジェクトストレージのため、ディレクトリ構造ではなくオブジェクト名でデータを管理しているため、階層がありません。

詳細は以下の弊社ブログをご覧ください。

フォルダという概念はありませんが、マネジメントコンソールから「フォルダの作成」でフォルダを作成した場合、S3はフォルダ名をキーとする0バイトのオブジェクトを作成します。

フォルダを使用して Amazon S3 コンソールのオブジェクトを整理する - Amazon Simple Storage Service

Amazon S3 にフォルダを作成すると、S3 は、指定したフォルダ名に設定されたキーを持つ 0 バイトのオブジェクトを作成します。例えば、バケットに photos という名前のフォルダを作成した場合、Amazon S3 コンソールは photos/ キーを使用して 0 バイトのオブジェクトを作成します。

そのため、S3バケットのライフサイクルルールでフォルダを削除したくない場合、フィルターを利用して削除するオブジェクトの最小オブジェクトサイズを1バイトにする方法が考えられます。

検証

バケットにオブジェクトを以下のように配置しました。 test1/  test2/は「フォルダの作成」から作成しています。

s3test.html

test1/

test2/
test2/testtext.txt

対象のバケットにライフサイクルルールを設定します。

「管理」タブから「ライフサイクルルールを作成」を選択

以下のように設定しました。

ルールスコープを選択
1 つ以上のフィルターを使用してこのルールのスコープを制限する

最小オブジェクトサイズを指定
1 バイト

ライフサイクルルールのアクション
オブジェクトの現行バージョンを有効期限切れにする

オブジェクトの現行バージョンの有効期限が切れる
オブジェクト作成後の日数
1日後

結果

1日後...

s3test.html は削除され、test1/  test2/ のみ残りました。

test2/ 配下の testtext.txt も削除されていました。

参考

バケットのライフサイクル設定の指定 - Amazon Simple Storage Service