داده هات
ورود

اتصال با ابزارهای S3

فضای ابری داده‌هات با پروتکل S3 سازگار است و می‌توانید با ابزارهای رایج خط فرمان و کتابخانه‌های برنامه‌نویسی به باکت‌های خود متصل شوید. در این راهنما پیکربندی AWS CLI، rclone، s3cmd و کتابخانه‌ی boto3 در Python را بررسی می‌کنیم.

پیش‌نیازها

پیش از شروع، موارد زیر را آماده کنید:

در تمام ابزارها از مقادیر زیر استفاده کنید:

تنظیممقدار
Endpointhttps://s3.ir-central-1.dadehat.com
Regionus-east-1
Access Key IDشناسه کلید دسترسی
Secret Access Keyکلید مخفی

در مثال‌های زیر، به‌جای <ACCESS_KEY_ID>، <SECRET_ACCESS_KEY> و <BUCKET_NAME> مقادیر خود را قرار دهید.

AWS CLI

ساده‌ترین روش برای یک آزمایش سریع، استفاده از دستوری است که در زبانه‌ی «نمای کلی» باکت نیز نمایش داده می‌شود:

bash
AWS_ACCESS_KEY_ID=<ACCESS_KEY_ID> AWS_SECRET_ACCESS_KEY=<SECRET_ACCESS_KEY> AWS_DEFAULT_REGION=us-east-1 aws --endpoint-url https://s3.ir-central-1.dadehat.com s3 ls s3://<BUCKET_NAME>/

برای استفاده‌ی مداوم، یک پروفایل جداگانه بسازید. از دستور زیر استفاده کنید و در پاسخ به پرسش‌ها، شناسه کلید، کلید مخفی و ریجن us-east-1 را وارد کنید:

bash
aws configure --profile dadehat

سپس Endpoint را به همین پروفایل اضافه کنید:

bash
aws configure set endpoint_url https://s3.ir-central-1.dadehat.com --profile dadehat

اکنون می‌توانید از دستورهای معمول aws s3 استفاده کنید:

bash
aws s3 ls --profile dadehat
aws s3 ls s3://<BUCKET_NAME>/ --profile dadehat
aws s3 cp ./report.pdf s3://<BUCKET_NAME>/reports/report.pdf --profile dadehat
aws s3 cp s3://<BUCKET_NAME>/reports/report.pdf ./report.pdf --profile dadehat
aws s3 sync ./backups s3://<BUCKET_NAME>/backups --profile dadehat
یادداشت

توجه داشته باشید که تنظیم endpoint_url در فایل پیکربندی در نسخه‌های جدید AWS CLI پشتیبانی می‌شود. اگر نسخه‌ی شما قدیمی است، در هر دستور از گزینه‌ی --endpoint-url https://s3.ir-central-1.dadehat.com استفاده کنید.

ساخت پیوند موقت دانلود

برای اشتراک‌گذاری موقت یک فایل بدون عمومی کردن باکت، می‌توانید یک پیوند امضاشده (Presigned URL) با زمان انقضای مشخص بسازید. در مثال زیر، پیوند پس از ۳۶۰۰ ثانیه منقضی می‌شود:

bash
aws s3 presign s3://<BUCKET_NAME>/reports/report.pdf --expires-in 3600 --profile dadehat

rclone

rclone ابزاری مناسب برای همگام‌سازی و انتقال حجم زیاد فایل است. برای ساخت پیکربندی و فهرست کردن محتوای باکت، از دستور زیر استفاده کنید. این دستور در زبانه‌ی «نمای کلی» باکت نیز نمایش داده می‌شود:

bash
rclone config create dadehat s3 provider=Ceph endpoint=https://s3.ir-central-1.dadehat.com region=us-east-1 access_key_id=<ACCESS_KEY_ID> secret_access_key=<SECRET_ACCESS_KEY> && rclone ls dadehat:<BUCKET_NAME>

پس از ساخت پیکربندی، می‌توانید از دستورهای معمول rclone استفاده کنید:

bash
rclone lsd dadehat:
rclone copy ./photos dadehat:<BUCKET_NAME>/photos --progress
rclone sync ./site dadehat:<BUCKET_NAME>/site --progress
هشدار

دستور rclone sync فایل‌هایی را که در مبدأ وجود ندارند از مقصد حذف می‌کند. پیش از اجرای آن روی داده‌های مهم، دستور را یک‌بار با گزینه‌ی --dry-run اجرا کنید.

s3cmd

برای پیکربندی s3cmd، فایل ~/.s3cfg را با محتوای زیر بسازید:

text
[default]
access_key = <ACCESS_KEY_ID>
secret_key = <SECRET_ACCESS_KEY>
host_base = s3.ir-central-1.dadehat.com
host_bucket = %(bucket)s.s3.ir-central-1.dadehat.com
bucket_location = us-east-1
use_https = True

سپس از دستورهای s3cmd استفاده کنید:

bash
s3cmd ls
s3cmd put ./file.txt s3://<BUCKET_NAME>/
s3cmd get s3://<BUCKET_NAME>/file.txt

Python و boto3

برای استفاده از فضای ابری در اپلیکیشن‌های Python، کتابخانه‌ی boto3 را نصب کنید و یک کلاینت S3 با Endpoint داده‌هات بسازید:

python
import boto3

s3 = boto3.client(
    "s3",
    endpoint_url="https://s3.ir-central-1.dadehat.com",
    region_name="us-east-1",
    aws_access_key_id="<ACCESS_KEY_ID>",
    aws_secret_access_key="<SECRET_ACCESS_KEY>",
)

s3.upload_file("report.pdf", "<BUCKET_NAME>", "reports/report.pdf")

for item in s3.list_objects_v2(Bucket="<BUCKET_NAME>").get("Contents", []):
    print(item["Key"], item["Size"])

url = s3.generate_presigned_url(
    "get_object",
    Params={"Bucket": "<BUCKET_NAME>", "Key": "reports/report.pdf"},
    ExpiresIn=3600,
)
print(url)

کتابخانه‌های S3 در زبان‌های دیگر نیز به همین شکل پیکربندی می‌شوند: کافی است Endpoint، ریجن us-east-1 و کلید دسترسی را در تنظیمات کلاینت وارد کنید.

نکته

پیشنهاد می‌شود کلید دسترسی را مستقیماً در کد قرار ندهید و آن را از متغیرهای محیطی یا یک مدیر اسرار بخوانید. اگر اپلیکیشن شما در کانتینر اجرا می‌شود، کلید را در «متغیرهای محیطی» کانتینر تعریف کنید.

رفع خطاهای رایج

  • خطای 403 یا AccessDenied: کلید دسترسی را بررسی کنید. ممکن است کلید باطل شده باشد، سطح دسترسی آن برای این عملیات کافی نباشد، باکت در فهرست باکت‌های مجاز کلید نباشد، یا کیف پول شما معلق شده باشد.
  • خطای NoSuchBucket: نام باکت را بررسی کنید و مطمئن شوید Endpoint به‌درستی روی https://s3.ir-central-1.dadehat.com تنظیم شده است.
  • خطای امضا (SignatureDoesNotMatch): مقدار ریجن را روی us-east-1 قرار دهید و از درستی کلید مخفی مطمئن شوید.
  • خطای CORS در مرورگر: مبدأ اپلیکیشن را در «مبدأهای CORS» باکت اضافه کنید. راهنمای مدیریت باکت‌ها را ببینید.