本記事はAsiaQuest Advent Calendarの7日目です。
クラウドインテグレーション部の渡邊です。
今回はAmazon Simple Storage Service(以下、S3と呼ぶ)のライフサイクルルールの設定方針と設定時の注意点について説明します。
設定方針は公式の見解ではない点、ご了承ください。
また、バージョニングの有効化を前提としております。
ライフサイクルルール設定時には、S3にどのようなデータが格納されるか考えるとよいと思います。
たとえば、静的ウェブサイトホスティングが有効なバケットにおいてライフサイクルルールを設定する場合を考えてみましょう。
ウェブサイトとして画像などのオブジェクトを提供するため、サービスが継続する限り、オブジェクトの現行バージョンは有効期限切れにするべきではありません。
しかし、ログバケットでよくある設定として、一定期間で現行バージョンを期限切れにする設定を適用してしまうと、ある日を境に表示したいコンテンツが見られないということが考えられます。
このようなことを避けるためにも、ライフサイクルルール設定時にはどのようなデータを格納するか考えたほうがよいと思います。
早速結論となりますが、以下のライフサイクルルールのアクションの設定方針がよいと考えました。
以下を満たすバケットがこの設定に向いていると思います。
ライフサイクルルールのアクション | 設定 |
---|---|
オブジェクトの現行バージョンをストレージクラス間で移動 | - |
オブジェクトの非現行バージョンをストレージクラス間で移動 | - |
オブジェクトの現行バージョンを有効期限切れにする | 要件の保持期間にする(ない場合はこのアクションを無効) |
オブジェクトの非現行バージョンを完全に削除 | ・要件の保持期間または長期休暇を考慮した日数(14日) ・すべての非現行バージョンをアクションの対象とする |
有効期限切れのオブジェクト削除マーカーまたは不完全なマルチパートアップロードを削除 | ・有効期限切れのオブジェクト削除マーカー:有効 ・不完全なマルチパートアップロードを削除:1日 |
※こちらを以下「上表」と呼びます。
各ルールのアクションについて言及します。
オブジェクトの現行バージョンを有効期限切れにする
要件に保持期間の方針があるはずなので、そちらにしたがって設定すればよいと思います。
静的ウェブサイトホスティングなど、コンテンツを常に参照するようなケースの場合、こちらのアクションは無効にする場合が多いかと思います。
有効期限切れのオブジェクト削除マーカー
公式の「削除マーカーの管理」に記載の通り、削除マーカーは、期限切れオブジェクトのマーカーと古いバージョンを現行バージョンにするためのマーカーがあります。
有効期限切れのオブジェクト削除マーカーは、復元にも使用できず、残しておく必要がないと考え、有効化しました。
期限切れのオブジェクト削除マーカーは、すべてのオブジェクトバージョンが削除され、単一の削除マーカーだけが残っている場合のマーカー
引用元:期限切れの削除マーカーを自動的にクリーンアップするライフサイクルの設定
ベストプラクティスとして、ストレージコストを最小限に抑えるため、AbortIncompleteMultipartUpload アクションを使用してライフサイクルルールを設定することをお勧めします。
引用元:不完全なマルチパートアップロードを削除するためのバケットライフサイクル設定の設定
バケットの[管理]タブから、ライフサイクルルールを作成します。
ルールスコープは以下の2つの選択肢があります。
フィルターを使用する場合、3つのフィルターパターンを検討する必要があります。
プレフィックス指定時には、キープレフィックス (tax/example/) などを指定するため、バケット名を含めないように注意しましょう。
今回は、バケット内のすべてのオブジェクトを対象にするため、「バケット内のすべてのオブジェクトに適用」を選択します。
上表で対象にした、ライフサイクルルールのアクションを有効化した状態の設定画面です。
設定画面に、以下の注意書きがあります。
[オブジェクトの現在のバージョンの有効期限切れ] を有効にした場合、 [期限切れのオブジェクト削除マーカーの削除] を有効にすることはできません。
よって、私が冒頭で示したライフサイクルルールを適用するために、少なくとも、2つのルールを作成する必要があります。
以降では、各ライフサイクルルールの作成時の注意点を示します。
また、ライフサイクルルールは、新規および既存のオブジェクト両方に適用されるため、注意してください。
ライフサイクル設定をバケットに追加すると、設定ルールは既存のオブジェクトとそれ以降に追加されるオブジェクトの両方に適用されます。
まず、現行バージョンと非現行バージョンのライフサイクルルール設定を実施します。
以下の記述したがって、設定値を入力します。
選択したアクションには有効期限が必要です。値を入力するか、アクションの選択を解除します。
0日と設定して作成しようとすると、設定値の下に警告が表示されます。
整数値は 0 より大きい必要があります。
作成を試みると、やはり失敗します。
では、正の値を設定した上で、保持する新しいバージョンの数を0にします。
こちらの設定によって、一定期間経過したすべての非現行バージョンのオブジェクトを削除します。
保持する新しいバージョンの数は、アクションの対象外とする世代数を表します。
すると、正の値を入力する旨を促すエラーが発生して作成に失敗します。
'NewerNoncurrentVersions' for NoncurrentVersionExpiration action must be a positive integer
もし、すべての非現行バージョンを対象にアクションを適用したい場合は、値を空白にすることで実現できます。
ルールの作成を試みたところ、成功しました。
作成したライフサイクルルールを確認すると、想定通りの設定となっております。
次に、アクション「有効期限切れのオブジェクト削除マーカーまたは不完全なマルチパートアップロードを削除」についてです。
今回の設定方針では問題ありませんが、該当アクションの下に記載の通り、一部のフィルター設定では制約があるため注意してください。
オブジェクトタグまたはオブジェクトサイズでフィルタリングする場合、これらのアクションはサポートされません。
こちらも0より大きい値を設定する必要があります。
整数は 0 より大きくする必要があります。
2つ目のルールの作成に成功しました。
設定も想定通りになっています。
ライフサイクルルールのアクション | 設定 |
---|---|
オブジェクトの現行バージョンをストレージクラス間で移動 | - |
オブジェクトの非現行バージョンをストレージクラス間で移動 | - |
オブジェクトの現行バージョンを有効期限切れにする | 要件の保持期間にする(ない場合はこのアクションを無効) |
オブジェクトの非現行バージョンを完全に削除 | ・要件の保持期間または長期休暇を考慮した日数(14日) ・すべての非現行バージョンをアクションの対象とする |
有効期限切れのオブジェクト削除マーカーまたは不完全なマルチパートアップロードを削除 | ・有効期限切れのオブジェクト削除マーカー:有効 ・不完全なマルチパートアップロードを削除:1日 |
ライフサイクルルールのアクションにおいて、以下の設定時の制約に注意しましょう
ライフサイクルルールは、新規および既存のオブジェクト両方に適用されます
「オブジェクトの非現行バージョンを完全に削除」で設定する、保持する新しいバージョンの数は、アクションの対象外とする世代数を表します
「有効期限切れのオブジェクト削除マーカーまたは不完全なマルチパートアップロードを削除」はオブジェクトタグまたはオブジェクトサイズでフィルタリングする場合、設定できないです
【参考】