Skip to content

GensIto/mini-s3

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

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages