Amazon S3には複数のストレージクラスが用意されており、データのアクセス頻度や保管要件に応じて最適なものを選択できます。さらに、ライフサイクルルールを設定することで、時間の経過とともにストレージクラスを自動で移行したり、不要なオブジェクトを削除したりできます。この記事では、S3のストレージクラスの特徴と、ライフサイクル管理によるコスト最適化の方法を解説します。

S3ストレージクラスの全体像

S3には用途に応じた複数のストレージクラスがあり、アクセス頻度、取り出し時間、コストのバランスが異なります。適切なストレージクラスを選択することで、パフォーマンスを維持しながらストレージコストを最適化できます。

ストレージクラスの分類

S3のストレージクラスは、大きく以下のカテゴリに分類されます。

graph TB
    subgraph "汎用"
        S3S[S3 Standard]
    end
    
    subgraph "アクセスパターン不明"
        INT[S3 Intelligent-Tiering]
    end
    
    subgraph "高性能"
        EXP[S3 Express One Zone]
    end
    
    subgraph "低頻度アクセス"
        SIA[S3 Standard-IA]
        OIA[S3 One Zone-IA]
    end
    
    subgraph "アーカイブ"
        GIR[Glacier Instant Retrieval]
        GFR[Glacier Flexible Retrieval]
        GDA[Glacier Deep Archive]
    end
    
    S3S -->|アクセス減少| INT
    S3S -->|アクセス減少| SIA
    SIA -->|さらに減少| GIR
    GIR -->|長期保管| GFR
    GFR -->|超長期保管| GDA

各ストレージクラスの主な特徴を整理します。

ストレージクラス ユースケース 最小保管期間 取り出しレイテンシー
S3 Standard 頻繁にアクセスするデータ なし ミリ秒
S3 Intelligent-Tiering アクセスパターンが不明なデータ なし ミリ秒
S3 Express One Zone 超低レイテンシーが必要なデータ 1時間 1桁ミリ秒
S3 Standard-IA 低頻度アクセスだが即時取得が必要 30日 ミリ秒
S3 One Zone-IA 再作成可能な低頻度アクセスデータ 30日 ミリ秒
Glacier Instant Retrieval 四半期に1回程度のアクセス 90日 ミリ秒
Glacier Flexible Retrieval 年に1〜2回のアクセス 90日 分〜時間
Glacier Deep Archive ほとんどアクセスしない長期保管 180日 時間

耐久性と可用性

すべてのS3ストレージクラスは、99.999999999%(イレブンナイン)の耐久性を提供するように設計されています。ただし、可用性とAZ(アベイラビリティゾーン)の構成は異なります。

ストレージクラス 可用性(設計値) AZ数
S3 Standard 99.99% 3以上
S3 Intelligent-Tiering 99.9% 3以上
S3 Standard-IA 99.9% 3以上
S3 One Zone-IA 99.5% 1
Glacier Instant Retrieval 99.9% 3以上
Glacier Flexible Retrieval 99.99% 3以上
Glacier Deep Archive 99.99% 3以上

One Zoneストレージクラスは単一AZにデータを保存するため、AZ障害時にデータが失われるリスクがあります。再作成可能なデータや、他リージョンにレプリカがあるデータに適しています。

汎用ストレージクラス

S3 Standard

S3 Standardは、頻繁にアクセスするデータ向けの汎用ストレージクラスです。デフォルトのストレージクラスであり、以下の特徴があります。

  • 高いスループットと低レイテンシーのデータアクセス
  • 最小保管期間や最小オブジェクトサイズの制限なし
  • 取り出し料金なし

S3 Standardは以下のユースケースに適しています。

  • Webサイトの静的コンテンツ
  • コンテンツ配信
  • モバイルアプリやゲームのアセット
  • ビッグデータ分析のアクティブデータセット

S3 Express One Zone

S3 Express One Zoneは、2023年に追加された高性能ストレージクラスです。1桁ミリ秒のレイテンシーを実現し、リクエストコストもS3 Standardより50%削減されています。

S3 Express One Zoneの特徴は以下の通りです。

  • 専用のディレクトリバケットを使用
  • 単一AZ内にデータを保存
  • 機械学習のトレーニングや金融モデリングなど、超低レイテンシーが求められるワークロード向け

ディレクトリバケットは汎用バケットとは異なり、S3 Express One Zone専用のバケットタイプです。

アクセスパターン不明なデータ向け

S3 Intelligent-Tiering

S3 Intelligent-Tieringは、アクセスパターンが不明または変化するデータに最適なストレージクラスです。データのアクセス頻度を監視し、自動的に最もコスト効率の良い階層にオブジェクトを移動します。

