[アップデート] S3 Express One Zone のディレクトリバケットでリクエストメトリクスを CloudWatch で取得できるようになりました

[アップデート] S3 Express One Zone のディレクトリバケットでリクエストメトリクスを CloudWatch で取得できるようになりました

2026.04.07

はじめに

2026 年 3 月 31 日、Amazon S3 Express One Zone(ディレクトリバケット)でリクエストメトリクスを CloudWatch で取得できるようになりました。これまでディレクトリバケットで取得できたのはストレージメトリクス(BucketSizeBytes / NumberOfObjects)のみで、リクエスト数やレイテンシはモニタリングできませんでした。今回のアップデートで 12 種類のリクエストメトリクスが 1 分間隔で取得可能になり、S3 Express One Zone の運用監視の選択肢が広がりました。

https://aws.amazon.com/jp/about-aws/whats-new/2026/03/s3-express-one-zone-cloudwatch-request-metrics/

確認結果

  • ディレクトリバケットの「メトリクス」タブに「リクエストメトリクス」セクションが追加された
  • AllRequests / BytesDownloaded / FirstByteLatency など 13 種類のメトリクスを 1 分間隔で取得でき、ボトルネックの特定やアラート設定に使える
  • プレフィックス・タグでのフィルタリングは非対応(設定はバケット全体またはディレクトリ単位になる)な点が標準 S3 との違い

バケットメトリクス_-_S3_バケット_mount…-s3___S3___ap-northeast-1-3.png

S3 Express One Zone とは

S3 Express One Zone は、単一アベイラビリティゾーン内でミリ秒単位のレイテンシを実現する高性能ストレージクラスです。通常の S3 バケット(汎用バケット)とは異なる「ディレクトリバケット」という形式で提供され、バケット名の末尾に --azid--x-s3 という形式の識別子が付きます。

リクエストスループットが高い HPC ワークロードや機械学習のチェックポイント保存などで使われるケースが多い一方、これまでリクエストレベルのモニタリング手段が限られていました。

利用可能なメトリクス

ストレージメトリクス(無料・デフォルトで取得)

メトリクス名 説明
BucketSizeBytes バケットに保存されているデータの合計サイズ
NumberOfObjects 保存されているオブジェクトの総数

リクエストメトリクス(有料・オプトイン)

今回のアップデートで追加された 13 種類です。CloudWatch カスタムメトリクスと同じ料金体系で課金されます。

種別 メトリクス名 説明
リクエスト数 AllRequests HTTP リクエスト総数
リクエスト数 GetRequests GET 操作のリクエスト数
リクエスト数 PutRequests PUT 操作のリクエスト数
リクエスト数 DeleteRequests DELETE 操作のリクエスト数
リクエスト数 HeadRequests HEAD 操作のリクエスト数
リクエスト数 PostRequests POST 操作のリクエスト数
リクエスト数 ListRequests バケット内容をリストするリクエスト数
データ転送 BytesDownloaded ダウンロードリクエストのバイト数
データ転送 BytesUploaded アップロードリクエストのバイト数
エラー 4xxErrors クライアントエラーの件数
エラー 5xxErrors サーバーエラーの件数
レイテンシ FirstByteLatency リクエスト完全受信からレスポンス返信開始までの経過時間(ms)
レイテンシ TotalRequestLatency 最初のバイト受信から最後のバイト送信までの経過時間(ms)

詳細: Metrics and dimensions for directory buckets - Amazon Simple Storage Service

やってみた

既存のディレクトリバケットに対してリクエストメトリクスを有効化し、CloudWatch でグラフを確認します。
新しいメトリクスを追加するにはディレクトリバケットに対して「フィルター」という設定を入れます。

コンソールでフィルターを作成する

S3 コンソールの左ペインで「ディレクトリバケット」を選択し、対象のバケットをクリックします。

S3_バケット___S3___ap-northeast-1-2.png

バケット詳細画面の「メトリクス」タブを開き、「追加のチャートを表示」をクリックします。

mountpoint-for-s3--apne1-az4-…3_バケット___S3___ap-northeast-1.png

「リクエストメトリクス」セクションに何も設定されていない状態が確認できます。

バケットメトリクス_-_S3_バケット_mount…-s3___S3___ap-northeast-1.png

「フィルターを作成」をクリックします。フィルター名に任意の名前を入力し(例: DevIO)、フィルタースコープで「このフィルターはバケット内のすべてのオブジェクトに適用されます」を選択して「変更の保存」をクリックします。

リクエストメトリクスフィルターを作成_-_S3_…3___S3___ap-northeast-1.png

設定完了後、メトリクスタブのフィルター一覧に追加されたフィルターが表示されます。

バケットメトリクス_-_S3_バケット_mount…-s3___S3___ap-northeast-1-2.png

