LoginSignup
0
2

More than 3 years have passed since last update.

S3 と同等の機能を持つ MinIOの使用方法 docker-compose を使用

Posted at

概要

諸所諸々の事情(契約の問題や予算など)でAWSのサービスが使えない状況でも開発するためにdockerで使えるようにしてみました。
タイトルはMinIOですがほかにDynamoDB,MySQLも使えるようにしてあります。

事前準備

  • dockerをまず導入します。windows Homeの場合は Docker Quickstart Terminal を使います。
  • アプリの方はPythonを使っているため pythonのインストール(記事作成時は3.7です)。
    • JupyterNotebookなどでも可能です。
  • boto3

docker-compose

  • 今回は docker-compose で起動させるためymlを作成します。
    • 公式を参考に作成します。
    • そのままではInvalid command line arguments: use path style endpoint for FS setup.のエラーになってしまったのでこちらを参考に修正しました。
    • あくまで開発用のため1つだけにしていますが本来は4つnodeを使うようです。
  • MinIO以外にMySQLとDynamoDBも使えるようにしています。
  • 最終的なファイルは以下になります。

  • docker-compose.yml

version: '3.7'
services:
  dynamodb-local:
    build: ./dynamodb
    volumes:
      - dynamodb_data:/home/dynamodblocal/data
    ports:
      - 8000:8000
    command: -jar DynamoDBLocal.jar -dbPath ./data
  mysql:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'password'
    ports:
      - 3306:3306
  minio1:
    image: minio/minio:RELEASE.2020-08-27T05-16-20Z
    volumes:
      - data1-1:/data1
      - data1-2:/data2
    ports:
      - "9000:9000"
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: minio123
    command: server data1
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3
volumes:
  dynamodb_data:
  db_data: {}
  data1-1:
  data1-2:
  • DynamoDBのDockerファイル
FROM amazon/dynamodb-local

WORKDIR /home/dynamodblocal

# UID=1000 → DynamoDB Local の実行ユーザ
RUN mkdir data && chown -R 1000 data
  • 起動すると以下のようにエンドポイントが表示されているのでメモ等取っておきます。
    • Docker Quickstart Terminal の場合はIPアドレスの部分をdocker 起動時に表示されるIPに読み替えてください。
minio1_1          | Endpoint:  http://172.20.0.4:9000  http://127.0.0.1:9000
minio1_1          |
minio1_1          | Browser Access:
minio1_1          |    http://172.20.0.4:9000  http://127.0.0.1:9000
  • http://192.168.99.100:9000/minio/ (Docker Quickstart Terminal のためIPアドレスが違っています)にアクセスすることでブラウザ上でバケットの中などの確認や作成などを行うことができます。

S3機能の実装

  • bucketの作成~ファイルアップロードまでのソースは以下のようになります。
  • S3にアップロードする際のディレクトリ構成を os.path.join で作成すると \\で接続されてしまうのでreplaceで変換しています。
import boto3
import os
from datetime import datetime

endpoint_url = os.getenv('S3_ENDPOINT', 'http://192.168.99.100:9000/')
aws_access_key_id = os.getenv('S3_ACCESS_KEY_ID', 'minio')
aws_secret_access_key_id = os.getenv('S3_SECRET_ACCESS_KEY_ID', 'minio123')

s3 = boto3.resource(
    's3',
    aws_access_key_id=aws_access_key_id,
    aws_secret_access_key=aws_secret_access_key_id,
    endpoint_url=endpoint_url
)

bucket=s3.Bucket('testbukcet')
bucket.create()
bucketPath=os.path.join('dir',datetime.now().strftime('%Y%m%d%H%M%S'),'out','test.csv')
filePath=bucketPath.replace('\\','/')
bucket.upload_file('test.csv',filePath)

  • ブラウザで確認すると以下のように確認できます。 image.png
0
2
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
2