graph TB
    subgraph "S3 Intelligent-Tiering"
        FA[高頻度アクセス層]
        IA[低頻度アクセス層]
        AA[アーカイブアクセス層<br/>オプション]
        DA[ディープアーカイブアクセス層<br/>オプション]
    end
    
    Upload[オブジェクトアップロード] --> FA
    FA -->|30日アクセスなし| IA
    IA -->|アクセス発生| FA
    IA -->|90日アクセスなし| AA
    AA -->|180日アクセスなし| DA
    AA -->|アクセス発生| FA
    DA -->|アクセス発生| FA

Intelligent-Tieringの階層構成は以下の通りです。

階層 移行条件 取り出し時間 料金
高頻度アクセス層 デフォルト ミリ秒 S3 Standard相当
低頻度アクセス層 30日アクセスなし ミリ秒 S3 Standard-IA相当
アーカイブアクセス層 90日アクセスなし(オプション) 数分〜数時間 Glacier Flexible Retrieval相当
ディープアーカイブアクセス層 180日アクセスなし(オプション) 数時間 Glacier Deep Archive相当

Intelligent-Tieringには以下の特徴があります。

  • 取り出し料金なし(アーカイブ層からの復元を除く)
  • 少額のモニタリング・オートメーション料金が発生(オブジェクトあたり月額約0.0025USD/1,000オブジェクト)
  • 128KB未満のオブジェクトは常に高頻度アクセス層に保存され、モニタリング料金は発生しない

低頻度アクセスデータ向け

S3 Standard-IA(Infrequent Access)

S3 Standard-IAは、アクセス頻度は低いものの、アクセス時には即座にデータを取得したいケースに適しています。

S3 Standard-IAの特徴は以下の通りです。

  • S3 Standardと同等の耐久性と可用性
  • ストレージ料金はS3 Standardより約40%低い
  • 取り出し料金(GBあたり)が発生
  • 最小保管期間30日、最小オブジェクトサイズ128KB

適したユースケースは以下の通りです。

  • バックアップデータ
  • 災害復旧用データ
  • 古いログファイル

S3 One Zone-IA

S3 One Zone-IAは、S3 Standard-IAと同様の低頻度アクセス向けですが、単一AZにのみデータを保存します。

S3 One Zone-IAの特徴は以下の通りです。

  • S3 Standard-IAより約20%低コスト
  • 単一AZ障害時にデータ損失のリスクあり
  • 再作成可能なデータや、別リージョンにレプリカがあるデータ向け

適したユースケースは以下の通りです。

  • サムネイル画像(オリジナルから再生成可能)
  • クロスリージョンレプリケーションの送信先
  • オンプレミスデータのセカンダリバックアップ

アーカイブストレージクラス

長期保管が必要でアクセス頻度が非常に低いデータ向けに、3種類のGlacierストレージクラスが提供されています。

S3 Glacier Instant Retrieval

Glacier Instant Retrievalは、四半期に1回程度のアクセスがあるアーカイブデータ向けです。

  • ミリ秒単位でのデータ取り出しが可能
  • S3 Standard-IAより約68%低コスト
  • 最小保管期間90日

医療画像やニュースメディアのアーカイブなど、即時アクセスが必要なアーカイブデータに適しています。

S3 Glacier Flexible Retrieval

Glacier Flexible Retrieval(旧S3 Glacier)は、年に1〜2回程度のアクセスがあるアーカイブデータ向けです。

取り出しオプションは3種類あります。

オプション 取り出し時間 用途
迅速(Expedited) 1〜5分 緊急時のアクセス
標準(Standard) 3〜5時間 通常のアクセス
大容量(Bulk) 5〜12時間 コスト重視の大量取り出し

コンプライアンス要件でのデータ保持や、メディアアセットのアーカイブに適しています。

S3 Glacier Deep Archive

Glacier Deep Archiveは、S3で最も低コストのストレージクラスです。7〜10年以上の長期保管が必要なデータ向けに設計されています。

  • Glacier Flexible Retrievalより約75%低コスト
  • 取り出し時間は12時間(標準)または48時間(大容量)
  • 最小保管期間180日

規制対応のためのデータ保持や、テープバックアップの代替として適しています。

ストレージクラスの選択フロー

データの特性に応じて適切なストレージクラスを選択するためのフローチャートです。

flowchart TD
    A[データを保存] --> B{アクセス頻度は?}
    B -->|頻繁| C{超低レイテンシーが必要?}
    C -->|はい| D[S3 Express One Zone]
    C -->|いいえ| E[S3 Standard]
    
    B -->|不明/変動| F[S3 Intelligent-Tiering]
    
    B -->|低頻度| G{即時取得が必要?}
    G -->|はい| H{再作成可能?}
    H -->|はい| I[S3 One Zone-IA]
    H -->|いいえ| J[S3 Standard-IA]
    
    G -->|数分〜数時間OK| K{アクセス頻度は?}
    K -->|四半期に1回程度| L[Glacier Instant Retrieval]
    K -->|年に1〜2回| M[Glacier Flexible Retrieval]
    K -->|ほぼアクセスなし| N[Glacier Deep Archive]

