🪣
ローカル開発環境のS3互換ストレージとしてRustFSを使う
ローカル開発環境でS3互換ストレージとしてMinIOを使っていたのですが、MinIOはいろいろあってとうとうメンテナンスモードになってしまいました。
MinIOが良かったのは下記の点です。
- S3互換APIを提供している
- Dockerイメージが提供されていて簡単に立ち上げられる
- DevContainerで簡単に使える
- GUIでバケットやオブジェクトの操作ができる
代替となるものをいくつか試したところ、RustFSが上記を満たしていたので紹介します。RustFSのライセンスはApache2.0です。
Docker Composeでの設定例
RustFSをDocker Composeで立ち上げる場合の設定例です。
これでコンソールも含めて立ち上がります。
services:
rustfs:
image: rustfs/rustfs:1.0.0-alpha.72
ports:
- "9000:9000"
- "9001:9001"
volumes:
- rustfs-data:/data
environment:
- RUSTFS_ACCESS_KEY=rustfsadmin
- RUSTFS_SECRET_KEY=rustfsadmin
- RUSTFS_CONSOLE_ENABLE=true
command: >
--address :9000
--console-enable
--access-key rustfsadmin
--secret-key rustfsadmin
/data
restart: unless-stopped
volumes:
rustfs-data:
RustFSコンソール
RustFSにはコンソールが備わっており、先ほどの設定で起動した場合はhttp://localhost:9001にアクセスすることで利用できます。
Access Key と Secret Key でログインします。

GUIでバケットやオブジェクトの操作ができるので便利です。
AWS CLIでの利用例
S3互換APIを提供しているので、AWS CLIで操作できます。
export AWS_ACCESS_KEY_ID=rustfsadmin
export AWS_SECRET_ACCESS_KEY=rustfsadmin
$ aws --endpoint-url=http://rustfs:9000 s3 ls
2025-12-07 14:08:22 sample-bucket
$ aws --endpoint-url=http://rustfs:9000 s3 cp README.md s3://sample-bucket/README.md
upload: ./README.md to s3://sample-bucket/README.md
Presigned URLの発行も可能です。
$ aws --endpoint-url=http://rustfs:9000 s3 presign s3://sample-bucket/README.md --expires-in 3600
http://rustfs:9000/sample-bucket/README.md?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=rustfsadmin%2F20251213%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251213T100354Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=64ba030a9d7083a0a7c26dc68b76f57d8477213f0a2ce71b3a7e04210f171039
$ curl -i "http://rustfs:9000/sample-bucket/README.md?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=rustfsadmin%2F20251213%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251213T100354Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=64ba030a9d7083a0a7c26dc68b76f57d8477213f0a2ce71b3a7e04210f171039"
HTTP/1.1 200 OK
accept-ranges: bytes
content-length: 363
content-type: text/markdown
etag: "e7680d626c5d14322d46b094b4f0f2ae"
last-modified: Sun, 07 Dec 2025 23:07:20 GMT
x-amz-meta-content-type: text/markdown
vary: accept-encoding
vary: origin, access-control-request-method, access-control-request-headers
access-control-allow-origin: *
access-control-expose-headers: *
x-request-id: 85b9b51b-2b5d-4bc3-9aac-c9dfdfd9d70a
date: Sat, 13 Dec 2025 10:04:07 GMT
# rustfs-sample
...
サンプルプロジェクト
下記のプロジェクトをDevContainerで開くとRustFSが立ち上がります。こちらで動作確認をしました。
その他
Garageも試したのですが、ノード1台の場合でもレイアウトを設定する必要があって、Dockerで立ち上げるのと同時にそれらを行うのが難しかったので、今回は見送りました。
(単にローカル開発環境のS3互換という用途には向いていなかっただけ)
Discussion