S3 のストレージクラスとライフサイクルで保存コストを下げる
記事の「実践」を 1 項目ずつ進めるためのページです。AWS マネジメントコンソールで操作したら、右の一覧にチェックを入れてください。チェックはこのブラウザに保存されます。
前提条件
- リージョン:
ap-northeast-1(東京) - AWS マネジメントコンソールにログイン済みで、S3 バケットの作成・ライフサイクル設定の権限を持っていること
- アップロード用の小さなテキストファイルを 2 つ手元に用意しておくこと(例:
access.log、report.txt。中身は任意の数行で構いません)
作成するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| S3 バケット | s3-storage-class-lab-<アカウントID> | ハンズオン用バケット(バージョニング有効) |
| S3 オブジェクト | archive/report.txt | アップロード時にストレージクラスを指定する例 |
| S3 オブジェクト | logs/access.log | アップロード後にストレージクラスを変更する例 |
| ライフサイクルルール | logs-lifecycle | logs/ 配下の移行・有効期限・以前のバージョンの削除 |
バケットを作成する
- AWS マネジメントコンソールにログインし、リージョンが
ap-northeast-1(東京)であることを確認します - 上部の検索バーに
S3と入力し、表示された「S3」を選択します - 左側ナビゲーションの「汎用バケット」を選択し、「バケットを作成」をクリックします
- 以下を設定します
- バケット名:
s3-storage-class-lab-<アカウントID>(例:s3-storage-class-lab-123456789012) - バケットのバージョニング:
有効にする
- バケット名:
- その他の項目はデフォルトのままにします
- ページ下部の「バケットを作成」をクリックします
バケット一覧に s3-storage-class-lab-<アカウントID> が表示されれば作成完了です。
ストレージクラスを指定してアップロードする
アップロード時にストレージクラスを指定しないと S3 Standard になります。ここでは、アーカイブ用のファイルを最初から S3 Glacier Instant Retrieval に置きます。
- バケット一覧から
s3-storage-class-lab-<アカウントID>をクリックして開きます - 「フォルダの作成」をクリックし、フォルダ名に
archiveと入力して「フォルダの作成」をクリックします - 同じ手順で
logsフォルダも作成します archive/フォルダをクリックして開き、「アップロード」をクリックします- 「ファイルを追加」をクリックし、
report.txtを選択します - 下部の「プロパティ」セクションを展開し、「ストレージクラス」で
Glacier Instant Retrievalを選択します- 一覧には「低冗長化」も表示されますが、画面上でも推奨されていないクラスのため、本記事では扱いません
- 「アップロード」をクリックします
アップロードが完了したら「閉じる」をクリックします。
続いて、logs/ フォルダに access.log をアップロードします。こちらはストレージクラスを指定せずにアップロードします。
- バケットのトップに戻って
logs/フォルダをクリックして開き、「アップロード」をクリックします - 「ファイルを追加」をクリックし、
access.logを選択します - 「プロパティ」のストレージクラスは変更せず、「アップロード」をクリックします
- アップロードが完了したら「閉じる」をクリックします
archive/ と logs/ のオブジェクト一覧で、「ストレージクラス」列を確認します。report.txt は Glacier Instant Retrieval、access.log は スタンダード(S3 Standard)になっていることが確認できます。
既存オブジェクトのストレージクラスを変更する
アップロード済みの logs/access.log を、S3 Standard-IA に変更します。
logs/のオブジェクト一覧でaccess.logのチェックボックスを選択します- 「アクション」をクリックし、表示されたメニューから「ストレージクラスを編集する」を選択します
- 「ストレージクラス」の一覧で
標準 - IAを選択します - 「その他のコピー設定」は
ソース設定をコピー(デフォルト)のままにします - 「変更の保存」をクリックします
完了画面で「閉じる」をクリックし、logs/ のオブジェクト一覧に戻ります。access.log のストレージクラスが 標準 - IA に変わっていることを確認します。
コンソールでのストレージクラスの変更は、オブジェクトを新しいストレージクラスで同じ場所にコピーする操作です。そのため、バージョニングが有効なバケットでは新しいバージョンが作られます。オブジェクト一覧上部の「バージョンの表示」をオンにすると、access.log に 2 つのバージョンがあり、現在のバージョンが 標準 - IA、以前のバージョンが スタンダード のまま残っていることが確認できます。
この以前のバージョンも保存料金の対象です。次のライフサイクルルールで、以前のバージョンを自動で削除する設定を入れます。確認できたら「バージョンの表示」をオフに戻します。
ライフサイクルルールを作成する
logs/ プレフィックスのオブジェクトだけを対象に、次の内容のルールを作成します。
| アクション | 設定値 |
|---|---|
| 現在のバージョンを移行 | 作成から 30 日後に 標準 - IA、90 日後に Glacier Flexible Retrieval |
| 現在のバージョンを期限切れにする | 作成から 365 日後 |
| 以前のバージョンを完全に削除 | 最新でなくなってから 30 日後 |
- バケットのトップに戻り、「管理」タブを選択します
- 「ライフサイクルルール」セクションの「ライフサイクルルールを作成する」をクリックします
- 以下を設定します
- ライフサイクルルール名:
logs-lifecycle - ルールスコープを選択:
1 つ以上のフィルターを使用してこのルールのスコープを制限する - プレフィックス:
logs/
- ライフサイクルルール名:
- 「ライフサイクルルールのアクション」で、以下の 3 つにチェックを入れます
現行バージョンのオブジェクトをストレージクラス間で移行するオブジェクトの現行バージョンを有効期限切れにするオブジェクトの非現行バージョンを完全に削除
- 「現行バージョンのオブジェクトをストレージクラス間で移行する」にチェックを入れると、移行コストに関する確認のチェックボックスが表示されます。内容を確認してチェックを入れます
- 「オブジェクトの現行バージョンをストレージクラス間で移行する」で、以下を設定します
- ストレージクラスの移行を選択:
標準 - IA、オブジェクト作成後の日数:30 - 「移行を追加する」をクリックし、ストレージクラスの移行を選択:
Glacier Flexible Retrieval (旧 Glacier)、オブジェクト作成後の日数:90
- ストレージクラスの移行を選択:
- 「オブジェクトの現行バージョンの有効期限が切れる」で、オブジェクト作成後の日数に
365を入力します - 「オブジェクトの非現行バージョンを完全に削除」で、オブジェクトが現行バージョンでなくなってからの日数に
30を入力します - その他の項目はデフォルトのままにします
画面下部の「移行と有効期限切れのアクションを確認」に、設定したアクションが「最新バージョンのアクション」「非現行バージョンのアクション」に分かれて時系列で表示されます。日数とストレージクラスが表の内容どおりになっていることを確認します。
- 「ルールの作成」をクリックします
作成したルールを確認する
「管理」タブの「ライフサイクルルール」に logs-lifecycle が表示され、ステータスが Enabled、スコープが フィルタリング済み(プレフィックスで絞り込んだルール)になっていることを確認します。「最新バージョンのアクション」列には標準 - IA・Glacier Flexible Retrieval への移行と有効期限、「非現行バージョンのアクション」列には完全な削除が表示されます。
このルールは logs/ で始まるオブジェクトにだけ適用されるため、archive/report.txt は対象外です。なお、今回アップロードした access.log は 128 KB 未満なので、デフォルトの動作ではストレージクラスの移行の対象になりません。一方、有効期限と以前のバージョンの削除はサイズに関係なく適用されます。