LoginSignup
4
0

re:Invent 2023 で発表されたAmazon S3 Express One Zoneを使ってみる

Posted at

はじめに

この記事は一休.com Advent Calendar 2023 7日目の記事です。
AWS re:Invent 2023で発表されたAmazon S3 Express One Zoneの検証をしてみたいと思います。

Amazon S3 Express One Zoneとは?

2023/11/28にAWSから新しいストレージクラスであるAmazon S3 Express One Zoneが発表され、その日のうちに東京リージョンにもGAされました。

特徴

  • S3 Standard ストレージ クラスよりも最大 10 倍優れたパフォーマンスを提供するように設計されている
  • 1秒あたり数十万のリクエストをサポートしている
  • S3 Standard ストレージ クラスよりも 50% 低いリクエストコスト

データを比較的短期間保持して、その間に非常に頻繁にアクセスする用途に向いているそうです。

制約

  • バケット名に必ずアベイラビリティゾーンIDを指定する必要がある
  • データの保存先は1ゾーンに限られるため、保存しているアベイラビリティゾーンに障害が起きるとデータが失われる可能性がある
  • データ保存料金がStandardと比較して高い

パフォーマンスが上がる一方、可用性が下がるためユースケースに合った使い方が必要です。
使える用途としては、消えても復元できるようなデータに限られそうですね。

コスト

S3(Standard) S3(Express)
ストレージ料金(GB単価) 0.025USD 0.18USD
PUT, COPY, POST, LIST $0.0047/1,000 requests  $0.0024/1,000 requests
GET, SELECT $0.00037/1,000 requests $0.00019/1,000 requests

※ 2023/12/6時点の東京リージョンの価格

ストレージコストが10TB保存したとすると、23万のコストアップ...
クエリ単価ではExpressの方が安いので、S3に対して頻繁にアクセスされるようなケースではコストメリットがあると考えて良さそうですね。

S3 StandardとS3 Expressのパフォーマンスを比べてみる

お金を払ってまで早いのか...?
そこが気になるところ。

比較にあたって、以下のケースを検証してみました。

  1. 大きいデータのwrite/read比較
  2. 小さい大量データのwrite/read比較

2本勝負です!!やってみましょう

1. 大きいデータのread/write比較

検証用として、700MBの大きなファイルを用意して、データを読み書きしてみます。

まずはバケットへの書き込み(write)をS3 Standard/S3 Expressで比較してみます。
速度の測定はtimeコマンドで行いました。

S3 Standard(Write)

$ time aws s3 cp test.gz s3://s3-standard-test/
upload: ./test.gz to s3://s3-standard-test/test.gz

real	0m5.218s

結果 5.2s

S3 Express(Write)

$ time aws s3 cp test.gz s3://s3-express-test--apne1-az4--x-s3/
upload: ./test.gz to s3://s3-express-test--apne1-az4--x-s3/test.gz

real	0m2.321s

結果 2.3s
S3 Expressが2倍程度早い!

次はバケットからの読み込み(read)をS3 Standard/S3 Expressで比較してみます。

S3 Standard(Read)

$ time aws s3 cp s3://s3-standard-test/test.gz .
download: s3://s3-standard-test/test.gz to ./test.gz

real	0m3.756s

結果 3.7s

S3 Express(Read)

$ time aws s3 cp s3://s3-express-test--apne1-az4--x-s3/test.gz .
download: s3://s3-express-test--apne1-az4--x-s3/test.gz to ./test.gz

real	0m3.918s

結果 3.9s

S3 Standardの方が若干早そう
ちなみに、疑って数回試行してみましたが、結果変わらずStandardの方が早かったです。
なぜだろう...

2. 小さい大量データのread/write比較

小さい大量データの読み書きをしてみます。
3〜5KB程度のファイルをfor文で1万件アップロードする簡易なscriptを動かして検証してみます。

import boto3
import json
import gzip
import io

s3 = boto3.resource("s3",region_name="ap-northeast-1")
bucket="test-bucket"
filename="test10000count.gz"
f = gzip.open(filename, 'r')

for row in f.readlines():
    d = json.loads(row)
    s3.Bucket(bucket).put_object(Key=f'{d["filekey"]}.text', Body=row)

※boto3 versionは1.33.8を使いました

まずはバケットへの書き込みをS3 Standard/S3 Expressで比較してみます。

S3 Standard(Write)

$ time python3 s3_put.py

real	8m10.806s

結果 8m10s

S3 Express(Write)

$ time python3 s3_put.py

real	1m26.347s

結果 1m26s

S3 Expressの圧勝でした
予想ではwriteは2倍程度かな...と思っていましたが、想像以上です。

次はバケットからの読み込みをS3 Standard/S3 Expressで比較してみます。

S3 Standard(Read)

$ time python3 s3_read.py

real	5m50.423s

結果 5m50s

S3 Express(Read)

$ time python3 s3_read.py

real	0m55.724s

結果 55s

S3 Expressの圧勝でした

6倍違うとは!!これはかなり使えそうです。

検証してみて

簡単な検証ですが、S3 ExpressはStandardと比べて全体的に早い結果が得られました。
さまざまなケースで活用できそうですね。

私的に使えそう!と思うケースは、分析用途で使っているAWS AthenaのストレージをS3 ExpressにすることでRead/Writeのクエリを高速化できて分析業務がもっと捗るかも?と思いました。
今度やってみようと思います!

End.

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0