MinIOの代わりにRustFSを使ってみる — Rust製S3互換Object StorageをDockerで試す
はじめに
オンプレミスやローカル環境でS3互換のObject Storageを用意するとき、これまではMinIOを使うことが多かったと思います。
自分も、GeoParquet、COG、PMTiles、Zarr、Parquetなどを扱うデータ基盤では、S3互換の保存先としてMinIOを使う構成を考えていました。
ただ、2026年現在、MinIO Community Editionは配布形態が変わり、公式GitHubではCommunity Editionをsource-only distributionとして案内しています。ライセンスはAGPLv3です。
そこで、MinIOの代わりとして使えるS3互換Object Storageを調べたところ、候補の一つとして出てきたのが RustFS です。
RustFSはRustで実装されたオープンソースの分散Object Storageで、Amazon S3互換APIを提供します。つい最近、2026年9月16日には RustFS 1.0.0 が正式リリースされました。
今回は、いきなりMinIOを全面的に置き換えるのではなく、まずDocker ComposeでRustFSを起動し、boto3から基本的なS3操作ができるところまで確認します。
RustFSを起動
↓
S3 APIを確認
↓
boto3から読み書き
↓
実データで確認
↓
MinIOからの移行を検討
1. RustFSとは
RustFSは、Rustで実装されたS3互換の分散Object Storageです。
主な特徴は次のとおりです。
RustFSの特徴
- Amazon S3互換API
- Rustで実装
- Apache License 2.0
- Docker / Kubernetes対応
- 分散構成対応
- Erasure Coding対応
- Web Console
- IAM
- TLS
- Replication
- Object Lock
- Versioning
- OpenTelemetryを利用した監視
アプリケーション側から見ると、AWS SDKやboto3などを使ってアクセスできます。
通常のファイルサーバーとは少し考え方が違います。
例えば、
Bucket
├─ raw/
├─ processed/
├─ geoparquet/
├─ cog/
└─ pmtiles/
のように、BucketとObject Keyでデータを管理します。
2. MinIOの代わりとしてRustFSを見る理由
RustFSを候補にした理由は、単にRustで作られているからではありません。
特に大きいのは次の点です。
- S3互換APIを使える
- Apache License 2.0
- Dockerで簡単に動かせる
- 分散構成へ拡張できる
- AWS SDKをそのまま利用できる
特にS3互換であることは重要です。
アプリケーションを、
Application
│
│ S3 API
↓
Object Storage
という構造にしておけば、保存先への依存を小さくできます。
例えば、
MinIO
↓
RustFS
↓
AWS S3
と切り替える場合も、アプリケーション側をS3 APIの範囲に収めておけば変更箇所を減らせます。
自分としては「RustFS専用のアプリケーション」にするのではなく、S3互換Object Storageを差し替えられる構成にすることを重視しています。
3. RustFSとMinIOを大まかに比較する
2026年9月時点の大まかな違いを整理します。
| 項目 | RustFS | MinIO Community Edition |
|---|---|---|
| 主な実装言語 | Rust | Go |
| API | S3互換 | S3互換 |
| ライセンス | Apache License 2.0 | AGPLv3 |
| Docker | 対応 | 対応 |
| 分散構成 | 対応 | 対応 |
| Erasure Coding | 対応 | 対応 |
| IAM | 対応 | 対応 |
| Web Console | 対応 | 対応 |
| TLS | 対応 | 対応 |
| Replication | 対応 | 対応 |
| 運用実績 | まだ新しい | 長い |
| Community版の配布 | バイナリ・コンテナあり | source-onlyが基本 |
ここで注意したいのは、RustFSが新しいからMinIOより優れている、と単純には判断できないことです。
MinIOには長い運用実績があります。
一方、RustFS 1.0.0が正式リリースされたのは2026年9月16日です。
そのため、本番環境へ入れる前には機能の有無だけでなく、
- 長時間連続運転
- 大量Object
- 大容量Object
- ディスク障害
- ノード障害
- 再起動
- Healing
- Version Upgrade
まで確認する必要があります。
4. S3互換でもAmazon S3そのものではない
ここは最初に確認しておきたいところです。
RustFSはS3互換Object Storageですが、Amazon S3のすべての機能を完全に実装しているわけではありません。
RustFS公式のS3 Compatibility Matrixでも、RustFSは「テスト済みのAmazon S3 APIのサブセット」を実装すると説明されています。
2026年8月9日時点のCompatibility Matrixでは、
Implemented tests 455
Lifecycle behavior tests 5
となっています。
つまり、
Amazon S3で動く
↓
RustFSでも必ず動く
とは限りません。
実際に自分のシステムで使うAPIを確認する必要があります。
例えば、まず確認したいのは次のあたりです。
CreateBucket
PutObject
GetObject
DeleteObject
ListObjectsV2
Multipart Upload
Presigned URL
Versioning
Lifecycle
全S3 APIを試すより、利用する機能を絞って試験した方が現実的です。
5. 今回の構成
今回はUbuntu 24.04上のDocker Engine + Docker Composeを前提にします。
使用するものは次のとおりです。
Ubuntu 24.04
Docker Engine
Docker Compose
RustFS
Python
boto3
最初はSingle Node / Single Disk相当の構成です。
この構成には冗長性がありません。
あくまで開発・検証用として使います。
6. 作業ディレクトリを作る
まずディレクトリを作ります。
mkdir rustfs-demo
cd rustfs-demo
mkdir -p scripts
今回は次の構成にします。
rustfs-demo/
├── compose.yaml
├── .env
├── .gitignore
└── scripts/
└── test_s3.py
7. 認証情報を設定する
.envを作ります。
RUSTFS_ACCESS_KEY=replace-with-your-access-key
RUSTFS_SECRET_KEY=replace-with-a-long-random-secret
Secret Keyは固定文字列をそのまま使わず、例えばOpenSSLで生成できます。
openssl rand -base64 32
.envはGitへ登録しないようにします。
.gitignoreは次のようにします。
.env
.venv/
__pycache__/
RustFS公式ドキュメントでも、ネットワークへ公開する前に独自のAccess KeyとSecret Keyを設定するよう案内されています。
8. Docker Composeを作る
compose.yamlを作ります。
services:
rustfs:
image: rustfs/rustfs:1.0.0
container_name: rustfs
restart: unless-stopped
ports:
# S3 API
- "9000:9000"
# Web Console
- "9001:9001"
environment:
RUSTFS_ACCESS_KEY: ${RUSTFS_ACCESS_KEY}
RUSTFS_SECRET_KEY: ${RUSTFS_SECRET_KEY}
RUSTFS_ADDRESS: ":9000"
RUSTFS_CONSOLE_ADDRESS: ":9001"
RUSTFS_CONSOLE_ENABLE: "true"
RUSTFS_OBS_LOGGER_LEVEL: "error"
RUSTFS_OBS_LOG_DIRECTORY: "/var/log/rustfs/"
volumes:
- rustfs-data:/data
command:
- /data
volumes:
rustfs-data:
公式ドキュメントではrustfs/rustfs:latestの例が使われていますが、今回は再現性を優先して1.0.0へ固定しています。
本番環境では、さらにimage digestまで固定する方法も検討できます。
9. RustFSを起動する
起動します。
docker compose up -d
状態を確認します。
docker compose ps
ログも確認します。
docker compose logs rustfs
RustFSのHealth Checkは次のURLで確認できます。
curl --fail http://localhost:9000/health
S3 APIとWeb Consoleは次のポートです。
S3 API
http://localhost:9000
Web Console
http://localhost:9001
ブラウザから、
http://localhost:9001
へアクセスするとConsoleを開けます。
10. ホストディレクトリをマウントする場合の注意
今回の例ではDocker named volumeを使っています。
そのため、ホスト側で特別な権限設定は必要ありません。
一方、
volumes:
- ./data:/data
のようにホスト側ディレクトリを直接bind mountする場合は注意が必要です。
RustFS公式コンテナは非rootユーザーで動作し、UIDは10001です。
そのため、例えば次のように所有者を合わせます。
mkdir -p data
sudo chown -R 10001:10001 data
権限が合っていない場合、
Permission denied
となる可能性があります。
最初の動作確認ではnamed volumeを使う方が分かりやすいと思います。
11. boto3からRustFSへ接続する
次にPythonからアクセスします。
Python仮想環境を作ります。
python3 -m venv .venv
source .venv/bin/activate
boto3をインストールします。
pip install boto3
scripts/test_s3.pyを作ります。
"""RustFSの基本的なS3操作を確認する。
Bucketを作成し、小さなObjectをアップロードしたあと、
ListObjectsV2で登録内容を確認する。
"""
from __future__ import annotations
import os
import boto3
from botocore.config import Config
ENDPOINT_URL = "http://localhost:9000"
REGION_NAME = "us-east-1"
BUCKET_NAME = "rustfs-test"
OBJECT_KEY = "sample/hello.txt"
def create_s3_client():
"""RustFSへ接続するS3クライアントを生成する。"""
return boto3.client(
"s3",
endpoint_url=ENDPOINT_URL,
aws_access_key_id=os.environ["RUSTFS_ACCESS_KEY"],
aws_secret_access_key=os.environ["RUSTFS_SECRET_KEY"],
region_name=REGION_NAME,
config=Config(
signature_version="s3v4",
s3={
"addressing_style": "path",
},
),
)
def ensure_bucket(s3) -> None:
"""テスト用Bucketが存在しなければ作成する。"""
response = s3.list_buckets()
bucket_names = {
bucket["Name"]
for bucket in response.get("Buckets", [])
}
if BUCKET_NAME not in bucket_names:
s3.create_bucket(Bucket=BUCKET_NAME)
def upload_test_object(s3) -> None:
"""確認用のObjectをRustFSへ登録する。"""
body = (
"Hello RustFS\n"
"This object was uploaded through boto3.\n"
).encode("utf-8")
s3.put_object(
Bucket=BUCKET_NAME,
Key=OBJECT_KEY,
Body=body,
ContentType="text/plain; charset=utf-8",
)
def list_objects(s3) -> None:
"""Bucket内に登録されているObjectを表示する。"""
response = s3.list_objects_v2(
Bucket=BUCKET_NAME,
)
for item in response.get("Contents", []):
print(
item["Key"],
item["Size"],
)
def main() -> None:
"""RustFSの基本的なS3操作を順番に確認する。"""
s3 = create_s3_client()
ensure_bucket(s3)
upload_test_object(s3)
list_objects(s3)
if __name__ == "__main__":
main()
RustFSの公式boto3例でも、endpoint_urlをRustFSへ向け、path-style addressingを指定する方法が紹介されています。
.envを読み込んで実行します。
set -a
source .env
set +a
python scripts/test_s3.py
例えば、
sample/hello.txt 57
のように表示されれば、
Python
↓
boto3
↓
S3 API
↓
RustFS
という経路でObjectを保存できています。
12. アプリケーション側はRustFSへ直接依存させない
MinIOからRustFSへ切り替えるときに、ここはかなり重要だと思っています。
例えばアプリケーション側に、
s3 = boto3.client(
"s3",
endpoint_url="http://minio:9000",
)
と直接書いてしまうと、保存先を変更するたびにコードを直すことになります。
そのため、
S3_ENDPOINT=http://rustfs:9000
S3_ACCESS_KEY=...
S3_SECRET_KEY=...
S3_BUCKET=geospatial
のように環境変数へ切り出します。
Python側では、
s3 = boto3.client(
"s3",
endpoint_url=os.environ["S3_ENDPOINT"],
aws_access_key_id=os.environ["S3_ACCESS_KEY"],
aws_secret_access_key=os.environ["S3_SECRET_KEY"],
)
とします。
こうしておけば、
MinIO
RustFS
AWS S3
その他のS3互換Object Storage
への切り替えがしやすくなります。
重要なのはRustFSそのものではなく、S3 APIを境界にしてアプリケーションとStorageを分離することです。
13. MinIOのデータディレクトリをそのまま使わない
MinIOからRustFSへ移行する場合、
MinIOのデータディレクトリ
↓
RustFSから直接読む
という方法は、少なくとも最初の移行方法としては選ばない方が分かりやすいと思います。
まず、
┌─ MinIO
Application ─┤
└─ RustFS
と両方を用意します。
その後、
MinIO
│
│ S3 API
↓
データコピー
│
↓
RustFS
としてObject単位で移行します。
移行後は、単純なObject数だけでなく、
- Bucket数
- Object数
- Object size
- Metadata
- Content-Type
- Versioning
- Lifecycle
- Object Lock
- Presigned URL
- Multipart Upload
など、自分のシステムで利用している機能を確認します。
データファイルが同じ数だけ存在するから移行完了、とはしない方がよいでしょう。
14. 地理空間データの保存先として使う
自分がRustFSを試したい理由の一つが、地理空間データとの相性です。
例えば次のような構成を考えています。
Bucketは用途ごとに分けます。
raw
processed
geoparquet
cog
pmtiles
simulation
archive
例えば、
s3://raw/jma/
s3://raw/dem/
s3://geoparquet/hazard/
s3://cog/dem/
s3://pmtiles/disaster/
s3://simulation/flood/
といった構成です。
Cloud Native GISでは、
COG
GeoParquet
PMTiles
Zarr
Parquet
のようにObject Storageと相性のよいデータ形式が増えています。
保存先をS3 APIへ統一しておけば、ローカルのRustFSから将来AWS S3などへ移行する場合も整理しやすくなります。
15. DuckDBと組み合わせる
RustFSはS3互換APIを提供するため、ParquetやGeoParquetをRustFSへ保存し、DuckDB側から読む構成も取りやすくなります。
Parquet / GeoParquet
↓
RustFS
↓
S3
↓
DuckDB
例えば、
観測データ
↓
Parquet / GeoParquet
↓
RustFS
↓
DuckDB
↓
FastAPI
↓
Web GIS
という流れにできます。
大量のParquetを毎回ローカルへコピーしてから解析するのではなく、Object Storageを中心にデータを管理できるようになります。
16. 開発環境と本番環境は分けて考える
今回のDocker Composeは開発・検証用です。
1 Node
1 Volume
なので冗長性はありません。
本番環境では複数ノード構成を検討します。
RustFS公式DockerドキュメントにもMulti-node deploymentの例があります。
なお、公式ドキュメントではDockerのデフォルトbridge networkはMulti-node deploymentには使わず、各ノード間通信にhost networkを利用する例が示されています。
本番投入前には、少なくとも次の項目を確認したいところです。
Node停止
Disk停止
Container停止
OS再起動
Network切断
Object大量登録
大容量Object
Multipart Upload
Backup
Restore
Upgrade
Healing
17. 監視はOpenTelemetryを中心に考える
RustFSではOpenTelemetryを使ったObservability構成が用意されています。
例えば、
RustFS
↓
OpenTelemetry Collector
├─ Prometheus
├─ Grafana
└─ Jaeger
という構成です。
RustFSリポジトリのDocker Composeには、
- Grafana
- Prometheus
- OpenTelemetry Collector
- Jaeger
を組み合わせた構成も用意されています。
最初の検証ではすべて入れなくてもよいと思います。
まずは、
RustFS
↓
Health Check
↓
S3疎通確認
だけで始めます。
その後、本番運用を考える段階で監視を追加します。
18. MinIOから置き換える前に確認する流れ
自分なら、次の順番で確認します。
Step 1:RustFSを単一ノードで起動する
RustFS
Docker
Single Node
Step 2:基本的なS3 APIを確認する
PUT
GET
LIST
DELETE
Multipart Upload
Presigned URL
Step 3:実際のデータを保存する
GeoParquet
COG
PMTiles
Parquet
Zarr
Step 4:既存アプリケーションから接続する
FastAPI
DuckDB
Python
OpenLayers / MapLibre
Step 5:MinIOと並行して比較する
MinIO
├─ PUT
├─ GET
├─ CPU
├─ Memory
└─ Disk I/O
RustFS
├─ PUT
├─ GET
├─ CPU
├─ Memory
└─ Disk I/O
Step 6:障害試験を行う
Container停止
Disk障害
Node停止
Network障害
再起動
Healing
ここまで確認してから、本番でMinIOをRustFSへ置き換えるか判断します。
19. Rust製だから速い、とは決めつけない
RustFSという名前を見ると、
Rust
↓
高速
と考えたくなります。
ただ、Object Storageの性能は実装言語だけでは決まりません。
実際には、
NVMe / SSD
Network
Filesystem
CPU
Object Size
同時接続数
Erasure Coding
Cache
Multipart Size
などの影響を大きく受けます。
そのため、
Rustで書かれているからMinIOより速い
とは判断せず、自分のデータを使って測定します。
GIS系のデータでも、
小さいJSON × 数十万
GeoParquet × 数GB
COG × 数GB
PMTiles × 数GB
ではアクセス特性がかなり違います。
ベンチマークするときは、一つのObjectサイズだけでなく複数のパターンを用意した方がよさそうです。
20. 現時点での考え
2026年9月時点では、RustFSはMinIOの代替候補として試してみる価値があると考えています。
特に、
Apache License 2.0
S3互換
Docker対応
分散構成
Rust実装
AWS SDK利用可能
という組み合わせは使いやすそうです。
ただし、RustFS 1.0.0が正式リリースされたのは2026年9月16日です。
まだ正式版が出たばかりなので、
MinIOを停止
↓
すぐRustFSへ全面移行
という進め方はしません。
まず、
MinIO
+
RustFS
を並べて確認します。
そしてアプリケーション側を、
Application
│
│ S3 API
↓
Object Storage
という構成にして、保存先を入れ替えられる状態にします。
この形なら将来、
RustFS
MinIO
AWS S3
その他のS3互換Object Storage
へ移る場合にも対応しやすくなります。
Object Storage製品そのものを中心にシステムを作るのではなく、S3 APIを境界としてシステムを分離しておくことが重要だと思います。
21. 実装一式を作成する
ここまで記事で説明した内容を、実際に動かせる形でまとめました。
配布ファイルは次のZIPです。
rustfs_minio_replacement_r001.zip
ダウンロード先:ZIPファイル
SHA-256は次の値です。
b2c8f90e27fe66fb55b53803471e88778de41ef5d71ca91d373930bd5e837aa3
構成は次のようにしています。
rustfs_minio_replacement_r001/
├── compose.yaml
├── Dockerfile
├── pyproject.toml
├── .env.example
├── .gitignore
├── README.md
├── VALIDATION.md
│
├── src/
│ └── rustfs_demo/
│ ├── __init__.py
│ ├── config.py
│ ├── client.py
│ ├── operations.py
│ ├── health.py
│ ├── migration.py
│ └── cli.py
│
├── scripts/
│ ├── generate_env.sh
│ ├── wait_for_rustfs.sh
│ ├── run_smoke.sh
│ └── validate_package.sh
│
├── tests/
│ ├── test_config.py
│ ├── test_health.py
│ ├── test_operations.py
│ └── test_migration.py
│
├── docs/
│ ├── MIGRATION.md
│ └── TESTING.md
│
└── samples/
└── hello.txt
実装ではRustFS専用の設定値をアプリケーションへ直接埋め込まず、次のようなS3_*環境変数から接続先を読むようにしました。
S3_ENDPOINT=http://localhost:9000
S3_ACCESS_KEY=...
S3_SECRET_KEY=...
S3_REGION=us-east-1
S3_BUCKET=rustfs-demo
この形なら、保存先をRustFSからMinIOやAWS S3へ変更するときも、アプリケーション側の変更を小さくできます。
22. 実装で確認できること
r001では、S3互換Object Storageの基本操作を一通り確認できるようにしています。
Bucket確認・作成
↓
PUT
↓
GET
↓
LIST
↓
Presigned URL生成
↓
DELETE
CLIから個別に実行することもできます。
rustfs-demo health
rustfs-demo smoke
rustfs-demo put samples/hello.txt samples/hello.txt
rustfs-demo list --prefix samples/
rustfs-demo get samples/hello.txt downloads/hello.txt
rustfs-demo presign-get samples/hello.txt --expires 900
rustfs-demo delete samples/hello.txt
Object一覧ではListObjectsV2のpaginatorを使っているため、1,000件を超えるObjectも次ページを取得できる構成です。
大きなファイルは、すべてをメモリへ読み込まず、boto3のupload_fileとdownload_fileを利用します。
23. Dockerで動かす
ZIPを展開します。
unzip rustfs_minio_replacement_r001.zip
cd rustfs_minio_replacement_r001
最初に認証情報を作ります。
./scripts/generate_env.sh
.envが生成されます。
その後、RustFSを起動します。
docker compose up -d rustfs
docker compose ps
S3 APIとWeb Consoleは次のURLです。
S3 API
http://localhost:9000
Web Console
http://localhost:9001
RustFSが起動したら、smoke testを実行します。
./scripts/run_smoke.sh
このスクリプトでは、RustFSのHealth Checkを待ってから、Docker内のPythonツールからS3基本操作を順番に確認します。
RustFS起動
↓
/health確認
↓
Bucket作成
↓
PUT / GET / LIST
↓
Presigned URL生成
↓
DELETE
ホスト側へPython環境を作る場合は次のようにします。
python3 -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'
set -a
source .env
set +a
rustfs-demo health
rustfs-demo smoke
24. MinIOからRustFSへコピーする
今回の実装には、MinIOなど別のS3互換Object StorageからRustFSへObjectをコピーする機能も入れています。
MinIOのデータディレクトリをRustFSから直接読むのではなく、S3 API経由でコピーします。
MinIO
│
│ S3 API
↓
Migration Tool
│
│ S3 API
↓
RustFS
コピー元とコピー先は環境変数で分けます。
export SRC_S3_ENDPOINT=http://minio.example:9000
export SRC_S3_ACCESS_KEY=...
export SRC_S3_SECRET_KEY=...
export SRC_S3_REGION=us-east-1
export SRC_S3_BUCKET=source-bucket
export DST_S3_ENDPOINT=http://localhost:9000
export DST_S3_ACCESS_KEY=...
export DST_S3_SECRET_KEY=...
export DST_S3_REGION=us-east-1
export DST_S3_BUCKET=target-bucket
最初は実際にコピーせず、--dry-runで対象を確認します。
rustfs-demo migrate --dry-run
一部だけ試す場合は、--prefixと--limitを使います。
rustfs-demo migrate --prefix test/ --limit 10
コピー後はObjectのContentLengthを比較します。
ETagはMultipart Uploadの方法によって変わるため、異なるObject Storage間の完全一致判定には使っていません。重要なデータを移行するときは、別途SHA-256のmanifestを作り、コピー前後で比較する方法がよいと思います。
Versioning、Lifecycle、Object Lock、Bucket PolicyなどはObject本体とは別の設定なので、それぞれ個別に移行確認が必要です。
25. 配布前に確認した内容
今回の配布ZIPは、作成後にいったん別ディレクトリへ展開し、展開したファイルを使って再度テストしています。
確認結果は次のとおりです。
| 項目 | 結果 |
|---|---|
Python compileall
|
PASS |
| pytest | PASS(10 passed) |
compose.yaml YAML解析 |
PASS |
Shell bash -n
|
PASS |
CLI --help
|
PASS |
| module / class / functionのdocstring検査 | PASS |
| ZIP整合性検査 | PASS |
一方、今回の作業環境にはDocker Engineがないため、次の項目は未実行です。
| 項目 | 状態 |
|---|---|
| Ruff | NOT RUN |
| mypy | NOT RUN |
| Docker ComposeによるRustFS起動 | NOT RUN |
| RustFS v1.0.0実コンテナでのsmoke test | NOT RUN |
未実行の項目をPASS扱いにはしていません。
Ubuntu 24.04 + Docker Engine環境では、次の2つを実行して最終確認します。
python3 -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'
./scripts/validate_package.sh
./scripts/generate_env.sh
./scripts/run_smoke.sh
実行結果を残す場合は、配布物に入れているVALIDATION.mdへ追記しておくと後から確認しやすくなります。
26. ここまででできるようになったこと
今回のr001では、次のところまで実装しました。
Docker Compose
↓
RustFS v1.0.0
↓
S3 API
↓
Python / boto3
↓
PUT / GET / LIST / DELETE
↓
Presigned URL
↓
MinIO → RustFS 移行補助
これで、RustFSを単に起動するだけでなく、アプリケーションからS3互換Storageとして扱うための土台まで用意できました。
ここから先は、実際に扱うデータを載せて確認していきます。
RustFS
↓
GeoParquet
COG
PMTiles
↓
DuckDB
FastAPI
OpenLayers / MapLibre
その後、MinIOとRustFSを同じ条件で並べ、PUT/GET性能、CPU、メモリ、Disk I/O、大容量Object、大量小Object、再起動、障害復旧などを比較する予定です。
27. まとめ
RustFSは、S3互換APIを使えるため、MinIOの代替候補として比較しやすいObject Storageです。
ただし、RustFS 1.0.0はまだ新しいため、機能一覧だけで本番採用を決めるのではなく、自分の環境とデータで確認する必要があります。
今回の構成では、RustFSそのものへアプリケーションを強く依存させず、S3 APIを境界にしました。
Application
│
│ S3 API
↓
Object Storage
この境界を守っておけば、RustFS、MinIO、AWS S3などを比較しながら保存先を選べます。
まずは単一ノードのRustFSをDockerで動かし、S3基本操作と実データを確認するところから始めるのがよさそうです。
参考資料
2026年9月21日時点で確認した公式資料です。
RustFS
-
RustFS公式
https://rustfs.com/ -
RustFS Documentation
https://docs.rustfs.com/ -
RustFS Docker
https://docs.rustfs.com/en/installation/container/docker -
RustFS S3 Compatibility Matrix
https://docs.rustfs.com/en/reference/s3-compatibility -
RustFS boto3 Example
https://docs.rustfs.com/en/developer/examples/boto3 -
RustFS GitHub
https://github.com/rustfs/rustfs -
RustFS Releases
https://github.com/rustfs/rustfs/releases
MinIO
- MinIO GitHub
https://github.com/minio/minio
仕様や対応状況は今後変わる可能性があります。本番導入前には、利用するバージョンの公式ドキュメントを改めて確認してください。



