テック技報最新号へ →
インフラ

S3 の接続先を差し替える: ローカルのモックや中継ゲートウェイに向ける

AWS SDK の S3 クライアントは endpoint を指定すれば任意の S3 互換サーバーにつながる。ローカルのモックサーバーにはパス形式(forcePathStyle: true)で接続するのがポイント。同じ仕組みで、間に圧縮ゲートウェイを挟むといった使い方もできる。

@zaru · 投稿 2026-04-10
#infra#aws#s3#testing#typescript

どんなときに使う?

  • テストやローカル開発で本物の 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 が残らないよう、環境変数などで切り替える。
  • 中継ゲートウェイを挟む場合、そこが単一障害点・性能のボトルネックになりうる。

出典

X の元の投稿を開く