ライフサイクル管理の基本

S3ライフサイクル管理を使用すると、オブジェクトのライフサイクル全体を通じて、ストレージクラスの移行やオブジェクトの削除を自動化できます。

ライフサイクルルールでできること

ライフサイクルルールでは、以下の2種類のアクションを定義できます。

移行アクション(Transition Actions)

オブジェクトを別のストレージクラスに移行します。例えば、作成から30日後にS3 Standard-IAに移行し、90日後にGlacierに移行するといった設定が可能です。

有効期限アクション(Expiration Actions)

オブジェクトを削除します。一定期間経過後に自動的にオブジェクトを削除したり、バージョニング有効時に古いバージョンを削除したりできます。

graph LR
    subgraph "ライフサイクル例"
        direction LR
        A[オブジェクト作成] -->|0日| B[S3 Standard]
        B -->|30日後| C[S3 Standard-IA]
        C -->|90日後| D[Glacier Flexible Retrieval]
        D -->|365日後| E[削除]
    end

ライフサイクルルールの構成要素

ライフサイクルルールは以下の要素で構成されます。

要素 説明
ルール名 ルールを識別するための名前
ステータス ルールの有効/無効
フィルター ルールを適用するオブジェクトの条件(プレフィックス、タグ等)
移行アクション ストレージクラスの移行設定
有効期限アクション オブジェクトの削除設定

ストレージクラス移行の制約

ストレージクラス間の移行には、いくつかの制約があります。

graph TD
    S3S[S3 Standard] --> INT[Intelligent-Tiering]
    S3S --> SIA[S3 Standard-IA]
    S3S --> OIA[S3 One Zone-IA]
    S3S --> GIR[Glacier Instant Retrieval]
    S3S --> GFR[Glacier Flexible Retrieval]
    S3S --> GDA[Glacier Deep Archive]
    
    INT --> SIA
    INT --> OIA
    INT --> GIR
    INT --> GFR
    INT --> GDA
    
    SIA --> OIA
    SIA --> GIR
    SIA --> GFR
    SIA --> GDA
    
    OIA --> GFR
    OIA --> GDA
    
    GIR --> GFR
    GIR --> GDA
    
    GFR --> GDA

主な制約は以下の通りです。

  • S3 Express One Zoneへはライフサイクルで移行できない
  • より高コストのストレージクラスへは移行できない(例:Glacier → S3 Standard)
  • One Zone-IAからGlacier Instant Retrievalへは移行できない

ライフサイクルルールの設定

マネジメントコンソールでの設定

マネジメントコンソールからライフサイクルルールを設定する手順は以下の通りです。

  1. S3コンソールでバケットを選択
  2. 「管理」タブを選択
  3. 「ライフサイクルルール」セクションで「ライフサイクルルールの作成」をクリック
  4. ルール名、フィルター、アクションを設定

AWS CLIでの設定

AWS CLIを使用してライフサイクルルールを設定する場合、JSON形式の設定ファイルを作成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    "Rules": [
        {
            "ID": "MoveToIAAndGlacier",
            "Status": "Enabled",
            "Filter": {
                "Prefix": "logs/"
            },
            "Transitions": [
                {
                    "Days": 30,
                    "StorageClass": "STANDARD_IA"
                },
                {
                    "Days": 90,
                    "StorageClass": "GLACIER"
                }
            ],
            "Expiration": {
                "Days": 365
            }
        }
    ]
}

この設定ファイルを使用してライフサイクルルールを適用します。

1
2
3
aws s3api put-bucket-lifecycle-configuration \
    --bucket my-bucket \
    --lifecycle-configuration file://lifecycle.json

フィルターの種類

ライフサイクルルールでは、以下の条件でオブジェクトをフィルタリングできます。

フィルター 説明
プレフィックス キーの先頭文字列で絞り込み logs/backup/
タグ オブジェクトタグで絞り込み archive=true
オブジェクトサイズ サイズ範囲で絞り込み 128KB以上

フィルターを組み合わせることも可能です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
    "Filter": {
        "And": {
            "Prefix": "documents/",
            "Tags": [
                {
                    "Key": "archive",
                    "Value": "true"
                }
            ],
            "ObjectSizeGreaterThan": 131072
        }
    }
}

バージョニングとライフサイクル管理

バージョニングが有効なバケットでは、現行バージョンと非現行バージョン(旧バージョン)に対して、それぞれ異なるライフサイクルアクションを設定できます。

非現行バージョンの管理

