[アップデート] S3 Express One Zone のディレクトリバケットでリクエストメトリクスを CloudWatch で取得できるようになりました
はじめに
2026 年 3 月 31 日、Amazon S3 Express One Zone(ディレクトリバケット)でリクエストメトリクスを CloudWatch で取得できるようになりました。これまでディレクトリバケットで取得できたのはストレージメトリクス(BucketSizeBytes / NumberOfObjects)のみで、リクエスト数やレイテンシはモニタリングできませんでした。今回のアップデートで 12 種類のリクエストメトリクスが 1 分間隔で取得可能になり、S3 Express One Zone の運用監視の選択肢が広がりました。
確認結果
- ディレクトリバケットの「メトリクス」タブに「リクエストメトリクス」セクションが追加された
- AllRequests / BytesDownloaded / FirstByteLatency など 13 種類のメトリクスを 1 分間隔で取得でき、ボトルネックの特定やアラート設定に使える
- プレフィックス・タグでのフィルタリングは非対応(設定はバケット全体またはディレクトリ単位になる)な点が標準 S3 との違い

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 コンソールの左ペインで「ディレクトリバケット」を選択し、対象のバケットをクリックします。

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

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

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

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

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

テスト用リクエスト生成コマンド
メトリクスを発生させるためのコマンドを 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)は引き続き無料です。
料金の詳細は以下を参照してください。
おわりに
ディレクトリバケットはこれまで「速いけど標準 S3 と比べると機能が足りない」という印象がありましたが、今回のアップデートでリクエストレベルの可視性が上がりました。これまで単価が下がったり、ライフサイクルルールを設定できるようになったりと機能追加されています。S3 Storage Lens はまだ非対応です。Storage Lens との組み合わせが実現すれば、複数バケットにまたがるリクエスト傾向をひとつのダッシュボードで把握できます。個人的にはそこが対応してほしい機能です。







