kakakakakku blog

Weekly Tech Blog: Keep on Learning!

S3 バケットのライフサイクルでオブジェクトタグを使って削除する

Amazon S3 ライフサイクルで自動的に削除するオブジェクトのフィルタ条件として,よく使う「キープレフィックス」以外に「オブジェクトタグ」も使える.最近使う機会があって検証したログをまとめておく.

docs.aws.amazon.com

準備

まず 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

関連記事

kakakakakku.hatenablog.com