MinIO: はじめに

S3互換のオブジェクトストレージとしてMinIOを使い始める方法

👋 Stackheroのドキュメントへようこそ!

Stackheroは、数多くの利点を提供する、すぐに使えるMinIOオブジェクトストレージソリューションを提供しています。

  • 無制限の転送。
  • シンプルで予測可能、かつ透明な価格設定
  • HTTPSで保護されたカスタマイズ可能なドメイン名(例: https://object-storage.your-company.com)。
  • ワンクリックで簡単に更新
  • プライベートで専用のVMによる最適なパフォーマンスと強力なセキュリティ
  • 🇪🇺 ヨーロッパ🇺🇸 アメリカで利用可能。

時間を節約し、生活を簡素化: StackheroのMinIOオブジェクトストレージホスティングソリューションを試すのに5分しかかかりません!

MinIOはAmazon S3プロトコルを実装したオブジェクトストレージサービスです。Amazon S3互換のクライアントは、MinIOに接続してオブジェクトストレージとシームレスにやり取りできます。Amazon S3クライアントライブラリは、Ruby、Node.js、Java、Python、Clojure、Erlangを含むほぼすべての主要なプログラミング言語で利用可能です。

MinIO SDKを使用してオブジェクトストレージに接続することをお勧めします。利用可能なSDKの完全なリストは、MinIO公式ドキュメントで確認できます。

また、MinIO CLIを使用することもできます。これは、ターミナルから直接大きなファイルを管理するのに特に便利です。MinIO CLIの使用に関する詳細なガイドは、MinIO CLI公式ドキュメントで入手できます。

Stackhero for MinIOインスタンスには、デフォルトでMinIO Console Web UIが含まれています。より高度なタスクには、MinIO CLIを使用することを選択できます。

MinIO CLIを試す最も簡単な方法は、そのDockerコンテナを実行することです。以下の手順に従ってください。

  1. コンテナを開始します。

    docker run -it --entrypoint=/bin/sh minio/mc
    
  2. コンテナ内で、次のコマンドを使用してサーバーを追加します(プレースホルダーの値を適宜置き換えてください)。

    mc alias set minio https://<XXXXXX>.stackhero-network.com <ROOT_ACCESS_KEY> <MINIO_ROOT_SECRET_KEY>
    
  3. 設定を確認するために「test」という名前のバケットを作成します。

    mc mb minio/test
    
  4. バケットを一覧表示します。

    mc ls minio
    

追加のMinIO CLIコマンドは、mc --helpを実行することで確認できます。

まず、AWS SDK gemをインストールします。

gem install aws-sdk
bundle install

以下は、RubyでAWS SDKを使用してMinIOとやり取りする方法を示す簡単な例です。

require 'aws-sdk'

Aws.config.update(
  endpoint: 'https://<XXXXXX>.stackhero-network.com',
  access_key_id: 'YOUR_ACCESS_KEY',
  secret_access_key: 'YOUR_SECRET_KEY',
  force_path_style: true,
  region: 'us-east-1'
)

rubys3_client = Aws::S3::Client.new

# put_object操作
rubys3_client.put_object(
  key: 'testobject',
  body: 'Hello from MinIO!',
  bucket: 'testbucket',
  content_type: 'text/plain'
)

# get_object操作
rubys3_client.get_object(
  bucket: 'testbucket',
  key: 'testobject',
  response_target: 'download_testobject'
)

print "Downloaded 'testobject' as 'download_testobject'."

詳細については、MinIO Rubyドキュメントを参照してください。

PythonアプリケーションをMinIOに接続する主な方法は2つあります。

まず、AWS SDKパッケージ(boto3)をインストールします。

pip install boto3
pip freeze > requirements.txt

以下の例は、boto3を使用してMinIOに接続する方法を示しています。

#!/usr/bin/env python
import os
import boto3
from botocore.client import Config

s3 = boto3.resource('s3',
                    endpoint_url='https://<XXXXXX>.stackhero-network.com',
                    aws_access_key_id='YOUR_ACCESS_KEY',
                    aws_secret_access_key='YOUR_SECRET_KEY',
                    config=Config(signature_version='s3v4'),
                    region_name='us-east-1')

# ローカルファイル '/home/john/piano.mp3' をバケット 'songs' に 'piano.mp3' というオブジェクト名でアップロード
s3.Bucket('songs').upload_file('/home/john/piano.mp3', 'piano.mp3')

# バケット 'songs' からオブジェクト 'piano.mp3' をダウンロードし、ローカルに '/tmp/classical.mp3' として保存
s3.Bucket('songs').download_file('piano.mp3', '/tmp/classical.mp3')

print("'piano.mp3' downloaded as 'classical.mp3'.")

詳細は、MinIO Pythonドキュメントで確認できます。

また、Python用のMinIO SDKを使用することもできます。まず、MinIOパッケージをインストールします。

pip install minio
pip freeze > requirements.txt

以下は、MinIO SDKを使用してMinIOに接続する方法を示す例です。

#!/usr/bin/env python
from minio import Minio
from minio.error import S3Error

def main():
  # アクセスキーとシークレットキーを使用してMinIOサーバーのクライアントを作成
  client = Minio(
    endpoint='<XXXXXX>.stackhero-network.com:443',
    secure=True,
    access_key='YOUR_ACCESS_KEY',
    secret_key='YOUR_SECRET_KEY'
  )

  # バケット 'asiatrip' が存在するか確認し、存在しない場合は作成
  found = client.bucket_exists("asiatrip")
  if not found:
    client.make_bucket("asiatrip")
  else:
    print("Bucket 'asiatrip' already exists")

  # '/home/user/Photos/asiaphotos.zip' を 'asiaphotos-2015.zip' としてバケット 'asiatrip' にアップロード
  client.fput_object(
    "asiatrip", "asiaphotos-2015.zip", "/home/user/Photos/asiaphotos.zip"
  )
  print(
    "'/home/user/Photos/asiaphotos.zip' has been successfully uploaded as "
    "object 'asiaphotos-2015.zip' to bucket 'asiatrip'."
  )


if __name__ == "__main__":
  try:
    main()
  except S3Error as exc:
    print("An error occurred.", exc)

詳細については、MinIO Python SDKドキュメントを参照してください。

PHPをMinIOに接続するには、まずAWS SDK for PHPパッケージをインストールします。

composer require aws/aws-sdk-php

以下の例は、AWS SDKを使用してPHPからMinIOに接続する方法を示しています。

<?php

// Composerのオートローダーを使用してSDKを含める
date_default_timezone_set('America/Los_Angeles');
require 'vendor/autoload.php';

$s3 = new Aws\S3\S3Client([
  'version' => 'latest',
  'region'  => 'us-east-1',
  'endpoint' => 'https://<XXXXXX>.stackhero-network.com',
  'use_path_style_endpoint' => true,
  'credentials' => [
    'key'    => 'YOUR_ACCESS_KEY',
    'secret' => 'YOUR_SECRET_KEY'
  ],
]);

// PutObjectリクエストを送信し、結果を取得
$insert = $s3->putObject([
  'Bucket' => 'testbucket',
  'Key'    => 'testkey',
  'Body'   => 'Hello from MinIO!'
]);

// オブジェクトの内容をダウンロード
$retrieve = $s3->getObject([
  'Bucket' => 'testbucket',
  'Key'    => 'testkey',
  'SaveAs' => 'testkey_local'
]);

// 取得した結果の本文を出力
echo $retrieve['Body'];

GoアプリケーションをMinIOに接続するには2つのオプションがあります。

まず、Go用のAWS SDKパッケージをインストールします。

go get github.com/aws/aws-sdk-go-v2
go get github.com/aws/aws-sdk-go-v2/config

以下は、AWS SDKを使用してGoからMinIOに接続する方法を示す例です。

package main

import (
  "fmt"
  "os"
  "strings"

  "github.com/aws/aws-sdk-go/aws"
  "github.com/aws/aws-sdk-go/aws/credentials"
  "github.com/aws/aws-sdk-go/aws/session"
  "github.com/aws/aws-sdk-go/service/s3"
  "github.com/aws/aws-sdk-go/service/s3/s3manager"
)

func main() {
  bucket := aws.String("newbucket")
  key := aws.String("testobject")

  // MinIOサーバーを使用するように設定
  s3Config := &aws.Config{
    Credentials:      credentials.NewStaticCredentials("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY", ""),
    Endpoint:         aws.String("https://<XXXXXX>.stackhero-network.com"),
    Region:           aws.String("us-east-1"),
    DisableSSL:       aws.Bool(false),
    S3ForcePathStyle: aws.Bool(true),
  }
  newSession := session.New(s3Config)

  s3Client := s3.New(newSession)

  cparams := &s3.CreateBucketInput{
    Bucket: bucket,
  }

  // 新しいバケットを作成
  _, err := s3Client.CreateBucket(cparams)
  if err != nil {
    fmt.Println(err.Error())
    return
  }

  // "Hello from MinIO!"という文字列で新しいオブジェクトをアップロード
  _, err = s3Client.PutObject(&s3.PutObjectInput{
    Body:   strings.NewReader("Hello from MinIO!"),
    Bucket: bucket,
    Key:    key,
  })
  if err != nil {
    fmt.Printf("Failed to upload data to %s/%s, %s\n", *bucket, *key, err.Error())
    return
  }
  fmt.Printf("Successfully created bucket %s and uploaded data with key %s\n", *bucket, *key)

  // オブジェクトを取得してローカルに保存
  file, err := os.Create("testobject_local")
  if err != nil {
    fmt.Println("Failed to create file", err)
    return
  }
  defer file.Close()

  downloader := s3manager.NewDownloader(newSession)
  numBytes, err := downloader.Download(file,
    &s3.GetObjectInput{
      Bucket: bucket,
      Key:    key,
    })
  if err != nil {
    fmt.Println("Failed to download file", err)
    return
  }
  fmt.Println("Downloaded file", file.Name(), numBytes, "bytes")
}

追加の情報は、MinIO Goドキュメントで確認できます。

Go用のMinIO SDKを使用するには、次のパッケージをインストールします。

GO111MODULE=on go get github.com/minio/minio-go/v7

以下は、Go用のMinIO SDKを使用してMinIOに接続する方法を示す例です。

package main

import (
  "log"

  "github.com/minio/minio-go/v7"
  "github.com/minio/minio-go/v7/pkg/credentials"
)

func main() {
  endpoint := "<XXXXXX>.stackhero-network.com"
  accessKeyID := "YOUR_ACCESS_KEY"
  secretAccessKey := "YOUR_SECRET_KEY"
  useSSL := true

  // MinIOクライアントを初期化
  minioClient, err := minio.New(endpoint, &minio.Options{
    Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
    Secure: useSSL,
  })
  if err != nil {
    log.Fatalln(err)
  }

  log.Printf("%#v\n", minioClient) // minioClientが設定されました
}

詳細については、MinIO Go SDKドキュメントを参照してください。

Node.jsアプリケーションをMinIOに接続する方法は2つあります。

まず、Node.js用のAWS SDKパッケージをインストールします。

npm install aws-sdk

以下は、AWS SDKを使用してMinIOに接続する方法を示す例です。

const process = require('process');
const AWS = require('aws-sdk');

const s3 = new AWS.S3({
  accessKeyId: 'YOUR_ACCESS_KEY',
  secretAccessKey: 'YOUR_SECRET_KEY',
  endpoint: 'https://<XXXXXX>.stackhero-network.com',
  s3ForcePathStyle: true, // MinIOで必要
  signatureVersion: 'v4'
});

// putObject操作
s3.putObject(
  { Bucket: 'testbucket', Key: 'testobject', Body: 'Hello from MinIO!' },
  (err, data) => {
    if (err)
      console.log(err);
    else
      console.log('Successfully uploaded data to testbucket/testobject');
  }
);

// getObject操作
const file = require('fs').createWriteStream('/tmp/mykey');
s3.getObject({ Bucket: 'testbucket', Key: 'testobject' })
  .on('httpData', chunk => file.write(chunk))
  .on('httpDone', () => file.end())
  .send();

詳細については、MinIO Node.jsドキュメントを参照してください。

Node.js用のMinIO SDKを使用する場合は、npmを使用してインストールします。

npm install minio

以下は、Node.js用のMinIO SDKを使用してMinIOに接続する方法を示す例です。

const process = require('process');
const Minio = require('minio');

// エンドポイントとアクセスキーを使用してMinIOクライアントをインスタンス化
const minioClient = new Minio.Client({
  endpoint: '<XXXXXX>.stackhero-network.com',
  port: 443,
  useSSL: true,
  accessKeyId: 'YOUR_ACCESS_KEY',
  secretAccessKey: 'YOUR_SECRET_KEY',
});

// アップロードするファイル
const file = '/tmp/photos-europe.tar';

// 'europetrip'というバケットを作成
minioClient.makeBucket(
  'europetrip',
  'us-east-1',
  err => {
    if (err) return console.log(err);

    console.log('Bucket created successfully in "us-east-1".');

    const metaData = {
      'Content-Type': 'application/octet-stream',
      'X-Amz-Meta-Testing': 1234,
      'example': 5678
    };
    // fPutObject APIを使用してファイルをバケット 'europetrip' にアップロード
    minioClient.fPutObject(
      'europetrip',
      'photos-europe.tar',
      file,
      metaData,
      (err, etag) => {
        if (err) return console.log(err);
        console.log('File uploaded successfully.');
      }
    );
  }
);

詳細については、MinIO Node.js SDKドキュメントを参照してください。