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

شاید با شنیدن S3 به یاد سرویس ObjectStorage آمازون که یک سرویس ذخیره سازی ابری است بیفتید که تا بخشیش درسته ولی تنها این نیست، S3 یک HTTP REST API هم هست که درخواست های های HTTP پاسخگو هست مثل: Read, Write, Delete, Upgrade و حتی Copy.

  • این نکته هم داشته باشیم که S3 و سرویس‌های دیگری همچون DynamoDB, RDS آمازون به دلیل Stateless بودن، (چون REST API هستند) هیچ state را Server، در مورد client sessions در سمت خود ذخیره نمی‌کند.

یعنی چی ؟

زمانی که بین Client و Server یک ارتباط از جنسِ HTTP برقرار می‌شود، در سمتِ Server هرگز وضعیت یا Status یا بهتر بگم اطلاعاتی از Client ذخیره نمی‌شود بلکه روش کار به این صورت است که Client یک Request حاوی کلیهٔ جزئیاتی که Server برای اجرای تَسک مذکور نیاز داره برای Server ارسال می‌کنه و Server هم بدون اینکه دغدغهٔ این را داشته باشد که Client چیست و کجا است، Response مرتبط را در اختیارش می‌گذارد و در نهایت هم این ارتباط به پایان می‌رسد.

هنگام کار با نوت بوک AWS Sagemaker یا یک نوت بوک معمولی jupyter در پایتون ممکن است لازم باشد داده یا فایل را با S3 آپلود کنید. با استفاده از Boto3 می توانید یک فایل یا folder با S3 بنویسید، Boto3 نام Python SDK مختص AWS است.

  • این نکته هم بگم که AWS CLI و Boto3 هر دو بر روی botocore ساخته شدن، که یک Python library سطح پایین که هر چیزی که برای ارسال درخواست API به AWS… و دریافت پاسخ لازم است فراهم می‌کند.
? — a bucket’s name, e.g. “mybucket”
? — an object’s key, e.g. &quotmyfile_s3_name.csv&quot
? — a file's name on your computer, e.g. &quotmyfile_local_name.csv&quot

هم ? و هم ? می‌توانند اسمی که قبلاً در ObjectStorage داشتند یا اسمی که می‌خواهیم به یک bucket یا object جدید ایجاد شده بدیم، نشان دهند. ? نشان‌دهنده file است که ما داریم یا می‌خواهیم در ماشین local خود یا روی یک ObjectStorage دیگر خود داشته باشیم مثلا روی MinIO.

همچنین Boto3 به شما اجازه می دهد تا مستقیماً از طریق Scriptهای Pythonای خودمون با ObjectStorage هایی نظیر Ceph و MinIO ارتباط برقرار کرده و داخل bucketها فایل بریزیم و Object هارو delete و rename و حتی از bucket A به bucket B میتوانید Object هاتون انتقال دهید.

import Boto3
? = &quotmybucket&quot
? = &quotmyfile_s3_name.csv&quot
? = &quotmyfile_local_name.csv&quot

Setting up a client

برای دسترسی به هر سرویس AWS , Ceph و MinIO با Boto3، باید با یک Client به آن متصل شویم. در اینجا، ما یک S3 Client ایجاد می کنیم. همچنین باید access key و secret access key را که می توانیم در کنسول AWS یا هر ObjectStorage دیگری ایجاد کنیم، تعریف کنیم:

s3 = Boto3.client( &quots3&quot,
                     endpoint_url=url,
                     aws_access_key_id=AWS_KEY_ID,
                     aws_secret_access_key=AWS_SECRET
                      )

Buckets: listing, creating & deleting

برای List کردن Bucketهای موجود در ObjectStorageمون، Delete یا Create آن می‌توانیم از functions های، () list_buckets و () create_bucket و () delete_bucket به ترتیب استفاده می‌کنیم.

# List buckets
bucket_response = s3.list_buckets()
buckets = bucket_response[&quotBuckets&quot]

# Create and delete buckets
bucket = s3.create_bucket(Bucket=?)
response = s3.delete_bucket(Bucket=?)