Amazon S3 Express One Zoneを試してみた

# 背景・目的
先日、[Announcing the Amazon S3 Express One Zone storage class](https://aws.amazon.com/about-aws/whats-new/2023/11/amazon-s3-express-one-zone-storage-class/?nc1=h_ls)が発表されたので、どのようなものか確認し試してみます。

# まとめ
S3 Express One Zone storage classには、下記の特徴があります。
|特徴|概要|
|:--|:--|
|目的|一桁ミリ秒のデータアクセスを提供するS3ストレージクラス<BR>アプリケーションはリクエストが最大1桁速く完了するメリットを享受可能|
|パフォーマンス|現行のオブジェクトストレージと比較して最大10倍の速度|
|コスト|リクエストコストがS3 Standardの50%低減|
|トランザクション|1秒あたり数十万のトランザクションをサポート|
|配置|1つのアベイラビリティゾーン(AZ)に配置|
|可用性|単一のAZで99.95%を実現し、Amazon S3サービスレベルアグリーメント(SLA)に基づいている|
|冗長性|単一のAZ内の複数のデバイスに冗長的に保存され、冗長性が失われた場合には検出され、新しいデバイスに自動的に移行して修復される|
|ワークロード|低レイテンシが求められるアプリケーションに最適<BR>例:インタラクティブなワークロード、分析、機械学習|
|特性|小規模アクセスや多数のランダムアクセスに対応|
|他のAWSサービスとの連携|Amazon EMR、Amazon Athena、Amazon SageMakerなどの分析やAI/MLワークロードをサポートする他のAWSサービスと併用可能|
|ディレクトリバケットを使用|汎用バケットと比較して機能は制限されている。<BR>オブジェクトのACLや CloudTrailデータイベントなどがない。|
|料金|Read/Write等のリクエスト料金は約半額だが、格納コストは倍近くかかる。|


# 概要
## What is S3 Express One Zone?
[What is S3 Express One Zone?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html)を元に整理します。

下記の特徴があります。
- 一桁ミリ秒のデータアクセスを目的としたS3ストレージクラス
    - アプリケーションはリクエストが最大1桁速く完了する可能性がある。
- 現在のオブジェクトストレージと比較して、最大10倍速い
- リクエストコストは、S3 Standardの50%低い
- 数十万トランザクション/秒をサポート
- 1つのAZに配置
    - 可用性は、単一AZで99.95%を実現するように設計されており、SLAが定義されている（ [Amazon S3 Service Level Agreement](https://aws.amazon.com/s3/sla/)）
    - 単一AZの複数デバイスに冗長的に保存され、冗長性が失われた場合に検出され、新しいデバイスに自動的に移動し修復する。
- 低レイテンシー向けのアプリケーションに最適
    - インタラクティブなワークロード
    - 分析、機械学習
    - 小規模アクセスや多数のランダムアクセス
    - EMR、Athena、SageMakerなどの分析やAL/MLのワークロードをサポートする他のAWSと併用できる。
- VPCe、SSE-S3、パブリックブロックアクセス等にも対応

### Overview
:::note info
特徴的な機能をピックアップして整理します。全てではありませんので、詳細は[ドキュメント](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html)をご確認ください。
:::
#### Directory buckets
Amazon S3バケットには、2種類が存在します：汎用バケットとS3ディレクトリバケットです。

汎用バケットは、S3の多くのワークロードで使用される標準的なS3バケットで、フラットな保存機構を採用しています。
S3ディレクトリバケットは、S3 Express One Zoneストレージクラス専用に使用されるもので、データを階層的に整理することが特徴です。
ディレクトリバケットはプレフィックス制限がなく、各ディレクトリは水平方向に拡張することが可能です。

S3 Express One Zoneを選択すると、オブジェクトストレージとコンピュートリソースを同じ場所に配置できるアベイラビリティゾーン(AZ)を選択できます。これにより、ストレージと計算リソースの間のデータアクセス速度が最適化されます。


下記にディレクトリバケットと汎用バケットの比較を記載します。

| 特徴               | 汎用バケット              | S3ディレクトリバケット         |
|------------------|----------------------|-------------------------|
| ストレージタイプ         | 標準的なS3バケット         | S3 Express One Zone専用   |
| データの保存機構         | フラットな保存機構          | 階層的な整理               |
| 使用されるストレージクラス | 多くのS3ストレージクラス     | S3 Express One Zone     |
| その他制約事項など|アカウント単位で最大100バケットまで（ソフトリミット） |アカウント単位で最大10バケットまで（ソフトリミット） |


#### Session-based authorization
S3 Express One Zoneを使用すると、セッションベースのメカニズムを通してリクエストを認証、承認する。

### Features of S3 Express One Zone
#### Access management and security

- S3 ブロック パブリック アクセス:すべての S3 ブロック パブリック アクセス設定は、デフォルトでバケット レベルで有効
- S3 オブジェクト所有権 (デフォルトで強制されるバケット所有者) :アクセス制御リスト (ACL) はディレクトリ バケットではサポートされません。ディレクトリバケットは、S3 オブジェクト所有権のバケット所有者強制設定を自動的に使用


# 実践
:::note info
2023/12/10現在で、米国東部 (バージニア北部)、米国西部 (オレゴン)、欧州 (ストックホルム)、アジアパシフィック (東京) のみ利用出来ます。
:::
[Announcing the new Amazon S3 Express One Zone high performance storage class](https://aws.amazon.com/jp/blogs/aws/new-amazon-s3-express-one-zone-high-performance-storage-class/)の記事を参考に試してみます。

## バケットの作成
1. AWSにログインし、S3のトップページに移動します。
1. ディレクトリバケットのタブが増えています。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/426b75e9-8a9a-cb0f-6404-8d463f8acb81.png)

1. ①「ディレクトリバケット」をクリックし②「バケットを作成」ボタンをクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/bd786940-3b6b-80a1-964e-a4595959645e.png)

1. 下記を入力し、最後に「バケットを作成」をクリックします。
    - AWSリージョンを選択。現在、利用可能なリージョンは限定されるので注意が必要です。今回はus-west-2で作成しています。
    - バケットタイプ：ディレクトリ
    - AZ：選択したリージョンのうち一つ。今回はusw2-az1を選択。
    - チェックボックス：AZ1つに保存される旨を認識して有効化。
    - バケット名：任意。バケット名のサフィックスに、AZと`--x-s3`が自動で付与されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/3567104f-54e8-fbea-f8c9-c30fa0433922.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/cd727f79-32af-1617-9394-d3777731e940.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/cdd1c25b-75df-3e77-bcb4-83bf9d2bfa12.png)

