S3 Intelligent-Tieringを整理した

# 背景・目的
以前、下記の記事でS3のストレージクラスを整理しました。
今回はIntelligent-Tieringについて深堀りします。また、簡単に動作も確認します。

https://qiita.com/zumax/items/882d2ccc9f6f9598ff08

# まとめ
下記に特徴を整理します。

|特徴|説明|
|:--|:--|
|概要|アクセスパターンが変化したときに、データを最もコスト効率の高いアクセス層に自動的に移動させる事が可能|
|モニタリングとオートメーション|少額の月額料金が発生する|
|階層|3つの低レイテンシーと高スループットアクセス階層を有している<BR><BR>自動アーカイブ階層も2つある|
|ユースケース|アクセスパターンが不明、変更される、予測不能なデータに対して推奨されるストレージクラス|
|サポートしている機能|S3のすべての機能が利用可能|
|3つの階層|・最初に高頻度アクセス階層に配置される<BR><BR>・30日連続してアクセスがなかった場合、低コストアクセス階層に自動的に移動する<BR><BR>・90日間アクセスされていない場合、アーカイブインスタンスアクセス階層に移動する|
|2つのアーカイブ階層|アーカイブ機能を有効にし、2つのアクセス階層を追加する<BR><BR>・90日間以上アクセスされていないオブジェクトをアーカイブアクセス階層に移動する<BR><BR>・180日間以上アクセスされていないオブジェクトをディープアクセスアクセス階層に移動する<BR><BR>※非アクセス日数は設定できる|


## 階層間移動のイメージ
Intelligent-Tieringの各階層間のイメージは下記のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f0a90faa-37f9-6ec0-3f04-37297c88d630.png)



# 概要
下記を基に整理します。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/intelligent-tiering.html


> S3 Intelligent-Tiering ストレージクラスは、アクセスパターンが変化した際に、オペレーション上のオーバーヘッドやパフォーマンスへの影響を排除し、データを最もコスト効率の高いアクセス層に自動的に移動させることで、ストレージコストを最適化するように設計されています。オブジェクトのモニタリングとオートメーションに対して発生する少額の月額料金で、S3 Intelligent-Tiering はアクセスパターンをモニタリングし、あまりアクセスされていないオブジェクトをより低コストのアクセス階層へ自動的に移動させることができます。

-  アクセスパターンが変化したときに、データを最もコスト効率の高いアクセス層に自動的に移動させる事が可能
-  モニタリングとオートメーションに対して少額の月額料金が発生する


> S3 Intelligent-Tiering は、3 つの低レイテンシーかつ高スループットのアクセス階層で、自動ストレージコスト削減を実現します。非同期でアクセスできるデータの場合は、S3 Intelligent-Tiering ストレージクラスで自動アーカイブ機能をアクティブ化することもできます。S3 Intelligent-Tiering には取り出し料金は発生しません。低頻度のアクセス階層または Archive Instant Access 階層にあるオブジェクトに後からアクセスすると、自動的に高頻度のアクセス階層に戻されます。S3 Intelligent-Tiering ストレージクラスのアクセス階層間でオブジェクトを移動させるときに追加の階層化料金は発生しません。

- 3つの低レイテンシーと高スループットアクセス階層を有している
- 自動アーカイブも有効化することで利用できる
- Archive Instant Access 階層にあるオブジェクトにアクセスすると自動的に高頻度アクセス階層に戻される

> S3 Intelligent-Tiering は、データレイク、データ分析、新しいアプリケーションなど、オブジェクトのサイズや保持期間に関係なく、アクセスパターンが不明、変更される、または予測不可能なデータに対して推奨されるストレージクラスです。
> - S3 Intelligent-Tiering ストレージクラスは、以下を含む Amazon S3 のすべての機能をサポートします。
> - オブジェクトのアクセス層を検証する S3 インベントリ
> - データを任意の AWS リージョン にレプリケートする S3 レプリケーション
> - S3 Storage Lens でのストレージの使用状況とアクティビティに関するメトリクスの表示
> - オブジェクトデータ保護のためのサーバー側の暗号化
> - データを誤って削除しないようにする S3 オブジェクトロック
> - 仮想プライベートクラウド (VPC) のプライベートエンドポイントを介して Amazon S3 にアクセスするための AWS PrivateLink