非現行バージョンに対するライフサイクルルールの設定例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
    "Rules": [
        {
            "ID": "ManageNoncurrentVersions",
            "Status": "Enabled",
            "Filter": {},
            "NoncurrentVersionTransitions": [
                {
                    "NoncurrentDays": 30,
                    "StorageClass": "STANDARD_IA"
                },
                {
                    "NoncurrentDays": 60,
                    "StorageClass": "GLACIER"
                }
            ],
            "NoncurrentVersionExpiration": {
                "NoncurrentDays": 365
            }
        }
    ]
}

この設定では、非現行バージョンになってから30日後にS3 Standard-IAに移行し、60日後にGlacierに移行、365日後に削除します。

削除マーカーの自動削除

バージョニングが有効なバケットでオブジェクトを削除すると、削除マーカーが作成されます。期限切れの削除マーカー(対応するバージョンが存在しない削除マーカー)を自動的に削除できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
    "Rules": [
        {
            "ID": "RemoveExpiredDeleteMarkers",
            "Status": "Enabled",
            "Filter": {},
            "Expiration": {
                "ExpiredObjectDeleteMarker": true
            }
        }
    ]
}

未完了マルチパートアップロードの削除

大きなファイルをアップロードする際、マルチパートアップロードが使用されます。アップロードが中断された場合、未完了のマルチパートアップロードがバケットに残り、ストレージコストが発生します。

ライフサイクルルールで未完了のマルチパートアップロードを自動的に削除できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
    "Rules": [
        {
            "ID": "AbortIncompleteMultipartUpload",
            "Status": "Enabled",
            "Filter": {},
            "AbortIncompleteMultipartUpload": {
                "DaysAfterInitiation": 7
            }
        }
    ]
}

この設定により、開始から7日以上経過した未完了のマルチパートアップロードが自動的に中止され、アップロードされたパーツが削除されます。

ライフサイクルルールの実行タイミング

ライフサイクルルールは非同期で実行され、以下の点に注意が必要です。

  • ライフサイクルルールは1日1回実行される
  • 移行日や有効期限は翌日のUTC午前0時に丸められる
  • 大量のオブジェクトがある場合、すべての処理が完了するまで時間がかかることがある
  • 移行・削除のタイミングが正確に指定日時にならない場合がある

ただし、課金については条件を満たした時点から変更されます。たとえば、移行アクションの条件を満たした時点で、実際の移行が完了していなくても移行先のストレージクラスの料金が適用されます。

コスト最適化のベストプラクティス

S3のストレージコストを最適化するためのベストプラクティスを紹介します。

S3ストレージクラス分析の活用

S3ストレージクラス分析を使用して、オブジェクトのアクセスパターンを分析できます。この分析結果を基に、最適なライフサイクルルールを設計します。

ストレージクラス分析では、以下の情報が得られます。

  • オブジェクトへのアクセス頻度
  • 取り出しデータ量
  • IAやGlacierへの移行による推定コスト削減額

推奨されるライフサイクル設定パターン

一般的なユースケースに対する推奨設定パターンです。

ログファイル

graph LR
    A[作成] -->|30日| B[S3 Standard-IA]
    B -->|90日| C[Glacier Flexible Retrieval]
    C -->|1年| D[削除]

バックアップデータ

graph LR
    A[作成] -->|即時| B[S3 Standard-IA]
    B -->|30日| C[Glacier Deep Archive]
    C -->|7年| D[削除]

アクセスパターン不明のデータ

graph LR
    A[作成] -->|即時| B[Intelligent-Tiering<br/>アーカイブ層有効化]

コスト試算の考慮点

ストレージクラスを選択する際は、以下のコストを総合的に考慮します。

コスト項目 説明
ストレージ料金 GB/月あたりの保管コスト
リクエスト料金 PUT、GET等のAPIリクエストコスト
取り出し料金 データ取り出し時のGBあたりコスト
最小保管期間料金 最小保管期間前に削除した場合の追加コスト
移行料金 ストレージクラス移行時のリクエストコスト

まとめ

S3のストレージクラスとライフサイクル管理について解説しました。重要なポイントは以下の通りです。

  • ストレージクラスの選択: データのアクセス頻度、取り出し時間の要件、コストを考慮して適切なストレージクラスを選択する
  • Intelligent-Tieringの活用: アクセスパターンが不明または変化するデータには、自動的にコストを最適化するIntelligent-Tieringが有効
  • ライフサイクルルールの自動化: 手動でのストレージクラス移行は非効率であり、ライフサイクルルールで自動化することでコスト最適化と運用負荷軽減を両立
  • バージョニングとの連携: バージョニングが有効なバケットでは、非現行バージョンに対するライフサイクルルールも重要
  • 定期的な見直し: S3ストレージクラス分析を活用し、実際のアクセスパターンに基づいてライフサイクルルールを定期的に見直す

適切なストレージクラスとライフサイクル管理を組み合わせることで、データの可用性を維持しながらストレージコストを大幅に削減できます。

参考リンク