【まったくの別物】 S3 Express One Zone が出たついでに S3 Transfer Acceleration を思い出そう。

こちらは [AWS for Games Advent Calendar 2023](https://qiita.com/advent-calendar/2023/aws-for-games) の 13日目の記事です。

re:Invent 2023 のキーノートセッションで発表された Amazon S3 Express One Zone は AWS ユーザーの注目を集めたアップデートの１つだったのではないでしょうか？

S3 Express One Zone は Standard ストレージクラスに比較して、最大10倍のパフォーマンスを提供する新しいストレージクラスとされています。

”S3", "Express" を見聞きしたとき、"S3 Transfer Acceleration" を思い出したのですが、調べてみると S3 Transfer Acceleration が登場したのは 2016年4月のことでした。もしかして、あまり知られていないかもと思ったので、それぞれ簡単におさらいできればと思います！

## S3 Express One Zone

### ”S3 Express One Zone は 10 倍速い” の意味
S3 Express One Zone について書いている記事が各所にたくさんあるので詳細説明はここでは省略するとして、ざっくり言うとこれまでのストレージクラスとは違った内部アーキテクチャを採用し、ストレージのレイテンシーを小さくしました！というものです。

![s3-express-1z-001.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983763/27d4d55f-4c80-3b27-f702-e83bbc06ab83.gif)

また、他のストレージクラスや、他サービスとのレイテンシ比較は以下のようになっており、この点で Standard よりも 10 倍高速であるとされています。

![s3-express-1z-002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983763/2c8471d7-7bcd-6e44-229e-2a43cbf1d09f.png)

### ゲームにおける S3 Express One Zone の使い所
3AZ 以上の冗長化が必須でない箇所を、Standard から Express One Zone のバケットに置き換える(*)ことで、レイテンシーが小さくなるメリットを享受したいところです。

※ 既存バケットのストレージクラスを Express One Zone に変更することはできないので、新規に Express One Zone 用のディレクトリバケットを作成する必要がある点にご注意ください。

例えば、専用ゲームサーバーの初期起動時のデータ取得先の S3 バケットを Express One Zone にすることで資材のアップデートやサーバーのスケールアウトにかかる時間を短くできるかもしれません。あるいはビルドパイプラインで参照される S3 バケットを Express One Zone にすることでビルド時間を短縮することができるかもしれません。

こうした用途で使われる S3 バケットは資材の原本を安全に保管しておくというより、どちらかというと資材の配布目的で使われているので 3AZ 以上での冗長化は必須要件ではないことが多く、Express One Zone を採用しやすいところなのかなと思います。

## S3 Transfer Acceleration
### S3 Transfer Acceleration の高速化
S3 Transfer Acceleration を使うことでクライアントから S3 へのアクセスはエッジロケーションを経由し、最適化されたネットワークパスで Amazon S3 に到達できます。そうすることで、クライアントと S3 間の NW レイテンシーを小さくしようというわけです。

一般に、S3 バケットのあるリージョンとクライアントが物理的に遠い方が S3 Transfer Acceleration の導入効果が大きくなります。逆に、クライアントと ターゲットの S3 の距離が近いケースでは、恩恵は小さくなります。

リージョンごとに、どれくらい S3 Transfer Acceleration の導入効果が期待できるのか計測することができるツール([Amazon S3 Transfer Acceleration Speed Comparison](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/transfer-acceleration-speed-comparison.html)) があります。東京都内の自宅からツールを実行してみると以下のようになりました。

![Screenshot 2023-12-13 at 9.21.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983763/16185d12-690f-b01b-a166-e19c1501db2d.png)

東京から遠いリージョンで高速化が期待できそうな結果になっています。ただし、東京リージョンに関しては S3 Transfer Acceleration を使うとむしろ、遅くなるという結果になりました。

ちなみに、Transfer Acceleration を使った結果、使わないよりも遅くなることが確認された場合Transfer Acceleration に対する課金はされないようです。
>お客様が S3 Transfer Acceleration を使用してオブジェクトをアップロードするたびに、AWS ではそのサービスが、通常の Amazon S3 による転送よりも高速であるかどうかを確認します。同じ宛先 AWS リージョンへの同じオブジェクトの通常の Amazon S3 による転送よりも高速ではないと判断した場合は、そのアップロードで使用する S3 Transfer Acceleration の料金を AWS が請求することはなく、S3 Transfer Acceleration システムをバイパスする可能性があります。

引用元: S3 料金ページ https://aws.amazon.com/jp/s3/pricing/

### ゲームにおける S3 Transfer Acceleration の使い所
ローカル環境やオンプレミスサーバから直接、遠距離のリージョンの S3 バケットへアセットをアップロードする運用があるときはファイル転送を高速化する目的で導入できる可能性があります。オンプレミス環境でビルドしたアセットを海外展開向けに配信するといったシチュエーションが考えられます。

ただし、海外向けと国内向けで同じアセットを配信する場合は、東京リージョンの S3 バケットに格納し、CloudFront で各地に配信するという構成で十分かもご確認いただくと良さそうです。
また、大容量ファイルのアップロードに関しては、アップロード処理の並列化や `max_concurrent_requests` など CLI の設定見直しも合わせて検討ください。
参考: [Amazon S3 の sync コマンドの転送パフォーマンスを向上させるにはどうすればよいですか?](https://repost.aws/ja/knowledge-center/s3-improve-transfer-sync-command)

## まとめ
Amazon S3 Express One Zone は、Standard ストレージクラスと比較して最大10倍のパフォーマンスを提供する新しいストレージクラスです。まずは何気なく Standard で使っているところを、Express One Zoneのバケットに置き換えることで、レイテンシーが小さくなるメリットを感じていただければと思います。

一方、S3 Transfer Acceleration が最適化するのはクライアントとS3間の通信です。気軽に使っていただける機能なので、海外リージョンの S3 バケットへのアクセスが必要に利用検討いただければと思います。

S3 Express One Zone, S3 Transfer Acceleration とも、こんなユースケースがありますーというのも出てくるかと思いますので、皆さまのアイディアをシェアいただけると幸いです！

(免責) 本記事の内容はあくまでも個人の意見であり、所属する企業や団体は関係ございません。