S3 Express One Zoneと標準S3の性能をAWSCLIで比較してみた

S3 Express One Zoneと標準S3の性能を、awscliを利用して CloudFrontのアクセスログ(約4GB)の転送所要時間で比較してみました。
2023.12.11

re:Invent2023 で発表された、S3の新しいストレージクラス、「Amazon S3 Express One Zone」。 その性能傾向を確認するため、CLIで総容量4GB、1.2万オブジェクトの転送を実施して、従来(S3スタンダード)と比較する機会がありましたので紹介させて頂きます。

準備

AWS東京リージョンに検証用のEC2と、S3を用意しました。

EC2

  • Instance type: c7gd.large
  • AMI: al2023-ami-2023.2.20231113.0-kernel-6.1-arm64
  • IAM Role: PowerUserAccess 相当付与
  • AZ: ap-northeast-1a (apne1-az4)

awscli

CLIは最新バージョンに更新しました。

sudo dnf remove awscli -y
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
sudo ln -s /usr/local/bin/aws /usr/bin/aws
$ aws --version
aws-cli/2.15.0 Python/3.11.6 Linux/6.1.61-85.141.amzn2023.aarch64 exe/aarch64.amzn.2023 prompt/off

インスタンスストア

作業領域として c7gd.large のインスタンスストアを利用しました。

sudo sh -c "mkfs.ext4 /dev/nvme1n1; mkdir -p /mnt/nvme1n1; mount /dev/nvme1n1 /mnt/nvme1n1;"
sudo sh -c "mkdir -p /mnt/nvme1n1/tmp; chmod 777 /mnt/nvme1n1/tmp;"
$ df -h /dev/nvme1n1
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme1n1    108G   28K  103G   1% /mnt/nvme1n1

CloudFrontの標準アクセスログ、総容量は4.1GB、12000強のファイルを用意しました。

$ ls -lah | head -n 8
total 4.1G
drwxr-xr-x. 2 ec2-user ec2-user  860K Dec 10 16:03 .
drwxrwxrwx. 5 root     root      4.0K Dec 10 16:01 ..
-rw-r--r--. 1 ec2-user ec2-user  1007 Dec  9 08:36 E2LAXXXXXXXXXX.2023-11-02-15.6523171c.gz
-rw-r--r--. 1 ec2-user ec2-user   533 Dec  9 08:36 E2LAXXXXXXXXXX.2023-11-02-15.83230f88.gz
-rw-r--r--. 1 ec2-user ec2-user  1.0K Dec  9 08:36 E2LAXXXXXXXXXX.2023-11-02-15.a45bf262.gz
-rw-r--r--. 1 ec2-user ec2-user  1.9K Dec  9 08:36 E2LAXXXXXXXXXX.2023-11-02-15.a77ab92e.gz
-rw-r--r--. 1 ec2-user ec2-user  1.5K Dec  9 08:36 E2LAXXXXXXXXXX.2023-11-02-15.c21876a0.gz

$ ls -1 | wc -l
12086

$ ls -l | awk '{s+=$5; n++} END {print s/n}'
354541

S3

東京リージョンに3つのS3バケットを作成しました。

  • 汎用 (Standard)
  • ディレクトリ (S3 Express One Zone) ‐ apne1-az4 ‐ apne1-az1

測定

「s3 sync」を実施、S3への書き込み(アップロード)と、読み取り(ダウンロード)の所要時間を求めました。

time aws s3 sync . s3://<測定対象S3バケット>/cflog/ > /dev/null
time aws s3 sync s3://<測定対象S3バケット>/cflog/ ./download/ > /dev/null

結果

書き込み

ストレージクラス real user sys
S3 Standard 1m51.281s 0m45.076s 0m11.347s
Express One Zone (別AZ) 0m31.894s 0m29.967s 0m7.471s
Express One Zone (同一AZ) 0m31.407s 0m29.636s 0m7.079s

読み込み

ストレージクラス real user sys
S3 Standard 1m37.729s 0m39.345s 0m9.872s
Express One Zone (別AZ) 0m53.404s 0m37.689s 0m11.101s
Express One Zone (同一AZ) 0m52.899s 0m37.405s 0m11.641s

コスト比較

東京リージョンの S3(標準)と、Express One Zone、ストレージとAPI課金のコストを比較しました。

ストレージクラス Storage pricing PUT, COPY, POST, LIST requests (per 1,000 requests) GET, SELECT, and all other requests (per 1,000 requests)
Standard $0.025 per GB $0.0047 $0.00037
S3 Express One Zone $0.18 per GB $0.0024 $0.00019

まとめ

CLIを利用した簡易な検証ですが、 従来のS3(標準)と比較し Express One Zoneのストレージクラスは高速。特に書き込み時の待機時間が少ない利用ができる傾向が確認できました。

Express One Zone、S3標準と比較すると、月額のストレージコストは割高ですが API実行コストは半額の設定。 長期保管の必要がない中間データ、一連の処理が完了した後に撤去するファイル置き場としての適正が高いものと思われます。

Amazon Athenaで、クエリ結果からテーブル作成する CTASクエリの出力先として最適な利用が出来ると思われますが、その検証は改めて試みてみたいと思います。

CREATE TABLE cloudfront_logs_az1_p
WITH (
     format = 'PARQUET',  
     external_location = 's3://<バケット名>--apne1-az1--x-s3/PARQUET') 
AS SELECT 
date, time, location, bytes, request_ip, method, host, uri, status, referrer, user_agent
FROM "default"."cloudfront_logs"