S3 の接続先を差し替える: ローカルのモックや中継ゲートウェイに向ける
AWS SDK の S3 クライアントは endpoint を指定すれば任意の S3 互換サーバーにつながる。ローカルのモックサーバーにはパス形式(forcePathStyle: true)で接続するのがポイント。同じ仕組みで、間に圧縮ゲートウェイを挟むといった使い方もできる。
どんなときに使う?
- テストやローカル開発で本物の S3 ではなくモック / S3 互換ストレージを使いたい
- アプリのコードはほぼ変えずに、S3 との間に何かを挟みたい
コード例(AWS SDK for JavaScript v3)
ts
import { S3Client } from "@aws-sdk/client-s3";
const s3 = new S3Client({
region: "us-east-1",
endpoint: "http://localhost:4006", // モックサーバー
forcePathStyle: true, // http://host/bucket/key 形式でアクセス
});forcePathStyle を付けないと SDK は http://bucket.host/key の仮想ホスト形式を使うので、localhost ではバケット名のサブドメインが解決できない。
関連する使い方
- AWS SDK を使わず aws4fetch で書く: MinIO の先行きを見て S3 モックを自作し、ついでに AWS SDK をやめて aws4fetch(fetch に SigV4 署名を付ける小さなライブラリ)で書き直した例。 @kenn · 2026-02-01
- S3 の通り道に置く圧縮ゲートウェイ(S4):
--endpoint-urlを差し替えるだけで PUT 時に透過圧縮、GET 時に透過展開し、Range GET も保てるという Rust 製ゲートウェイの記事。 @kanarus_dev · 2026-06-24
注意点
- 本番の設定に
endpointが残らないよう、環境変数などで切り替える。 - 中継ゲートウェイを挟む場合、そこが単一障害点・性能のボトルネックになりうる。