プレフィックス指定したS3ライフサイクルルールの動作を確認してみた
構成
ライフサイクルルールの確認に使用するテストオブジェクトのPUTは、Lambda Functionを用いて自動化しました。
検証準備
Lambda Function作成
S3へオブジェクトをPUTするLambda Functionを作成しました。また、検証の確認がしやすいように、PUT後にS3バケットに格納されたオブジェクトの一覧を出力しています。
import boto3 import os import jmespath from datetime import datetime s3 = boto3.resource('s3') s3_client = boto3.client('s3') def lambda_handler(event, context): bucket_name = os.environ['BUCKET_NAME'] #環境変数よりバケット名取得 fixed_key=['rds-cluster/audit/','rds-cluster/general/'] #S3階層固定値指定 variable_key=datetime.now().strftime('%Y/%m/%d/%H/') #S3階層可変(日時)値として利用 key_name = datetime.now().strftime('%Y%m%d%H%M%S') + '.txt' # S3に作成するオブジェクト名指定 full_path_key=[] #キーフルパスを代入するリスト #キーフルパス作成 for item in fixed_key: full_path_key.append(item + variable_key + key_name) print #S3アップロード for item in full_path_key: obj = s3.Object(bucket_name,item) obj.put( Body='test' ) print("アップロード:" + obj.key) #S3オブジェクト一覧取得(キー名、更新日、ストレージクラスを出力) res_list_objects = s3_client.list_objects_v2(Bucket=bucket_name) for obj in res_list_objects['Contents']: key=obj["Key"] last_modified=obj["LastModified"] storage_class=obj["StorageClass"] print('{},{},{}'.format(key, last_modified,storage_class))
バケット名などLambda Functionの環境変数で指定しました。
$ FUNCTION_NAME=TestPutObject $ aws lambda get-function \ --function-name ${FUNCTION_NAME} \ --query 'Configuration.Environment' { "Variables": { "TZ": "Asia/Tokyo", "BUCKET_NAME": "test-lifecycle-bucket-2020" } }
Lambda Functonに付与するロールには、該当バケットへのPUT権限が必要になりますのでご注意ください。
CloudWatch Rule
Lambda Functionが自動起動するよう、CloudWatch RuleをCron式で設定しました。ここでは、18:00 JST/日時で起動するようにしています。
$ EVENT_NAME=TestPutObjectRule $ aws events describe-rule \ --name ${EVENT_NAME} { "Name": "TestPutObjectRule", "Arn": "arn:aws:events:ap-northeast-1:XXXXXXXXXXXX:rule/TestPutObjectRule", "ScheduleExpression": "cron(0 9 * * ? *)", "State": "ENABLED", "EventBusName": "default" }
CloudWatch Ruleの詳細については以下をご確認ください。
S3ライフサイクル設定
該当バケットに以下のライフサイクルを設定しました。
ルール名 | プレフィックス | ストレージクラス移行 | 失効 |
---|---|---|---|
audit-lifecycle | rds-cluster/audit/ | 1日(Glacier) | 2日 |
general-lifecycle | rds-cluster/general/ | ー | 1日 |
以下、AWS CLIでライフサイクルルールを確認した結果です。
ライフサイクルルール設定
$ BUCKET_NAME=test-lifecycle-bucket-2020 $ aws s3api get-bucket-lifecycle-configuration \ --bucket ${BUCKET_NAME} \ --output json { "Rules": [ { "Expiration": { "Days": 2 }, "ID": "audit-lifecycle", "Filter": { "Prefix": "rds-cluster/audit/" }, "Status": "Enabled", "Transitions": [ { "Days": 1, "StorageClass": "GLACIER" } ] }, { "Expiration": { "Days": 1 }, "ID": "general-lifecycle", "Filter": { "Prefix": "rds-cluster/general/" }, "Status": "Enabled" } ] }
検証
検証準備後、数日放置しました。Lambda Functionが自動で起動され、CloudWatch Logsに以下ログを出力しています。
$ LOG_GROUP_NAME=/aws/lambda/${FUNCTION_NAME} $ aws logs describe-log-streams \ --log-group-name ${LOG_GROUP_NAME} \ --query "logStreams[].logStreamName" \ --output table ---------------------------------------------------------- | DescribeLogStreams | +--------------------------------------------------------+ | 2020/05/17/[$LATEST]6fff1f2fa64a4b8a9083f4767a4a0aa4 | | 2020/05/18/[$LATEST]b669fbec386f4f1cbd90d509a0d9fdc6 | | 2020/05/19/[$LATEST]a64dd3a2a68a4f668d9ad7696502ca6a | | 2020/05/20/[$LATEST]e17a69353e394cb1b4346a19c4eb7fb9 | | 2020/05/21/[$LATEST]e4a94efb76eb472c9a62f4cb3b842c3e | +--------------------------------------------------------+
こちらのログより、該当バケットに格納されたオブジェクト、ストレージクラスなどを確認していきたいと思います。
まずは、想定される動作を整理します。ライフサイクルのタイミングは、ルールに指定した日数を加算し、得られた日時の翌日 00:00 UTCに丸められ、その時刻を経過すると処理が行われます。
「audit-lifecycle」ルールを例に整理します。5/17 9:00 UTC(5/17 18:00 JST)
にオブジェクトがPUTされると、ストレージクラス移行の場合は、ルールに指定した日数(1日)の加算と丸めこみで、5/19 00:00 UTC(5/19 9:00 JST)
に処理が行われます。失効も考え方は同様で、ルールに指定した日数(2日)の加算と丸めこみで、5/20 00:00 UTC(5/20 9:00 JST)
に処理が行われます。ここでは、Lambda Functionの実行タイミングは18:00 JSTなので、以下が想定されます。
以降は、Lambda Functionが出力したCloudWatch Logsの内容です。
5/17 18:00
ログストリーム2020/05/17/[$LATEST]6fff1f2fa64a4b8a9083f4767a4a0aa4
の内容です。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | timestamp | message | |---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1589706005254 | START RequestId: 086307b1-1f71-4c76-b69e-aeaefab19b82 Version: $LATEST | | 1589706005573 | アップロード:rds-cluster/audit/2020/05/17/18/20200517180005.txt | | 1589706005627 | アップロード:rds-cluster/general/2020/05/17/18/20200517180005.txt | | 1589706005824 | rds-cluster/audit/2020/05/17/18/20200517180005.txt,2020-05-17 09:00:06+00:00,STANDARD | | 1589706005824 | rds-cluster/general/2020/05/17/18/20200517180005.txt,2020-05-17 09:00:06+00:00,STANDARD | | 1589706005826 | END RequestId: 086307b1-1f71-4c76-b69e-aeaefab19b82 | | 1589706005826 | REPORT RequestId: 086307b1-1f71-4c76-b69e-aeaefab19b82 Duration: 571.65 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 76 MB Init Duration: 387.08 ms | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
20200517180005.txt
のPUTが行われ、指定バケットのrds-cluster/audit
、rds-cluster/general
配下にオブジェクトが格納されていることがわかります。
5/18 18:00
ログストリーム2020/05/18/[$LATEST]b669fbec386f4f1cbd90d509a0d9fdc6
の内容です。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | timestamp | message | |---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1589792405063 | START RequestId: 96df977d-10e7-4a02-8181-e250351e5403 Version: $LATEST | | 1589792405388 | アップロード:rds-cluster/audit/2020/05/18/18/20200518180005.txt | | 1589792405438 | アップロード:rds-cluster/general/2020/05/18/18/20200518180005.txt | | 1589792405618 | rds-cluster/audit/2020/05/17/18/20200517180005.txt,2020-05-17 09:00:06+00:00,STANDARD | | 1589792405618 | rds-cluster/audit/2020/05/18/18/20200518180005.txt,2020-05-18 09:00:06+00:00,STANDARD | | 1589792405618 | rds-cluster/general/2020/05/17/18/20200517180005.txt,2020-05-17 09:00:06+00:00,STANDARD | | 1589792405618 | rds-cluster/general/2020/05/18/18/20200518180005.txt,2020-05-18 09:00:06+00:00,STANDARD | | 1589792405631 | END RequestId: 96df977d-10e7-4a02-8181-e250351e5403 | | 1589792405631 | REPORT RequestId: 96df977d-10e7-4a02-8181-e250351e5403 Duration: 566.76 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 76 MB Init Duration: 383.93 ms | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
新たに20200518180005.txt
のPUTが行われています。指定バケットには、20200517180005.txt
と20200518180005.txt
が格納されている状態です。ライフサイクルの日時をむかえていないため、ストレージクラスの移行や、オブジェクトの失効は行われていません。
5/19 18:00
ログストリーム2020/05/19/[$LATEST]a64dd3a2a68a4f668d9ad7696502ca6a
の内容です。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | timestamp | message | |---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1589878805083 | START RequestId: b18eaad2-db11-4dca-abc5-b62d40e55439 Version: $LATEST | | 1589878805361 | アップロード:rds-cluster/audit/2020/05/19/18/20200519180005.txt | | 1589878805413 | アップロード:rds-cluster/general/2020/05/19/18/20200519180005.txt | | 1589878805594 | rds-cluster/audit/2020/05/17/18/20200517180005.txt,2020-05-17 09:00:06+00:00,GLACIER | | 1589878805594 | rds-cluster/audit/2020/05/18/18/20200518180005.txt,2020-05-18 09:00:06+00:00,STANDARD | | 1589878805594 | rds-cluster/audit/2020/05/19/18/20200519180005.txt,2020-05-19 09:00:06+00:00,STANDARD | | 1589878805594 | rds-cluster/general/2020/05/18/18/20200518180005.txt,2020-05-18 09:00:06+00:00,STANDARD | | 1589878805594 | rds-cluster/general/2020/05/19/18/20200519180005.txt,2020-05-19 09:00:06+00:00,STANDARD | | 1589878805613 | END RequestId: b18eaad2-db11-4dca-abc5-b62d40e55439 | | 1589878805613 | REPORT RequestId: b18eaad2-db11-4dca-abc5-b62d40e55439 Duration: 529.83 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 76 MB Init Duration: 365.98 ms | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
新たに20200519180005.txt
のPUTが行われています。ライフサイクルで指定した日時を経過しているので、rds-cluster/audit
配下20200517180005.txt
のストレージクラスが移行され、rds-cluster/general
配下の20200517180005.txt
が削除されました。
5/20 18:00
ログストリーム2020/05/20/[$LATEST]e17a69353e394cb1b4346a19c4eb7fb9
の内容です。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | timestamp | message | |---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1589965205342 | START RequestId: b1b11d71-e64c-4b1a-a018-d7b2064f1b44 Version: $LATEST | | 1589965205677 | アップロード:rds-cluster/audit/2020/05/20/18/20200520180005.txt | | 1589965205847 | アップロード:rds-cluster/general/2020/05/20/18/20200520180005.txt | | 1589965205998 | rds-cluster/audit/2020/05/18/18/20200518180005.txt,2020-05-18 09:00:06+00:00,GLACIER | | 1589965205998 | rds-cluster/audit/2020/05/19/18/20200519180005.txt,2020-05-19 09:00:06+00:00,STANDARD | | 1589965205998 | rds-cluster/audit/2020/05/20/18/20200520180005.txt,2020-05-20 09:00:06+00:00,STANDARD | | 1589965205998 | rds-cluster/general/2020/05/19/18/20200519180005.txt,2020-05-19 09:00:06+00:00,STANDARD | | 1589965205998 | rds-cluster/general/2020/05/20/18/20200520180005.txt,2020-05-20 09:00:06+00:00,STANDARD | | 1589965206012 | END RequestId: b1b11d71-e64c-4b1a-a018-d7b2064f1b44 | | 1589965206012 | REPORT RequestId: b1b11d71-e64c-4b1a-a018-d7b2064f1b44 Duration: 670.33 ms Billed Duration: 700 ms Memory Size: 128 MB Max Memory Used: 78 MB Init Duration: 392.61 ms | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
新たに20200520180005.txt
のPUTが行われています。ライフサイクルで指定した日時を経過しているので、ストレージクラスが移行されたrds-cluster/audit
配下の20200517180005.txt
は削除され、20200518180005.txt
のストレージクラスが移行されています。rds-cluster/general
配下にあった、20200518180005.txt
が削除されました。
5/21 18:00
ログストリーム2020/05/21/[$LATEST]e4a94efb76eb472c9a62f4cb3b842c3e
の内容です。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | timestamp | message | |---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1590051605007 | START RequestId: 38c59e96-ed33-4123-83f8-874fd7965762 Version: $LATEST | | 1590051605319 | アップロード:rds-cluster/audit/2020/05/21/18/20200521180005.txt | | 1590051605400 | アップロード:rds-cluster/general/2020/05/21/18/20200521180005.txt | | 1590051605558 | rds-cluster/audit/2020/05/19/18/20200519180005.txt,2020-05-19 09:00:06+00:00,GLACIER | | 1590051605558 | rds-cluster/audit/2020/05/20/18/20200520180005.txt,2020-05-20 09:00:06+00:00,STANDARD | | 1590051605576 | rds-cluster/audit/2020/05/21/18/20200521180005.txt,2020-05-21 09:00:06+00:00,STANDARD | | 1590051605576 | rds-cluster/general/2020/05/20/18/20200520180005.txt,2020-05-20 09:00:06+00:00,STANDARD | | 1590051605576 | rds-cluster/general/2020/05/21/18/20200521180005.txt,2020-05-21 09:00:06+00:00,STANDARD | | 1590051605578 | END RequestId: 38c59e96-ed33-4123-83f8-874fd7965762 | | 1590051605578 | REPORT RequestId: 38c59e96-ed33-4123-83f8-874fd7965762 Duration: 570.26 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 78 MB Init Duration: 338.55 ms | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
新たに20200521180005.txt
のPUTが行われています。ライフサイクルで指定した日時を経過しているので、ストレージクラスが移行されたrds-cluster/audit
配下の20200518180005.txt
は削除され、20200519180005.txt
のストレージクラスが移行されています。rds-cluster/general
配下にあった、20200519180005.txt
が削除されました。
確認したログは以上です。想定した動作となりました。
さいごに
プレフィックスを指定したライフサイクルルールの動作を確認してみました。今回はS3スタンダードから、S3 Glacierへストレージを移行しました。移行先のストレージによっては、制約等が異なりますのでご注意ください。
- サポートされている移行と関連する制約
- S3 ライフサイクルルールが INTELLIGENT_TIERING ストレージクラスにオブジェクトを移行しない問題を解決する
- Amazon S3 ライフサイクル設定ルールで GLACIER ストレージクラスにオブジェクトが移行されないのはなぜですか ?
ライフサイクルルール設定方法など、誰かのお役に立てれば幸いです。