LoginSignup
0
0

TerraformによるS3バケット管理とライフサイクルの最適化

Posted at

最近、手動で作成された既存のS3バケットをTerraformの管理下に置いて、ライフサイクルポリシーを設定したので、そのときのメモを残します。

手順

ステップ1: Terraformリソースの定義

既存のS3バケットをTerraformリソースとして定義します。以下はexample-devという名前の開発用バケットの設定例です。

resource "aws_s3_bucket" "example_dev" {
  bucket = "example-dev"

  tags = {
    Environment = "dev"
  }
}

ステップ2: ライフサイクルポリシーの設定

次に、バケットのデータに対するライフサイクルポリシーを設定します。このポリシーは、データを30日後にSTANDARD_IAストレージクラスに移行し、90日後に削除するよう設定します。

resource "aws_s3_bucket_lifecycle_configuration" "example_dev_lifecycle" {
  bucket = aws_s3_bucket.example_dev.id

  rule {
    id     = "ManageLifecycleAndDelete"
    status = "Enabled"

    transition {
      days          = 30
      storage_class = "STANDARD_IA"
    }

    expiration {
      days = 90
    }
  }
}

ステップ3: リソースのTerraformへのインポート

Terraformが既存のバケットを認識できるように、以下のコマンドを使用してバケットとライフサイクルポリシーをそれぞれインポートします。

terraform import module.s3.aws_s3_bucket.example_dev example-dev
terraform import module.s3.aws_s3_bucket_lifecycle_configuration.example_dev_lifecycle example-dev

ステップ4: 確認

AWS CLIを使用して、バケットの設定が正しく適用されたことを確認します。

aws s3api head-object --bucket example-dev --key [オブジェクトキー]

補足:コスト効率を考慮したライフサイクルポリシーの設定

ライフサイクルポリシーを設計する際には、以下のコスト関連のポイントに注意を払いました。

最低保管期間

STANDARD_IAストレージクラスでは最低30日間の保管が必要です。ライフサイクルポリシーで設定した削除期間が30日未満である場合、未経過分の保管料金が発生するので、削除ポリシーはSTANDARD_IA移行後30日以上空ける必要があります。

ライフサイクル遷移料金

STANDARDクラスからSTANDARD_IAクラスへの移行には、ライフサイクル遷移料金がかかります。このコストは、データの量だけでなく、データの移行リクエスト数に基づいて計算されます。遷移するデータの件数が多い場合、この料金が無視できない額になるので、小さなオブジェクトが多い場合には注意が必要です。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0