اتصال با ابزارهای S3
فضای ابری دادههات با پروتکل S3 سازگار است و میتوانید با ابزارهای رایج خط فرمان و کتابخانههای برنامهنویسی به باکتهای خود متصل شوید. در این راهنما پیکربندی AWS CLI، rclone، s3cmd و کتابخانهی boto3 در Python را بررسی میکنیم.
پیشنیازها
پیش از شروع، موارد زیر را آماده کنید:
- یک باکت. راهنمای مدیریت باکتها را ببینید.
- یک کلید دسترسی S3 شامل «شناسه کلید دسترسی» و «کلید مخفی». راهنمای کلیدهای دسترسی S3 را ببینید.
در تمام ابزارها از مقادیر زیر استفاده کنید:
| تنظیم | مقدار |
|---|---|
| Endpoint | https://s3.ir-central-1.dadehat.com |
| Region | us-east-1 |
| Access Key ID | شناسه کلید دسترسی |
| Secret Access Key | کلید مخفی |
در مثالهای زیر، بهجای <ACCESS_KEY_ID>، <SECRET_ACCESS_KEY> و <BUCKET_NAME> مقادیر خود را قرار دهید.
AWS CLI
سادهترین روش برای یک آزمایش سریع، استفاده از دستوری است که در زبانهی «نمای کلی» باکت نیز نمایش داده میشود:
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 را وارد کنید:
aws configure --profile dadehat
سپس Endpoint را به همین پروفایل اضافه کنید:
aws configure set endpoint_url https://s3.ir-central-1.dadehat.com --profile dadehat
اکنون میتوانید از دستورهای معمول aws s3 استفاده کنید:
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) با زمان انقضای مشخص بسازید. در مثال زیر، پیوند پس از ۳۶۰۰ ثانیه منقضی میشود:
aws s3 presign s3://<BUCKET_NAME>/reports/report.pdf --expires-in 3600 --profile dadehat
rclone
rclone ابزاری مناسب برای همگامسازی و انتقال حجم زیاد فایل است. برای ساخت پیکربندی و فهرست کردن محتوای باکت، از دستور زیر استفاده کنید. این دستور در زبانهی «نمای کلی» باکت نیز نمایش داده میشود:
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 استفاده کنید:
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 را با محتوای زیر بسازید:
[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 استفاده کنید:
s3cmd ls
s3cmd put ./file.txt s3://<BUCKET_NAME>/
s3cmd get s3://<BUCKET_NAME>/file.txt
Python و boto3
برای استفاده از فضای ابری در اپلیکیشنهای Python، کتابخانهی boto3 را نصب کنید و یک کلاینت S3 با Endpoint دادههات بسازید:
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» باکت اضافه کنید. راهنمای مدیریت باکتها را ببینید.