Skip to content

Repository files navigation

mini-s3

S3互換のオブジェクトストレージサーバー (Rust + axum + SQLite)

セットアップ

cp .env.example .env

# DB作成 & マイグレーション
sqlx database create --database-url "sqlite:./database.db"
sqlx migrate run --database-url sqlite:./database.db

# サーバー起動
cargo run
# -> listening on http://127.0.0.1:8080

AWS CLIでの操作

install

ダミーのクレデンシャルを設定:

aws configure

AWS Access Key ID: test
AWS Secret Access Key: test
Default region name: us-east-1
Default output format: json

--endpoint-url でローカルサーバーに向ける。 s3api を使うとAPI単位で1リクエストずつ叩けるのでデバッグしやすい:

# 1. バケット作成 (PUT /test-bucket)
aws --endpoint-url http://127.0.0.1:8080 s3api create-bucket --bucket test-bucket

# 2. バケット一覧取得 (GET /)
aws --endpoint-url http://127.0.0.1:8080 s3api list-buckets

# 3. テストファイルを作ってPutObject (PUT /test-bucket/hello.txt)
echo "Hello, S3!" > /tmp/hello.txt
aws --endpoint-url http://127.0.0.1:8080 s3api put-object --bucket test-bucket --key hello.txt --body /tmp/hello.txt --content-type text/plain

# 4. バケット削除 (DELETE /test-bucket)
aws --endpoint-url http://127.0.0.1:8080 s3api delete-bucket --bucket test-bucket

# 5. object取得 (GET /test-bucket)
### ダウンロード
aws --endpoint-url http://127.0.0.1:8080 s3api get-object --bucket test-bucket --key hello.txt downloaded.txt

# 6. object削除 (DELETE /test-bucket)
### ダウンロード
aws --endpoint-url http://127.0.0.1:8080 s3api delete-object --bucket test-bucket --key hello.txt
BASE="aws --endpoint-url http://127.0.0.1:8080 --region us-east-1"
${=BASE} s3api head-bucket --bucket test-bucket

# HeadBucket(存在しない)
${=BASE} s3api head-bucket --bucket no-such-bucket-xyz

# オブジェクトを置く(HeadObject の前提)
${=BASE} s3 cp ./README.md s3://test-bucket/photos/2024/cat.jpg

# HeadObject(存在する)
${=BASE} s3api head-object --bucket test-bucket --key photos/2024/cat.jpg

# HeadObject(存在しない)
${=BASE} s3api head-object --bucket test-bucket --key photos/2024/missing.jpg

DBテーブル構成

sqlite> .tables
_sqlx_migrations  buckets  credentials  objects
テーブル 用途
buckets バケット管理
objects オブジェクトメタデータ
credentials アクセスキー管理

参考

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages