S3 ライフサイクルルールで期限切れの削除マーカーが削除されない理由を教えてください
困っていた内容
以下のようにS3バケットのライフサイクルルールを設定していますが、想定した通りに動作していません。 現行バージョンが削除マーカーのみとなっており、オブジェクトがアップロードされてから400日経過しているにもかかわらず、削除マーカーが期限切れの削除マーカーとして削除されません。何故削除マーカーが完全に削除されないのか教えてください。
【ライフサイクルルールの設定】
- オブジェクトの現行バージョンを有効期限切れにする
- オブジェクト作成後の日数:300 日
- オブジェクトの非現行バージョンを完全に削除
- オブジェクトが現行バージョンでなくなってからの日数:1 日
- 保持する新しいバージョンの数:なし
【オブジェクト情報】
- バージョニングは有効化されている
- S3にオブジェクトをアップロードしてから400日経過
- 現行バージョンは削除マーカーのみで、非現行バージョンは存在しない
具体的な解決方法
バージョニングが有効のバケットでは、現行バージョンの失効ルールによるオブジェクトの有効期限が経過し削除された場合、削除マーカーが最新のバージョンとしてPUTされます。また、ライフサイクルルールの設定画面では「オブジェクト作成後の日数」とありますが、正確には「現行バージョンが作成されてからの日数」で期限切れとなるため、削除マーカーが期限切れとして認識されるには削除マーカーが作成されてから300日経過する必要があります。
上記の設定では、オブジェクト自体はアップロードから300日経過しているものの、削除マーカーが現行バージョンとして生成されてから100日(400 - 100日)程度しか経過していないため、期限切れにはならず削除マーカーの完全な削除が行われません。
もし、早急に削除マーカーを期限切れにして削除したい場合は、コンソールから直接削除を行うか、新しいライフサイクルルールを追加し、「有効期限切れのオブジェクト削除マーカーまたは不完全なマルチパートアップロードを削除」の「期限切れのオブジェクト削除マーカーを削除する」を設定することで、次のライフサイクルルールの実行タイミングで完全な削除が可能です。(期限切れの削除マーカーの条件を満たしている場合)