はじめに
TerraformでS3のライフサイクルルールを設定する方法について書きます。
本記事では、基本的な設定のみ紹介しております。
ライフサイクルルールとは?
- 一定時間経過した後にS3のオブジェクトを別のストレージクラスに移行させるための設定になります。
- S3のコストを抑えるために使用します。
前提
- 使用するTerraformのバージョン情報
% terraform --version
Terraform v1.1.8
on darwin_amd64
+ provider registry.terraform.io/hashicorp/aws v4.22.0
Your version of Terraform is out of date! The latest version
is 1.2.7. You can update by downloading from https://www.terraform.io/downloads.html
%
-
コード適用の流れについては省きます。
- コード適用迄の流れを知りたい方は、以下の記事をご覧下さい。
- 【Terraform】コード作成〜クラウド環境に適用するまでの流れ
-
本記事では、コードの一部分のみの紹介になります。
コード
- S3バケット全体のオブジェクトを以下のように別のストレージクラスへ移行させるための設定になります。
- 30日後:
STANDARD_IA
に移行 - 60日後:
GLACIER
に移行
- 30日後:
s3.tf
resource "aws_s3_bucket" "s3_bucket" {
bucket = "testbucket0717"
tags = {
Name = "dev"
}
}
resource "aws_s3_bucket_acl" "s3_bucket_acl" {
bucket = aws_s3_bucket.s3_bucket.id
acl = "private"
}
resource "aws_s3_bucket_lifecycle_configuration" "s3_bucket_lifecycle" {
bucket = aws_s3_bucket.s3_bucket.id
rule {
id = "test_rule"
status = "Enabled"
transition {
days = 30
storage_class = "STANDARD_IA"
}
transition {
days = 60
storage_class = "GLACIER"
}
}
}
- filter設定を追加した場合、ライフサイクルに指定するオブジェクトを設定することも可能
- 以下の例では、
/Log
を指定
- 以下の例では、
s3.tf(一部抜粋)
resource "aws_s3_bucket_lifecycle_configuration" "s3_bucket_lifecycle" {
bucket = aws_s3_bucket.s3_bucket.id
rule {
id = "test_rule"
status = "Enabled"
filter {
prefix = "/Log"
}
transition {
days = 30
storage_class = "STANDARD_IA"
}
transition {
days = 60
storage_class = "GLACIER"
}
}
}
AWS Consoleでのライフサイクルルールの確認
作成したS3の Lifecycle configuration
から確認することが可能。
バケット全体のオブジェクトを指定した場合の例
バケット内のオブジェクトを指定する場合の例
Lifecycle rule configuration
のみ抜粋
※他の設定は「バケット全体のオブジェクトを指定した場合の例」と同様であるため
参考
- Terraform公式ドキュメント
- AWS公式ドキュメント