
Amazon S3 ライフサイクルで自動的に削除するオブジェクトのフィルタ条件として,よく使う「キープレフィックス」以外に「オブジェクトタグ」も使える.最近使う機会があって検証したログをまとめておく.
準備
まず Amazon S3 バケットにオブジェクトを3種類アップロードしておく❗️
オブジェクト1つ目(残る)
1つ目はオブジェクトタグなしでアップロードする.ライフサイクルポリシーの条件に合致せずに残る.
$ aws s3api put-object \ --bucket kakakakakku-sandbox-lifecycle-tags \ --key Arch_Amazon-Simple-Storage-Service_64_1.png \ --body Arch_Amazon-Simple-Storage-Service_64.png $ aws s3api get-object-tagging \ --bucket kakakakakku-sandbox-lifecycle-tags \ --key Arch_Amazon-Simple-Storage-Service_64_1.png { "TagSet": [] }
オブジェクト2つ目(自動的に消える)
2つ目はオブジェクトタグありでアップロードする(AutoDelete: true).ライフサイクルポリシーの条件に合致するため自動的に消える.
$ aws s3api put-object \ --bucket kakakakakku-sandbox-lifecycle-tags \ --key Arch_Amazon-Simple-Storage-Service_64_2.png \ --body Arch_Amazon-Simple-Storage-Service_64.png \ --tagging "AutoDelete=true" $ aws s3api get-object-tagging \ --bucket kakakakakku-sandbox-lifecycle-tags \ --key Arch_Amazon-Simple-Storage-Service_64_2.png { "TagSet": [ { "Key": "AutoDelete", "Value": "true" } ] }
オブジェクト3つ目(自動的に消える)
3つ目はオブジェクトタグなしでアップロードしつつ,別途オブジェクトタグを設定する(AutoDelete: true).何かしらの処理によって削除可能だとマークされたときにオブジェクトタグを設定するようなイメージ.ライフサイクルポリシーの条件に合致するため自動的に消える.
$ aws s3api put-object \ --bucket kakakakakku-sandbox-lifecycle-tags \ --key Arch_Amazon-Simple-Storage-Service_64_3.png \ --body Arch_Amazon-Simple-Storage-Service_64.png $ aws s3api put-object-tagging \ --bucket kakakakakku-sandbox-lifecycle-tags \ --key Arch_Amazon-Simple-Storage-Service_64_3.png \ --tagging 'TagSet=[{Key=AutoDelete,Value=true}]' $ aws s3api get-object-tagging \ --bucket kakakakakku-sandbox-lifecycle-tags \ --key Arch_Amazon-Simple-Storage-Service_64_3.png { "TagSet": [ { "Key": "AutoDelete", "Value": "true" } ] }
ライフサイクルを設定する
最後に Amazon S3 ライフサイクルを設定する.AutoDelete: true というオブジェクトタグをフィルタ条件にして1日で削除する.今回は Terraform で実装した👌
resource "aws_s3_bucket" "sandbox" { bucket = "kakakakakku-sandbox-lifecycle-tags" } resource "aws_s3_bucket_public_access_block" "sandbox" { bucket = aws_s3_bucket.sandbox.id block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true } resource "aws_s3_bucket_lifecycle_configuration" "sandbox" { bucket = aws_s3_bucket.sandbox.id rule { id = "delete-objects-automatically" status = "Enabled" filter { tag { key = "AutoDelete" value = "true" } } expiration { days = 1 } } }

動作確認
数日待つとライフサイクルが実行されて,期待通りに「オブジェクト1つ目」のみ残っていた \( 'ω')/
Before
$ aws s3 ls kakakakakku-sandbox-lifecycle-tags 2025-10-05 16:19:24 2770 Arch_Amazon-Simple-Storage-Service_64_1.png 2025-10-05 16:21:47 2770 Arch_Amazon-Simple-Storage-Service_64_2.png 2025-10-05 16:22:09 2770 Arch_Amazon-Simple-Storage-Service_64_3.png
After
$ aws s3 ls kakakakakku-sandbox-lifecycle-tags 2025-10-05 16:19:24 2770 Arch_Amazon-Simple-Storage-Service_64_1.png