- アクセスパターンが不明、変更される、予測不能なデータに対して推奨されるストレージクラス
- S3のすべての機能をサポートしている

## S3 Intelligent-Tiering の仕組み
> Amazon S3 Intelligent-Tiering ストレージクラスは、3 つのアクセス階層に自動的にオブジェクトを保存します。1 つの階層は高頻度アクセス用に最適化され、1 つの低コスト階層は低頻度アクセス用に最適化されます。またもう 1 つの極めてコストの低い階層は、ほとんどアクセスされていないデータに最適化されます。オブジェクトのモニタリングおよびオートメーションにかかる月額料金を抑えるために、S3 Intelligent-Tiering はアクセスパターンをモニタリングし、30 日間連続してアクセスがなかったオブジェクトを、低頻度アクセス階層に自動的に移動します。90 日間アクセスされていない場合に、オブジェクトはパフォーマンスへの影響や運用上のオーバーヘッドなしで、アーカイブインスタントアクセス階層に移動されます。

> 数分から数時間でアクセスできるデータのストレージコストを最小限に抑えるには、アーカイブ機能を有効にして 2 つのアクセス階層を追加します。オブジェクトをアーカイブアクセス階層、ディープアーカイブアクセス階層、またはその両方に階層を下げることができます。アーカイブアクセスにより、S3 Intelligent-Tiering は 90 日間以上連続してアクセスされていないオブジェクトをアーカイブアクセス階層に移動します。ディープアーカイブアクセスにより、S3 Intelligent-Tiering は 180 日間以上連続してアクセスされていないオブジェクトをディープアーカイブアクセス階層に移動します。どちらの階層でも、必要に応じて非アクセス日数を設定できます。

- 最初に高頻度アクセス階層に配置される
- 30日連続してアクセスがなかった場合、低コストアクセス階層に自動的に移動する
- 90日間アクセスされていない場合、アーカイブインスタンスアクセス階層に移動する
- アーカイブ機能を有効にし、2つのアクセス階層を追加する
    - 90日間以上アクセスされていないオブジェクトをアーカイブアクセス階層に移動する
    - 180日間以上アクセスされていないオブジェクトをディープアクセスアクセス階層に移動する
    - 非アクセス日数は設定できる


図示すると下記のようなイメージになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/814c0bf7-a451-3bda-ae5a-b99919d1d7b7.png)


> 以下のアクションによるアクセスでは、オブジェクトが下位のアーカイブアクセス階層やディープアーカイブアクセス階層に移動されません。
> - Amazon S3 コンソールを通じてオブジェクトをダウンロードまたはコピーする。
> - CopyObject または UploadPartCopy を呼び出すか、S3 バッチレプリケーションでオブジェクトをレプリケートする。これらの場合、コピーやレプリケーションオペレーションのソースオブジェクトは上位の階層に移動されます。
> - GetObject、PutObject、RestoreObject、CompleteMultipartUpload、ListParts、または SelectObjectContent を呼び出す。

> 例えば、指定した非アクセス日数 (180 日など) より前に SelectObjectContent を通じてオブジェクトがアクセスされると、そのアクションによりタイマーがリセットされます。最後の SelectObjectContent リクエストが、指定した日数に達するまでは、オブジェクトはアーカイブアクセス階層またはディープアーカイブアクセス階層に移動しません。

> 低頻度アクセス階層またはアーカイブインスタントアクセス階層にあるオブジェクトに後からアクセスすると、自動的に高頻度アクセス階層に戻されます。
> 以下のアクションは、オブジェクトを低頻度アクセス階層やアーカイブインスタントアクセス階層から高頻度アクセス階層に自動的に戻すアクセスを構成します。
> - Amazon S3 コンソールを通じてオブジェクトをダウンロードまたはコピーする。
> - CopyObject または UploadPartCopy を呼び出すか、バッチレプリケーションでオブジェクトをレプリケートする。これらの場合、コピーやレプリケーションオペレーションのソースオブジェクトは上位の階層に移動されます。
> - GetObject、PutObject、RestoreObject、CompleteMultipartUpload、または ListParts を呼び出す。

