この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
構成
ライフサイクルルールの確認に使用するテストオブジェクトのPUTは、Lambda Functionを用いて自動化しました。
検証準備
Lambda Function作成
S3へオブジェクトをPUTするLambda Functionを作成しました。また、検証の確認がしやすいように、PUT後にS3バケットに格納されたオブジェクトの一覧を出力しています。
TestPutObject
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 ストレージクラスにオブジェクトが移行されないのはなぜですか ?
ライフサイクルルール設定方法など、誰かのお役に立てれば幸いです。