📌
[S3 Intelligent-Tiering]概要とTerraformでの実装
0.本記事を書いている経緯
- 業務でS3周りのコスト削減の一環としてS3 Intelligent-Tierringの設定を行う予定だが、その前段階で導入に必要なコストや懸念点を調査している。
その過程で自身の備忘録として残しています。
参照)
1.概要(1-1.設定する目的
- S3に関連するコスト削減を行いたいため。どのオブジェクトがどの程度使用されるか判断がつかない状態で、安易にライフサイクルポリシーでGracierへ移行したり出来ないため、AWS側でアクセスパターンを検知し、オブジェクトを最適な階層へ移行してくれる。
1-2.機能
- Amazon S3 のストレージクラスで、アクセスパターンに基づいてデータを自動的に移動することでストレージコストを最適化する機能。
- 各階層に移行後オブジェクトがアクセスされると、そのオブジェクトは S3 Intelligent-Tiering によって自動的に高頻度のアクセス階層に戻される。
1-3.Intelligent-Tieringへの移行期間
- 最短0日から設定可能
参照)
1-4.アクセス階層(期間(起算日->最後にアクセスされた日) | 移行先 | 標準取得時間 |
---|---|---|
デフォルト | 高頻度アクセス階層 | 低レイテンシー(ミリ秒単位) |
+30日間連続アクセスなし | 低頻度アクセス階層 | 低レイテンシー(ミリ秒単位) |
+90 日間連続アクセスなし | アーカイブインスタントアクセス層 | 低レイテンシー(ミリ秒単位) |
+90 日間連続アクセスなし | アーカイブアクセス階層 | 3~5h |
+180 日間連続アクセスなし | ディープアーカイブアクセス階層 | 12 h以内 |
参照)
2.コスト(2-1.監視・オートメーション料金 (共通)
料金(USD) |
---|
0.0025(オブジェクト 1,000 件あたり ) |
2-2.ストレージ料金
- 東京リージョン(
ap-northeast-1
)の場合
階層 | 料金(USD)/月 |
---|---|
高頻度アクセス階層(S3 標準相当) | 0.025/GB(最初の50TB) / 0.024/GB(次の450TB) / 0.0023/GB(500TB超) |
低頻度アクセス階層(S3 標準 - 低頻度アクセス相当) | 0.0138/GB |
アーカイブインスタントアクセス階層(S3 Glacier Instant Retrieval相当) | 0.005/GB |
アーカイブアクセス階層(S3 Glacier Flexible Retrieval相当) | 0.0045/GB |
ディープアーカイブアクセス階層(S3 Glacier Deep Archive 相当) | 0.002/GB |
- バージニア北部(
us-east-1
)リージョンの場合
階層 | 料金(USD)/月 |
---|---|
高頻度アクセス階層(S3 標準相当) | 0.023/GB(最初の50TB) / 0.022/GB(次の450TB) / 0.0021/GB(500TB超) |
低頻度アクセス階層(S3 標準 - 低頻度アクセス相当) | 0.0125/GB |
アーカイブインスタントアクセス階層(S3 Glacier Instant Retrieval相当) | 0.004/GB |
アーカイブアクセス階層(S3 Glacier Flexible Retrieval相当) | 0.0036/GB |
ディープアーカイブアクセス階層(S3 Glacier Deep Archive 相当) | 0.00099/GB |
3.導入にあたって気にしたい点
3-1.対象のファイルサイズ
- ファイルのサイズが128KB未満だとアクセスパターンのモニタリング対象に入らず、高頻度階層のストレージに残る。
- 自身のバケットのオブジェクトサイズを予め把握しておかないと、導入しても意味がなくなるため。
3-2.Archive階層の取り出し時間
アクセス階層 | オブジェクト取得時間 |
---|---|
アーカイブインスタントアクセス階層 | 低レイテンシー(ミリ秒単位) |
アーカイブアクセス階層 | 3~5h |
ディープアーカイブアクセス階層 | 12 h以内 |
参照)
3-3.移行パス(-
One Zone-IAやGlacierのバケットからは、Intelligent-tieringへ移行できない。
4.Terraformでの実装
4-1.Resourceブロック
// ref: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_lifecycle_configuration
resource "aws_s3_bucket_lifecycle_configuration" "example" {
bucket = {バケット名}
rule {
id = "Allow small object transitions in INTELLIGENT_TIERING"
status = "Enabled"
noncurrent_version_expiration {
newer_noncurrent_versions = 3 // 非現行バージョンを3世代保持。それ以前の古いバージョンは削除される。
noncurrent_days = 30 // オブジェクトが非現行バージョンになってから、アクション(削除や移行)が実行されるまでの日数
}
transition {
days = 0 // オブジェクトが格納されて24h以内にIntelligent-Tierringへ移行
storage_class = "INTELLIGENT_TIERING"
}
}
}
// ref: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_intelligent_tiering_configuration
resource "aws_s3_bucket_intelligent_tiering_configuration" "example" {
bucket = {バケット名}
name = "Intelligent-Tiering-Archive-Option"
tiering {
access_tier = "ARCHIVE_ACCESS"
days = 90
}
tiering {
access_tier = "DEEP_ARCHIVE_ACCESS"
days = 180
}
}
4-2.AWS公式Module
// ref: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/main.tf
# aws_s3_bucket_lifecycle_configuration
lifecycle_rule = [
{
id = "intelligent-tieling"
status = "Enabled"
noncurrent_version_expiration = {
newer_noncurrent_versions = 3
noncurrent_days = 30
}
transition = {
days = 0
storage_class = "INTELLIGENT_TIERING"
}
}
]
# aws_s3_bucket_intelligent_tiering_configuration
intelligent_tiering = [
{
status = true
tiering = {
ARCHIVE_ACCESS = {
days = 90
}
DEEP_ARCHIVE_ACCESS = {
days = 180
}
}
}
]
参考
Discussion