タイトルのままのメモです。
S3バケットを消すには先にオブジェクトを消して中身を空にする必要があるのですが(バージョニング有効の場合はその分もすべて)、S3には大量のオブジェクトを格納しがち&料金も安いので放っておきがちで、数千万ファイルとか億超えるオブジェクトを普通に格納してる環境も多いのではないでしょうか。
そのような使い方をしてるバケットを空にしようと、バケットを空にする操作やフォルダを選択して削除を実行すると、オブジェクトは秒間数百?~みたいな感じで高速に消えてくのですが、ファイル数が多いとめちゃくちゃ時間がかかります(半日とかそれ以上とか)。
で、それをさくっとやるソリューションとして、ライフサイクルを設定して期限切れにして、AWS側で自動的に削除されるようにするというものがあります。
便利なのですが、削除されるのにかかる時間が予想と違いました。
予想では、期限切れを1日にセットしたら、なんとなく次の日とか、もしくはセットしてから24時間後とかに消えてるのかな~と思ってたのですが、実際にはセットしてから3日くらい見る感じになります。実際に設定したときの動作は以下となります
- 今日) 期限切れ1日でセットする -> 翌々日が有効期限日
オブジェクトはこの日に完全に削除されます
としてセットされる - 1日後) 何も起こらず
- 2日後) 何も起こらず(一応この日が有効期限日)
- 3日後) マネジメントコンソールで見たら消えてた
以下は、10/5に期限切れ1日でライフサイクルをセットしたときの表示です
これを見ると、10/7の9時以降どこかで消えるんだろうな、という感じですが、ライフサイクルを設定したタイミング(時刻)にかかわらず、有効期限日は必ず翌々日の9:00JSTになってる感じです。おそらく時刻に意味はなさそうです(9:00:00 AM JSTってUTCだと単に0時ですしね.. 「この時刻以降に」とか書いて無く、「この日に」って書いてあるところ見ても意味なさそうかなと..)
厳密には、
- 2日後) 何も起こらず
この日のどこかで消されるとは思うのですが、何時に消されるのかユーザ側でコントロールできず、AWS側のアルゴリズムか何かで実行されてると思うので、バケットが空になっているはずとして運用に載せられる確認日は、結局3営業日見ることになるのかなと思います