S3ライフサイクルルールを使用して、オブジェクトのクラスを変更する

S3ライフサイクルルールを使用して、オブジェクトのクラスを変更する

S3ライフサイクルルールを使用して、オブジェクトのクラスを変更する

以下のページで、S3ライフサイクルルールにおけるオブジェクトの有効期限切れを扱いました。

あわせて読みたい
S3ライフサイクルルール – 期限切れのオブジェクトを削除する 【S3ライフサイクルルール - 期限切れのオブジェクトを削除する】 S3が提供する機能の1つに、ライフサイクルルールがあります。ライフサイクルルールには2種類あります...

今回はS3ライフサイクルルールを使用して、オブジェクトのストレージクラスを変更する方法を確認します。

Transition actions — 別のストレージクラスにオブジェクトを移行するタイミングを定義します。例えば、作成から 30 日後に S3 標準 – IA ストレージクラスにオブジェクトを移行するか、作成から 1 年後に S3 Glacier Flexible Retrieval ストレージクラスにオブジェクトをアーカイブするよう選択することができます。

ストレージのライフサイクルの管理

構築する環境

Diagram of using S3 lifecycle rules to change the class of objects.

S3バケットを作成します。

バケットのライフサイクルルールを設定します。
オブジェクトのストレージクラスを移行するルールです。
バケットにオブジェクトが設置されて1日後に、クラスをS3 Intelligent-Tieringに移行させます。

CloudFormationテンプレートファイル

上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。

https://github.com/awstut-an-r/awstut-soa/tree/main/06/001

テンプレートファイルのポイント解説

S3バケット

Resources:
  Bucket:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: Private
      BucketName: !Ref Prefix
      LifecycleConfiguration:
        Rules:
          - Id: !Sub "${Prefix}-Lifecyclerule"
            Status: Enabled
            Transitions:
              - StorageClass: !Ref StorageClass
                TransitionInDays: !Ref TransitionInDays
Code language: YAML (yaml)

ライフサイクルルールはLifecycleConfigurationプロパティで設定します。
ライフサイクルルールにおけるストレージクラスの移行に関しては、Transitionsプロパティで設定できます。

StorageClassプロパティで移行先のストレージクラスを指定します。
今回は「INTELLIGENT_TIERING」を指定し、S3 Intelligent-Tieringに移行するように設定します。

TransitionInDaysプロパティで移行までの日数を指定します。
今回は「1」を指定し、オブジェクト設置後、1日後にストレージクラスを移行するように設定します。

環境構築

CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。

CloudFormationスタックを作成し、スタック内のリソースを確認する

CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

あわせて読みたい
CloudFormationのネストされたスタックで環境を構築する 【CloudFormationのネストされたスタックで環境を構築する方法】 CloudFormationにおけるネストされたスタックを検証します。 CloudFormationでは、スタックをネストす...

各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。

  • S3バケット:soa-06-001

AWS Management ConsoleからS3バケットライフサイクルルールを確認します。

Detail of S3 01.

確かにライフサイクルルールが作成されています。
確かに移行ルールが作成されています。
オブジェクト設置してから1日後に、ストレージクラスをS3 Intelligent-Tieringに移行する内容です。

動作確認

オブジェクト設置

準備が整いましたので、まずはテスト用のオブジェクトを作成します。

$ dd if=/dev/zero of=./hoge.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00095441 s, 1.1 GB/s

$ ls -lh ./hoge.txt
-rw-rw-r-- 1 ec2-user ec2-user 1.0M Dec  5 10:46 ./hoge.txt
Code language: Bash (bash)

1MBのファイルを作成しました。
これは以下の仕様に対応するためです。

S3 Standard または S3 Standard – IA ストレージクラスから S3 Intelligent-Tiering、S3 Standard – IA、または S3 1 ゾーン – IA にオブジェクトを移行する場合、次のオブジェクトサイズ制約が適用されます。

[128 KiB 未満のオブジェクト] – 以下の移行で、Amazon S3 は128 KiB 未満のオブジェクトを移行しません。

Amazon S3 ライフサイクルを使用したオブジェクトの移行

このファイルをS3バケットにアップロードします。

$ aws s3 cp ./hoge.txt s3://soa-06-001/
upload: ./hoge.txt to s3://soa-06-001/hoge.txt
Code language: Bash (bash)

改めてバケットにアクセスし、オブジェクトの状況を確認します。

Detail of S3 02.

確かにオブジェクトがアップロードされています。
Storage classの列を見ると、このオブジェクトのストレージクラスがStandardであることがわかります。

ライフサイクルルール適用後

オブジェクトアップロードから1日後、改めてバケットを確認します。

Detail of S3 03.

Storage classが「Intelligent-Tiering」になりました。
ライフサイクルルールによって、確かにクラスストレージが変更されました。

まとめ

S3ライフサイクルルールを使用して、オブジェクトのストレージクラスを変更する方法を確認しました。