استفاده از S3 با کمک Boto3 - بخش دوم

در بخش‌اول توضیجات لازم در خصوص S3 چی هست ؟ Boto3 چه کاربردی داره ؟ ...

توضیح دادیم، حالا بریم که یکم بیشتر باهاش سر و کله بزنیم.

Objects: listing, downloading, uploading, copy & deleting

برای لیست کردن و دیدن Object های داخل یک Bucket از فانکشن s3.list_objects استفاده می‌کنیم، آرگومان MaxKeys حداکثر تعداد Objectهایی که می‌خوایم لیست بشه رو تعیین می کند. یک آرگومان کاربردیه دیگه که این function داره Prefix است، میتونیم فقط Object هایی رو list کنیم که نامشان با یک پیشوند خاص شروع شده.

# List objects present in a bucket

response = s3.list_objects(
                    Bucket=?,
                    MaxKeys=10
                    Prefix=&quotonly_files_starting_with_this_string&quot 
                    )

می تونیم از ()upload_file برای آپلود فایلی به نام ?، در Bucket مدنظرمون با نام ? ذخیره کنیم.

به طور مشابه، ()download_file فایلی به نام ? را در Bucket مدنظرمون به صورت محلی با نام ? ذخیره می کند.

# Uploading and downloading files

s3.upload_file(Filename=?, Bucket=?, Key=?)
s3.download_file(Filename=?, Bucket=?, Key=?)

کپی یک ?Object از یک Bucket به Bucketای دیگر با نامی? متفاوت :

# Copy Object's

copy_source = {
    'Bucket': 'mybucket?',
    'Key': 'mykey?'
 }
s3.meta.client.copy(copy_source?, 'otherbucket?', 'otherkey?')

حذف Object هم مشابه حذف Bucket است، فقط باید نام Bucket و نام Object مدنظرُ به delete_object پاس بدیم.

# Delete object
s3.delete_object(Bucket=?, Key=?)

چگونه سایز کلی Bucket را محاسبه کنیم

برای محاسبه Total size یک Bucket دو راه داریم (البته تا جایی که من کند و کاو کردم ?)

راه اول استفاده از boto3 ای هست که ما انقدر راجبش حرف زدیم، که من برای Cephای که داشتم استفاده کردم :

ceph_my_bucket = s3.Bucket(&quotvoho&quot)
for my_bucket_object in ceph_my_bucket.objects.all():
      ceph_total_size += my_bucket_object.size
ceph_totalsize_gb = ceph_total_size/1000/1024/1024
print(ceph_totalsize_gb)

راه دوم استفاده از کتابخانه rgwadmin است :

from rgwadmin import RGWAdmin

rgw = RGWAdmin(
           access_key='MY_ACCESS_KEY',
           secret_key='MY_SECRET_KEY',
           server='example.com'
            )

bucket = rgw.get_bucket(bucket='voho')
size = bucket.get('usage', {}).get('rgw.main', {}).get('size_kb', 0)
print (size)

خروجی rgw یک JSON است که از تعداد Object ها تا سایز به KB و bucket_quota و ... در اختیار ما می‌زاره.