> 他のアクションは、オブジェクトを低頻度アクセス階層やアーカイブインスタントアクセス階層から高頻度アクセス階層に自動的に戻すアクセスを構成しません。次に示すのは、そのようなアクションのリストのサンプルであり、決定的なものではありません。

> - HeadObject、GetObjectTagging、PutObjectTagging、ListObjects、ListObjectsV2、または ListObjectVersions を呼び出す。
> - SelectObjectContent の呼び出しは、オブジェクトを上位の高頻度アクセス階層に移動するアクセスを構成しません。また、高頻度アクセス階層から低頻度アクセス階層へのオブジェクトの移動、さらにアーカイブインスタントアクセス階層への移動を妨げません。


操作により、アーカイブアクセス等に移動されない、自動的に高頻度アクセス階層に戻す挙動があるので下記にまとめます。

|操作 |下位のアーカイブアクセス階層や<BR>ディープアーカイブアクセス階層に移動されない※1|低頻度アクセス階層や<BR>アーカイブインスタントアクセス階層から<BR>高頻度アクセス階層に自動的に戻す※2|
|:--|:--|:--|
|S3コンソールからのダウンロード、コピー|◯|◯|
|CopyObject|◯|◯|
|UploadPartCopy|◯|◯|
|S3 バッチレプリケーションでオブジェクトをレプリケート|◯|◯|
|GetObject|◯|◯|
|PutObject|◯|◯|
|RestoreObject|◯|◯|
|CompleteMultipartUpload|◯|◯|
|ListParts|◯|◯|
|SelectObjectContent|◯|✗|
|HeadObject|?|✗|
|GetObjectTagging|?|✗|
|PutObjectTagging|?|✗|
|ListObjects|?|✗|
|ListObjectsV2|?|✗|
|ListObjectVersions|?|✗|

※1 言及されてない箇所は？としています
※2 低頻度アクセス階層、アーカイブインスタントアクセス階層から高頻度アクセス階層に戻さない操作は例になります。（他にもある可能性があります。）


## S3 Intelligent-Tiering Archive Access 層と Deep Archive Access 層からのオブジェクトの復元
下記の記事を整理します。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/intelligent-tiering-managing.html#restore-data-from-int-tier-archive

> S3 Intelligent-Tiering アーカイブ アクセス層とディープ アーカイブ アクセス層のオブジェクトにアクセスするには、復元リクエストを開始し、オブジェクトが頻繁アクセス層に移動されるまで待つ必要があります。アーカイブされたオブジェクトの詳細については、「アーカイブされたオブジェクトの操作」を参照してください。

> アーカイブ アクセス層またはディープ アーカイブ アクセス層からオブジェクトを復元すると、オブジェクトは高頻度アクセス層に戻ります。その後、オブジェクトが 30 日間連続してアクセスされない場合、オブジェクトは自動的に低頻度アクセス層に移動します。その後、少なくとも 90 日間連続してアクセスされないと、オブジェクトはアーカイブ アクセス層に移動します。少なくとも 180 日間連続してアクセスされないと、オブジェクトはディープ アーカイブ アクセス層に移動します。詳細については、「S3 Intelligent-Tiering の仕組み」を参照してください。

> アーカイブされたオブジェクトは、Amazon S3 コンソール、S3 バッチオペレーション、Amazon S3 REST API、AWS SDK、または AWS コマンドラインインターフェイス (AWS CLI) を使用して復元できます。詳細については、「アーカイブされたオブジェクトの操作」を参照してください。

- 2つのアーカイブ層にアクセスするには、復元リクエストを開始し、高頻度アクセス層に移動されるまで待つ

### アーカイブされたオブジェクトの復元
下記のドキュメントから抜粋します。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/restoring-objects.html

> 注記
> S3 Glacier Flexible Retrieval および S3 Glacier Deep Archive ストレージクラスから復元されたオブジェクトは、指定した日数だけ保存されます。次の手順では、これらのコピーの有効期限を返します。

