はじめに
本記事では MinIO を使用してローカルに S3 環境を構築します。MinIO とは S3 互換性があるオブジェクトストレージです。
Docker イメージも公開されており、手軽に S3 環境を構築することが可能です。
環境
以下の環境で動作を確認しています。
$ docker compose version
Docker Compose version v2.2.3
手順
以下のファイルを準備します。MinIO の立ち上げ自体は docker-compose.yml だけで可能です。
$ tree
.
├── create_bucket.py
├── deploy_file.py
├── docker-compose.yml
├── setup.sh
└── test_data
├── test1.txt
└── test2.txt
version: '3'
services:
minio:
image: minio/minio:latest
container_name: minio
environment:
MINIO_ROOT_USER: localid
MINIO_ROOT_PASSWORD: localpassword
command: ['minio', 'server', '/data', '--console-address', ':8080']
volumes:
- ./minio_data:/export # MinIOストレージの永続化
ports:
- '9000:9000' # APIのエンドポイント
- '8080:8080' # GUI画面のポート
MinIO を立ち上げます。localhost の8080ポートにアクセスすることで GUI でストレージを確認することができます。
ログイン時の ID、パスワードは docker-compose.yml の環境変数(MINIO_ROOT_USER
、MINIO_ROOT_PASSWORD
)で設定したものを使用します。
$ docker compose up -d
バケットを作成する Python プログラム(create_bucket.py)です。
boto3 を使用し、endpoint_url
に localhost の9000 ポートを指定することで、立ち上げた MinIO に対してリクエストをすることが可能です。
import sys
import boto3
BUCKET_NAME = sys.argv[1]
s3 = boto3.resource(
service_name='s3',
endpoint_url='http://localhost:9000',
aws_access_key_id='localid',
aws_secret_access_key='localpassword',
region_name='')
bucket = s3.Bucket(BUCKET_NAME)
def main():
bucket.create()
if __name__ == '__main__':
main()
ストレージ上にファイルを配置する Python プログラム(deploy_file.py)です。
import os
import sys
import boto3
BUCKET_NAME = sys.argv[1]
SOURCE_PATH = './test_data/'
TARGET_PATH = 'test'
s3 = boto3.resource(
service_name='s3',
endpoint_url='http://localhost:9000',
aws_access_key_id='localid',
aws_secret_access_key='localpassword',
region_name='')
bucket = s3.Bucket(BUCKET_NAME)
def main():
list_file_name = os.listdir(SOURCE_PATH)
for file in list_file_name:
bucket.upload_file(f'{SOURCE_PATH}/{file}', f'{TARGET_PATH}/{file}')
if __name__ == '__main__':
main()
上記のプログラムを実行すると、GUI 画面上でもバケットの作成、ファイルのアップロードを確認できます。
$ python3 create_bucket.py s3-local
$ python3 deploy_file.py s3-local
上記の手順をまとめたものが以下になります。
#!/bin/sh
BUCKET_NAME=s3-local
# MinIOの起動
docker compose down
docker compose up -d
echo "waiting for the start of MinIO"
sleep 3
# バケットの作成
python3 create_bucket.py $BUCKET_NAME
# ファイルの配置
python3 deploy_file.py $BUCKET_NAME
おわりに
本記事では MinIO を使用してローカルに S3 環境を構築する方法をまとめました。S3 と接続するプログラムも実際に AWS に繋ぐことなくテストできそうです。
この記事がどなたかの参考になれば幸いです。
コメント