CloudWatch でメトリクスを確認する

フィルター作成後、バケットに対してオブジェクトの PUT / GET 等を実行してリクエストを発生させます。メトリクスが CloudWatch に反映されるまで約 15 分かかりました。グラフに AllRequests 等の値が表示されていれば、フィルター設定が正常に働いています。

メトリクス___CloudWatch___ap-northeast-1-8.png

テスト用リクエスト生成コマンド

メトリクスを発生させるためのコマンドを Claude に作成してもらいました。各パターンを順番に実行すると、AllRequests・BytesUploaded・4xxErrors・FirstByteLatency など複数のメトリクスが記録されます。

BUCKET="your-bucket-name--azid--x-s3"

Pattern 1: 基本 PUT / GET

echo "hello from s3 express test" > /tmp/test.txt
aws s3api put-object --bucket $BUCKET --key test/hello.txt --body /tmp/test.txt
aws s3api get-object --bucket $BUCKET --key test/hello.txt /tmp/hello-output.txt
cat /tmp/hello-output.txt

Pattern 2: 連続 PUT × 20(PutRequests を増やす)

for i in $(seq 1 20); do
  echo "test data $i - $(date)" > /tmp/file-$i.txt
  aws s3api put-object --bucket $BUCKET --key test/batch/file-$i.txt --body /tmp/file-$i.txt
done

Pattern 3: LIST + HEAD

aws s3api list-objects-v2 --bucket $BUCKET --prefix test/
aws s3api head-object --bucket $BUCKET --key test/hello.txt
aws s3api head-object --bucket $BUCKET --key test/batch/file-1.txt

Pattern 4: ファイル転送 5MB(BytesUploaded / BytesDownloaded)

dd if=/dev/urandom of=/tmp/large-5mb.bin bs=1M count=5
aws s3api put-object --bucket $BUCKET --key test/large/5mb.bin --body /tmp/large-5mb.bin
aws s3api get-object --bucket $BUCKET --key test/large/5mb.bin /tmp/large-5mb-download.bin

Pattern 5: 意図的な 4xx エラー(4xxErrors)

aws s3api get-object --bucket $BUCKET --key nonexistent/key.txt /tmp/err.txt || true
for i in $(seq 1 5); do
  aws s3api get-object --bucket $BUCKET --key nonexistent/error-test-$i.txt /tmp/err-$i.txt 2>/dev/null || true
done

Pattern 6: DELETE

aws s3api delete-object --bucket $BUCKET --key test/hello.txt
aws s3api delete-objects --bucket $BUCKET --delete '{
  "Objects": [
    {"Key": "test/batch/file-1.txt"},
    {"Key": "test/batch/file-2.txt"},
    {"Key": "test/batch/file-3.txt"},
    {"Key": "test/batch/file-4.txt"},
    {"Key": "test/batch/file-5.txt"}
  ],
  "Quiet": false
}'

Pattern 7: 連続 GET × 10(レイテンシ観測)

for i in $(seq 1 10); do
  { time aws s3api get-object --bucket $BUCKET --key test/large/5mb.bin /dev/null; } 2>&1 | grep real
done

クリーンアップ

KEYS=$(aws s3api list-objects-v2 --bucket $BUCKET --prefix test/ --query 'Contents[].Key' --output json)
if [ "$KEYS" != "null" ] && [ -n "$KEYS" ]; then
  OBJECTS=$(echo $KEYS | jq '[.[] | {"Key": .}]')
  aws s3api delete-objects --bucket $BUCKET --delete "{\"Objects\": $OBJECTS, \"Quiet\": false}"
fi

料金

リクエストメトリクスは CloudWatch カスタムメトリクスと同じ料金体系で課金されます。1 フィルターあたり 1 メトリクスが CloudWatch に送信されるため、フィルター数 × メトリクス種類分が課金対象になります。現時点の東京リージョン価格であれば、$0.3 × 13 メトリクスで 1 ディレクトリバケットあたり$3.9/月の計算です。

ストレージメトリクス(BucketSizeBytes / NumberOfObjects)は引き続き無料です。

料金の詳細は以下を参照してください。

https://aws.amazon.com/cloudwatch/pricing/

おわりに

ディレクトリバケットはこれまで「速いけど標準 S3 と比べると機能が足りない」という印象がありましたが、今回のアップデートでリクエストレベルの可視性が上がりました。これまで単価が下がったりライフサイクルルールを設定できるようになったりと機能追加されています。S3 Storage Lens はまだ非対応です。Storage Lens との組み合わせが実現すれば、複数バケットにまたがるリクエスト傾向をひとつのダッシュボードで把握できます。個人的にはそこが対応してほしい機能です。

参考

この記事をシェアする

関連記事