きっかけ
ライフサイクルルールの動作確認をしていた際、あれれと思ったことがあったので後学のために書き残します。
ライフサイクルルールとは
Amazon S3 がオブジェクトのグループに適用するアクションを定義するルールのセットです。具体的には、次の 2 種類のアクションがあります。
-
移行アクション
別のストレージクラスにオブジェクトを移行するタイミングを定義します。
ex.作成から30 日後に S3 標準 – IA ストレージクラスにオブジェクトを移行し、作成から 1 年後に S3 Glacier Deep Archiveストレージクラスにオブジェクトをアーカイブする
-
失効アクション
このアクションではオブジェクトの有効期限を定義します。Amazon S3 はユーザーに代わって有効期限切れのオブジェクトを削除します。
これらの日付ベースでの更新は、時間経過判定の単位は「日」で、毎日世界標準時0時(日本時間午前9時)に更新されます。
ライフサイクルルールの詳細な内容に関しては、以下を記事が非常によくまとまっていますので、参考にしてください。
よくある試験ケース
例えば、以下のライフサイクルルールを設定したS3バケットがあるとします。
このS3バケットの動作確認のテストケースとして、5/1(水)の14:00に以下の順番で2つのファイルをアップロードしたとします。
■テストケース例
※先にアップロードされたデータAが非現行バージョンになる
1. データAを該当のS3にアップロード
2. データBを該当のS3にアップロード
データAの削除確認をしたい場合、いつS3バケットを確認すればよいでしょうか?
5/1(水)の5日後は5/6(月)なので、その日になればデータAが削除されていることを確認できるでしょうか?
■データAの状態遷移の考え方①
答えはNoです。
考え方
以下に筆者の考え方を示します。間違っていたらご指摘ください。
ヒントは、上記でも記載している更新タイミングです。
再掲します。
更新タイミングについて
毎日世界標準時0時(日本時間午前9時)に更新
この考え方にのっとれば、テストを実施した5/1(水)の14:00時点では、データAはまだ非現行バージョンのライフサイクルルールによる管理外にあります。5/2(木)のAM9:00の更新タイミングで非現行バージョンと認識されます。
表に直すと以下の通りになります。
では、5/7(火)にデータAが消えていることを確認できるのでしょうか。
答えはNoです。
ライフサイクルルールの更新日は0日目の状態が存在します。(0日目状態というのは、筆者の造語です。)
なので、そのことも考慮すると以下の通りになります。
なので、ライフサイクルルールで設定した2日後(5/8のAM9:00以降)にデータAの削除確認ができるというわけです。
考慮点
ライフサイクルルールの動作には以下2点注意する点があることがわかりました。
- 更新日(日本時間AM9:00)にならないと、ライフサイクルルールのサイクルが回らない
- ライフサイクルルールの更新日には、0も考慮する必要がある?(別の言い方の方が良いかも)
以上