Amazon S3のオブジェクト移行・削除タイミングを調べてみた

2015.02.20

Amazon S3のライフサイクル設定をお使いでしょうか。
オブジェクトが作成されてから、ライフサイクル設定に指定された日数が経過すると、指定したオブジェクトをアーカイブや削除してくれる機能です。
今回はオブジェクトの日数計算の開始時間についてピンポイントに検証しました。
ライフサイクルの日数計算の開始時間はいつで、その開始時間の前後にオブジェクトを作成した場合、どのように判定されるのでしょうか。

尚、ライフサイクル設定について知りたい方は、横田 あかりさんの記事で詳細な説明がありますのでご参照ください。

Amazon S3でオブジェクトの有効期限を設定できるようになりました

日数計算の基準時間を知る

まず、日数計算の基準時間(日数を数え始める時刻)について知る必要があります。
AWSのドキュメントには下記記載があります。

ライフサイクル設定の要素

オブジェクトの存在時間に基づくライフサイクルルール Transition および Expire アクションを使用する場合、オブジェクトの作成からアクションの実行までの日数を指定できます。 日数を指定すると、Amazon S3 は、ルールに指定された日数をオブジェクトの作成時間に加算し、得られた日時を翌日の午前 00:00 UTC(協定世界時)に丸めることで、時間を算出します。たとえば、あるオブジェクトが 2014 年 1 月 15 日午前 10 時 30 分(UTC)に作成され、移行ルールに 3 日と指定した場合、オブジェクトの移行日は 2014 年 1 月 19 日 0 時 0 分(UTC)となります。

上記から、日数計算の開始は 0時0分(UTC) とありますので、日本時間では 午前9時00分 から計算を開始するようです。
今回は 8時55分~9時05分 の間、1分ごとにS3へファイルをアップロードし、9時00分から日数計算が開始されるかを試してみます。

S3の設定~ファイルアップロード

早速、テスト用のバケットに「object-transition-test」を作成しましたので、このバケットのLifecycle Rulesを設定します。
今回はGlacierへのアーカイブを0日、オブジェクトの削除を1日としました。

 s3test001

Amazon S3へのファイルアップロード

ファイルを 8時55分~9時05分 まで分刻みでアップロードする必要があるため、シェルとcronを使ってAmazon Linuxからアップすることにしました。
アップロードするファイル名には年月日と時刻が欲しかったため、シェルを実行した時間にテキストを作成、S3へアップロードするようにしました。S3へのアップロードはAWS CLIを使用しています。

#! /bin/sh
TODAY=`date +%Y%m%d%H%M`
touch "$TODAY".txt
aws s3 cp "$TODAY".txt s3://object-transition-test/test/

作成したシェルを試しに実行し、S3へアップされたか確認します。

[ec2-user@ip-10-0-1-10 s3test]$ ./s3-object-transition-test.sh
upload: ./201502162027.txt to s3://object-transition-test/test/201502162027.txt

s3test002

シェルの動作が確認できましたので、cronを設定しました。
翌日(2月17日)、8時55分~9時05分の間、1分ごとにファイルがアップされていることを確認できました。
ファイル名の日付・時刻とLast Modifiedが一致しています。

s3test003

まとめ

2月17日(火) 8時55分~9時05分 にアップロードしたファイルは下記動作をしていました。

■2月17日(火)

 s3test004

S3のログ(見やすくするため、一部編集しています)
※S3.EXPIRE.OBJECT=オブジェクトの削除、S3.TRANSITION.OBJECT=Glacierストレージクラスへ移行、を指します

object-transition-test [17/Feb/2015:02:33:22 +0000] - AmazonS3 S3.TRANSITION.OBJECT test/201502162027.txt
object-transition-test [17/Feb/2015:02:33:23 +0000] - AmazonS3 S3.TRANSITION.OBJECT test/201502170855.txt
object-transition-test [17/Feb/2015:02:33:23 +0000] - AmazonS3 S3.TRANSITION.OBJECT test/201502170856.txt
object-transition-test [17/Feb/2015:02:33:23 +0000] - AmazonS3 S3.TRANSITION.OBJECT test/201502170857.txt
object-transition-test [17/Feb/2015:02:33:23 +0000] - AmazonS3 S3.TRANSITION.OBJECT test/201502170858.txt
object-transition-test [17/Feb/2015:02:33:23 +0000] - AmazonS3 S3.TRANSITION.OBJECT test/201502170859.txt

■2月18日(水)

 s3test005

object-transition-test [18/Feb/2015:06:42:44 +0000] - AmazonS3 S3.EXPIRE.OBJECT test/201502162027.txt
object-transition-test [18/Feb/2015:06:42:44 +0000] - AmazonS3 S3.EXPIRE.OBJECT test/201502170855.txt
object-transition-test [18/Feb/2015:06:42:44 +0000] - AmazonS3 S3.EXPIRE.OBJECT test/201502170856.txt
object-transition-test [18/Feb/2015:06:42:44 +0000] - AmazonS3 S3.EXPIRE.OBJECT test/201502170857.txt
object-transition-test [18/Feb/2015:06:42:44 +0000] - AmazonS3 S3.EXPIRE.OBJECT test/201502170858.txt
object-transition-test [18/Feb/2015:06:42:44 +0000] - AmazonS3 S3.EXPIRE.OBJECT test/201502170859.txt

object-transition-test [18/Feb/2015:07:23:09 +0000] - AmazonS3 S3.TRANSITION.OBJECT test/201502170900.txt
object-transition-test [18/Feb/2015:07:23:09 +0000] - AmazonS3 S3.TRANSITION.OBJECT test/201502170901.txt
object-transition-test [18/Feb/2015:07:23:09 +0000] - AmazonS3 S3.TRANSITION.OBJECT test/201502170902.txt
object-transition-test [18/Feb/2015:07:23:09 +0000] - AmazonS3 S3.TRANSITION.OBJECT test/201502170903.txt
object-transition-test [18/Feb/2015:07:23:09 +0000] - AmazonS3 S3.TRANSITION.OBJECT test/201502170904.txt
object-transition-test [18/Feb/2015:07:23:09 +0000] - AmazonS3 S3.TRANSITION.OBJECT test/201502170905.txt

■2月19日(木)

 s3test006

object-transition-test [19/Feb/2015:07:40:06 +0000] - AmazonS3 S3.EXPIRE.OBJECT test/201502170900.txt
object-transition-test [19/Feb/2015:07:40:06 +0000] - AmazonS3 S3.EXPIRE.OBJECT test/201502170901.txt
object-transition-test [19/Feb/2015:07:40:06 +0000] - AmazonS3 S3.EXPIRE.OBJECT test/201502170902.txt
object-transition-test [19/Feb/2015:07:40:06 +0000] - AmazonS3 S3.EXPIRE.OBJECT test/201502170903.txt
object-transition-test [19/Feb/2015:07:40:06 +0000] - AmazonS3 S3.EXPIRE.OBJECT test/201502170904.txt
object-transition-test [19/Feb/2015:07:40:06 +0000] - AmazonS3 S3.EXPIRE.OBJECT test/201502170905.txt

【結果】

Glacierへのアーカイブを0日、オブジェクトの削除を1日とした場合
・日本時間8時59分より前 にアップロードしたファイルは当日9時以降にアーカイブされ、翌9時以降に削除されました。
・日本時間9時00分以降 にアップロードしたファイルは翌9時以降にアーカイブされ、翌々日の9時以降に削除されました。

s3test007

AWSのドキュメントに記載されている通り、ライフサイクル設定の日数計算の基準時刻は0時0分(UTC)、日本時間午前9時00分ということが理解できました!