0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MinIOの代替になるか?Rust製のS3互換ストレージ「RustFS」をWSL2+Dockerで試す

0
Posted at

目標

RustFSをWLS2の環境下でdocker composeにて起動し、HTTP(S3互換API)で疎通確認した後、WindowsからPython(boto3)でファイルをアップロードして確認するまでの手順をまとめたものです。


背景

MinIOのDockerイメージが提供終了したため、その代替としてRustFSが適していると思い、触ってみた感じです。

実施環境

  • 物理マシン
    • Windows 11
  • 仮想基盤
    • WSL2(Ubuntu)
  • 実行環境
    • Docker Engine
  • Python実行環境
    • WindowsPCのPython3.10

エンドポイント

同一PCでアクセスする場合は''を'localhost'に読み替える

注意事項

  • RustFSは正式なGAリリースでないのでalpha版が提供されています。本番環境での使用は推奨しません(2026年2月時点)
  • ユーザーやパスワードはデフォルトの値を入れてますが、使用時は変更してください

1. RUSTFSホスト(Linux)準備

1.1 永続データディレクトリ作成(権限対策)

RUSTFSコンテナは 非rootユーザー (uid = 10001)で実行される。ホストディレクトリをマウントする場合、ディレクトリの所有者に10001が設定されていることを確認する。

参照:https://www.zdoc.app/ja/rustfs/rustfs

mkdir -p ./rustfs-data
sudo chown -R 10001:10001 ./rustfs-data

1.2 docker-compose.yml作成

RustFSのイメージは1.0.0-alpha.82で作成を想定

services:
  rustfs:
    image: rustfs/rustfs:1.0.0-alpha.82  # ←実在するタグに固定
    container_name: rustfs
    ports:
      - "9000:9000"   # S3互換API
      - "9001:9001"   # Console
    environment:
      RUSTFS_ACCESS_KEY: rustfsadmin
      RUSTFS_SECRET_KEY: rustfsadmin
      RUSTFS_CONSOLE_ENABLE: "true"
      RUSTFS_ADDRESS: ":9000"
    volumes:
      - ./rustfs-data:/data
    command: ["/data"]
    restart: unless-stopped

1.3 起動

docker compose up -d
docker compose ps
docker logs -f rustfs

1.4 HTTPにアクセス

ブラウザで以下にアクセス
http://<RUSTFS_HOST>:9001

RustFS - Google Chrome 2026_02_25 5_31_56.png

2. Pythonでファイルアップロードテスト

以下の作業ではPython3.10環境でテストをしています。※vnev等の仮想環境での実施を推奨

2.1 boto3 ライブラリのインストール

pip install boto3

2.2 アップロードスクリプトを作成

※エンドポイントはコンソール用の9001ではなく9000のポートを使用

import boto3
from botocore.client import Config
from botocore.exceptions import ClientError

ENDPOINT = "http://localhost:9000"  # ←必要なら http://<RUSTFS_HOST>:9000 に変更
ACCESS_KEY = "rustfsadmin"
SECRET_KEY = "rustfsadmin"
REGION = "us-east-1"

BUCKET = "mybucket"
LOCAL_FILE = r"C:\path\to\sample.txt"
OBJECT_KEY = "uploads/sample.txt"  # RustFS上のキー(パス相当)

s3 = boto3.resource(
    "s3",
    endpoint_url=ENDPOINT,
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
    region_name=REGION,
    config=Config(signature_version="s3v4"),
)

# バケットが無ければ作成
try:
    s3.meta.client.head_bucket(Bucket=BUCKET)
except ClientError:
    # us-east-1 の場合は CreateBucketConfiguration なしが無難
    s3.create_bucket(Bucket=BUCKET)

# アップロード
s3.Bucket(BUCKET).upload_file(LOCAL_FILE, OBJECT_KEY)
print(f"Uploaded: s3://{BUCKET}/{OBJECT_KEY}")

# 確認(サイズ・更新日時)
obj = s3.Object(BUCKET, OBJECT_KEY)
print(obj.content_length, obj.last_modified)

2.3 スクリプトの実行

python <ファイル名>

実行結果例

Uploaded: s3://mybucket/uploads/sample.txt
15 2026-02-22 05:17:38+00:00

RustFS - Google Chrome 2026_02_25 5_36_21.png

停止・削除について

docker compose down
rm -rf ./rustfs-data

おわりに(感想)

今回RustFSを触ってみて、基本的なS3互換の操作感やレスポンスの速さにストレスはなく、ローカル開発環境におけるMinIOの代替として非常に使い勝手が良いと感じました。
調査の過程でいくつか深刻な脆弱性(認証バイパス等)の報告も見当たりましたが、コミュニティによる修正スピードは非常に早く、着実に対策が進んでいます。
現時点ではあくまで検証・開発用という位置付けですが、Rust製のモダンなストレージとして、将来のGA(正式リリース)版を期待して今からキャッチアップしておく価値は十分にあると思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?