MinIOライブラリインストール
まずは、MinIO 専用のライブラリを使用して操作します。
後述の boto3 よりも便利な機能が多いので、S3 との互換性を求めない場合は、こちらを使ったほうが良いかもしれません。
予め、Access Key をウェブUIから作っておきます。
access_key: 1s0F82C9MS4TRTegI0xf
secret_key: KBCqA1rAzC2vPqTNW8wcy7gsHShdi8eKT56YdMnY
ファイルアップロード
echo "This is test file" >> /tmp/test-file.txt
from minio import Minio
from minio.error import S3Error
def main():
# 接続
client = Minio("192.168.7.38:9000",
access_key="2ztCLhL6RZSO2K2Pvx5m",
secret_key="qF9V0fS5g2egxxHYbOEBU0dMH7lLVfeuO9juSIpp",
secure=False
)
# バケットを作る
# https://min.io/docs/minio/linux/developers/python/API.html#make_bucket
bucket_name = "test-bucket"
found = client.bucket_exists(bucket_name)
if not found:
client.make_bucket(bucket_name)
print("Created bucket", bucket_name)
else:
print("Bucket", bucket_name, "already exists")
# バケット一覧取得
# https://min.io/docs/minio/linux/developers/python/API.html#list_buckets
buckets = client.list_buckets()
for bucket in buckets:
print(bucket.name, bucket.creation_date)
# ファイルアップロード
# https://min.io/docs/minio/linux/developers/python/API.html#fput_object
source_file = "/tmp/test-file.txt"
destination_file = "my-test-file.txt"
client.fput_object(
bucket_name, destination_file, source_file,
)
print(
source_file, "successfully uploaded as object",
destination_file, "to bucket", bucket_name,
)
# バケットのファイル一覧取得
# https://min.io/docs/minio/linux/developers/python/API.html#list_objects
objects = client.list_objects(bucket_name)
for obj in objects:
print(obj.bucket_name, obj.object_name.encode('utf-8'), obj.last_modified,
obj.etag, obj.size, obj.content_type)
if __name__ == "__main__":
try:
main()
except S3Error as exc:
print("error occurred.", exc)
$ python ./minio-test.py
Bucket test-bucket already exists
8beat 2024-07-13 09:34:15.224000+00:00
test-bucket 2024-07-13 09:47:43.533000+00:00
/tmp/test-file.txt successfully uploaded as object my-test-file.txt to bucket test-bucket
test-bucket b'my-test-file.txt' 2024-07-13 01:56:34.762000+00:00 6a9a70f9784007effeaa7da7800fa430 18 None
成功🍻
その他、
に様々な機能について記載があります。
boto3 バージョン
boto3 とは
Amazon Web Services (AWS) のサービスに対してPythonコードからアクセスするための公式SDK(ソフトウェア開発キット)です。Boto3は、AWSのAPIに対して簡潔なインターフェースを提供し、AWSリソースの作成、管理、操作を簡単に行うことができます。
ライブラリインストール
import boto3
def main():
# 接続
s3 = boto3.client(
"s3",
endpoint_url="http://192.168.7.38:9000",
aws_access_key_id="2ztCLhL6RZSO2K2Pvx5m",
aws_secret_access_key="qF9V0fS5g2egxxHYbOEBU0dMH7lLVfeuO9juSIpp",
)
# バケットを作る
bucket_name = "test-bucket"
if bucket_name not in [bucket["Name"] for bucket in s3.list_buckets()["Buckets"]]:
s3.create_bucket(Bucket=bucket_name)
# バケット一覧取得
for bucket in s3.list_buckets()["Buckets"]:
print(bucket["Name"], bucket["CreationDate"])
# ファイルアップロード
source_file = "/tmp/test-file.txt"
destination_file = "boto-test-file.txt"
s3.upload_file(source_file, bucket_name, destination_file)
# バケットのファイル一覧取得
for obj in s3.list_objects(Bucket=bucket_name)["Contents"]:
print(obj["Key"], obj["LastModified"], obj["ETag"], obj["Size"])
if __name__ == "__main__":
try:
main()
except Exception as exc:
print("error occurred.", exc)
$ python minio-boto.py
8beat 2024-07-17 09:34:15.224000+00:00
test-bucket 2024-07-17 09:47:43.533000+00:00
boto-test-file.txt 2024-07-18 02:09:52.197000+00:00 "6a9a70f9784007effeaa7da7800fa430" 18
my-test-file.txt 2024-07-18 02:04:54.722000+00:00 "6a9a70f9784007effeaa7da7800fa430" 18
boto3 でも無事に操作できました。感動🍻