> S3 Intelligent-Tiering Archive Access および Deep Archive Access ストレージ層から復元されたオブジェクトには有効期限がなく、代わりに Frequent Access 層に戻されます。


- 復元されたオブジェクトは指定された日数だけ保存される
- しかし、S3 Intelligent-Tiering Archive Access および Deep Archive Accessから復元されたオブジェクトには有効期限がない。代わりに高頻度アクセス層に戻される

# 実践
下記のシナリオを実際に試してみます。

1. ライフサイクルの設定
1. Intelligent-Tiering Archive 設定

:::note info
今回のシナリオでは、Intelligent-Tieringの30日、90日、180日後の状態を確認します。
そのため、確認出来次第、本ドキュメントは更新していきます。
:::


## 事前準備
### バケットの作成
まずは、バケットを作成します。今回は2つのシナリオに合わせてバケットも2つ用意します。

1. AWSにサインインします
1. S3に移動します
1. バケットを2つ作成します

### ファイルの作成
Intelligent-Tieringでは、128K以上のサイズが対象になりますので事前にファイルを作成します。

1. ローカルで事前にファイルを作成します
    ```bash
    % mkfile 130K ~/Downloads/test.dat
    % du -h test.dat                  
    192K	test.dat
    %
    ```

## 1. ライフサイクルの設定
### 設定
1. 作成したバケットを選択します
1. 次に「管理」タブをクリックします
1. 「ライフサイクルルールを作成」するをクリックします
1. 下記を指定し、「ルールの作成」をクリックします
    - ライフサイクルルール名：任意
    - ライフサイクルルールのアクション：
        - 現行バージョンのオブジェクトをストレージクラス間で移行する
        - オブジェクトの現行バージョンを有効期限切れにする（任意）
        - オブジェクトの非現行バージョンを完全に削除（任意）
        - 有効期限切れのオブジェクト削除マーカーまたは不完全なマルチパートアップロードを削除（任意）
    - オブジェクトの現行バージョンをストレージクラス間で移行する
        - ストレージクラスの移行を選択: Intelligent-Tiering
        - オブジェクト作成後の日数： 0日
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/9382c182-e4a6-a546-01d4-71d16ef57e62.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/1ae88c0b-d287-1145-650d-970738158809.png)
1. できました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/09a3875f-04b2-737a-d128-c5261ec0a037.png)

### ファイルをアップロード
1. 上記で準備したファイルをアップロードします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ca6a0cef-0b9e-eb0a-e3a9-0f482d85ec6a.png)

### 1日目の状態
1. ストレージクラスはスタンダードであることがわかります
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/c19d247b-c62b-ab68-f6dc-8c6a20de6b9c.png)


## 2. Intelligent-Tiering Archive 設定
### 設定
1. 作成したバケットを選択します
1. 次に、「プロパティ」タブをクリックします
1. 下記を指定し、「作成」をクリックします
    - 設定名：任意
    - 設定スコープ：バケット内のすべて
    - ステータス：有効
    - アーカイブルールのアクション
        - Archive Access階層：90日
        - Deep Archive Access階層：180日
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f3fbac52-9332-53ef-89ee-a415b80be4cc.png)
1. できました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ef461d94-12f7-18d7-6079-1a48b3dfbafd.png)

### ファイルをアップロード
1. 上記で準備したファイルをアップロードします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b475b18c-5271-33b7-a659-5621b996469f.png)

### 1日目の状態
1. ストレージクラスはスタンダードであることがわかります
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4a331dd1-1dad-e96f-a71a-788473c85ea1.png)

# 考察
今回、Intelligent-Tieringについて、改めて整理しました。
今後は、実際のストレージクラスの状態が分かり次第アップデートしていきます。

# 参考
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/intelligent-tiering.html

https://docs.aws.amazon.com/AmazonS3/latest/userguide/intelligent-tiering-managing.html#restore-data-from-int-tier-archive

https://docs.aws.amazon.com/AmazonS3/latest/userguide/restoring-objects.html