minio
S3互換の環境を立ててくれるS3のクローンプロダクトだそうです
開発環境などでS3を用いたCIをまわすときとかに料金を気にせずつかえそうですね
早速試してみましょう
インストール、起動
mkdir s3dir curl https://dl.minio.io/server/minio/release/linux-amd64/minio > minio chmod +x minio ./minio server s3dir
./minio ${command} ${directory}
サブコマンドとオブジェクトを保存するディレクトリを指定するとサーバが起動します
Endpoint: http://192.168.30.93:9000 http://10.0.2.15:9000 http://127.0.0.1:9000 http://172.17.0.1:9000 http://172.18.0.1:9000 http://172.19.0.1:9000 AccessKey: PX511CAFVA1T4DBVSV6B SecretKey: YykbLA1NZ+vC9AhcialR6IgfB41tk4zebZnUPRbN Region: us-east-1 Browser Access: http://192.168.30.93:9000 http://10.0.2.15:9000 http://127.0.0.1:9000 http://172.17.0.1:9000 http://172.18.0.1:9000 http://172.19.0.1:9000 Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide $ mc config host add myminio http://192.168.30.93:9000 PX511CAFVA1T4DBVSV6B YykbLA1NZ+vC9AhcialR6IgfB41tk4zebZnUPRbN Object API (Amazon S3 compatible): Go: https://docs.minio.io/docs/golang-client-quickstart-guide Java: https://docs.minio.io/docs/java-client-quickstart-guide Python: https://docs.minio.io/docs/python-client-quickstart-guide JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide
エンドポイントやアクセスキーが表示されるのでそれを用いてCLIなどから操作していきます
WEB UI
デフォルトで9000番でサービスが起動してWEBからもminioに対して操作が出来ます

docker image
dockerのimageも用意してあるようなのでそっちを使ったほうが楽ですね
https://docs.minio.io/docs/minio-docker-quickstart-guidedocs.minio.io
- docker-compose.yml
s3minio:
image: minio/minio
ports:
- "9000:9000"
volumes:
- "./tmps3:/export"
environment:
- "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE"
- "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
事前に./tmps3ディレクトリは作成しておきます
- コンテナ起動
docker-compose up
これだけ、簡単すぎる!
一通り試してみる
環境構築が終わったのでSDK経由の操作をやってみます
credentialsはdocker-compose.ymlで指定した値を入力します
- s3-in-minio.rb
require "aws-sdk-core"
require "tapp"
credentials = Aws::Credentials.new(
'AKIAIOSFODNN7EXAMPLE',
'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
)
client = Aws::S3::Client.new(
credentials: credentials,
region: 'us-east-1',
endpoint: 'http://192.168.30.93:9000',
force_path_style: true
)
client.list_buckets.tapp
res = client.list_objects(bucket: "sample")
res.contents.each do |o|
puts "#{o.key}"
end
# バケットの作成
# client.create_bucket(bucket: 'aaa')
#
# ファイルのアップロード
# file = File.open("sample.txt")
# filename = File.basename("sample.txt")
# client.put_object(
# bucket: "sample",
# body: file,
# key: filename
# )
# ファイルのダウンロード
# dl_filename = "index.html"
# File.open(dl_filename, "w") do |f|
# client.get_object(bucket: "sample", key: dl_filename) do |chunk|
# f.write(chunk)
# end
# end
gemのインストール
[s3sample]$ gem install aws-sdk tapp
一通りためした後のbucketリストなどが表示されました
[s3sample]$ ruby s3-in-minio.rb
#<struct Aws::S3::Types::ListBucketsOutput
buckets=
[#<struct Aws::S3::Types::Bucket
name="aaa",
creation_date=2016-08-23 14:40:37 UTC>,
#<struct Aws::S3::Types::Bucket
name="sample",
creation_date=2016-08-23 14:45:45 UTC>],
owner=#<struct Aws::S3::Types::Owner display_name="minio", id="minio">>
index.html
sample.txt
まとめ
簡単にS3互換の環境をローカルに立てることが出来ました
プロダクションならS3でいいと思いますが、CI回したり、開発時のローカル環境用で使えそうです