1. 出来ました。タブについて汎用バケットと比較し、管理とアクセスポイントがないようです。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/560eed9e-1ede-153a-11b9-bb40dd852fb9.png)

1. オブジェクトタブをクリックします。概要と暗号化設定しかありません。汎用バケットと比較してCloudTrailのデータイベント、オブジェクトロックなどは用意されていせん。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/2e37add7-fb6d-9109-78b3-1255e4a93b53.png)

1. アクセス許可タブをクリックします。汎用バケットと比較して、ACL、CORSがありません。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/23c94044-e42a-bfe5-7153-6218133030c5.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/e9914559-5d97-fd5b-1bf6-57bf94e858a1.png)

1. メトリクスタブをクリックします。汎用バケットと比較して、ストレージクラス分析、レプリケーションメトリクスはありません。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/54a0df18-8e98-0de0-0073-9cd8880d7d96.png)

## インポート
既存の汎用バケットのコンテンツをディレクトリバケットにコピーできるようです。

1. ①「ディレクトリバケット」を選択し、②「インポート」ボタンをクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/cda668c6-d1c1-d89f-75fe-ad03829388e6.png)

1. 下記を入力し、「インポート」をクリックすると、バッチオペレーションによりコピーされます。
    - ソース：汎用バケット。今回は、過去に作成したticktdbのlistingデータを使用します。
    - IAMロール
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ca68198d-7311-099c-6065-74bbbe981f2a.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/fdf6d5f1-0853-8769-123d-efaee4333512.png)

1. しばらくすると、画面がバッチオペレーションの画面に切り替わります。ステータスは準備中です。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f24e4f80-ac81-4af9-476e-32b944f5de2e.png)

1. しばらくすると、ステータスは「完了済み」になりました。
1. コピーされたファイルのストレージクラスも「S3 Express One Zone」になっていることがわかります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/87b58c88-a788-de77-cbd1-59127c6c0474.png)

1. S3 Selectは出来ないようです。アクションタブに見当たりませんでした。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/8e911eef-daf2-c27b-b8fe-6554430d3fb4.png)

# 考察
今回、S3 Express One Zoneを試してみました。まだ、その特徴的な性能（レイテンシ）を確認していませんが、今後はAthena等を使って比較し、その効果を検証したいと考えています。
また、まだ全てを把握しているわけではありませんが、以下の特徴に基づき、データマートでのETLプロセスの最後のデータマートとして利用するワークロードや、データ基盤のランディングゾーンでのtext/gzなど読み込み効率が低いRawデータの一時的な配置に適していると考えられます。

- 低レイテンシー
- 料金は、S3 Standardと比較して、Read/Writeが約半額、保管コストはおおよそ倍
- 1AZに配置


# 参考
https://aws.amazon.com/about-aws/whats-new/2023/11/amazon-s3-express-one-zone-storage-class/?nc1=h_ls

https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html

https://aws.amazon.com/jp/s3/storage-classes/express-one-zone/

https://aws.amazon.com/jp/blogs/aws/new-amazon-s3-express-one-zone-high-performance-storage-class/

https://aws.amazon.com/s3/sla/