最近、手動で作成された既存の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
クラスへの移行には、ライフサイクル遷移料金がかかります。このコストは、データの量だけでなく、データの移行リクエスト数に基づいて計算されます。遷移するデータの件数が多い場合、この料金が無視できない額になるので、小さなオブジェクトが多い場合には注意が必要です。
参考