تفاوت با API مدیریت
برای ساخت و مدیریت باکت از Gateway استفاده میکنید؛ بایت فایل مستقیماً به endpoint ذخیرهسازی ارسال میشود.
برای این سناریو، باکت خصوصی آماده و کلید READ_WRITE از راهنمای باکت لازم است؛ نمونه برای یک فایل کوچک و باکت آزمایشی بدون نسخهبندی است.
ابزار curl باید قابلیت --aws-sigv4 داشته باشد؛ برای اجرای نمونههای این راهنما، نسخهٔ ۸ یا جدیدتر curl را بهکار ببرید تا امضای بارگذاری S3 نیز پشتیبانی شود.
تنظیم کلیدها
آدرس endpoint را دقیقاً از پاسخ جزئیات باکت بردارید؛ آدرس دامنهٔ دلخواه دریافت فایل یا virtual_host_endpoint را جایگزین این مقدار نکنید.
read -r -p 'S3 endpoint: ' ABRBIT_S3_ENDPOINT
read -r -p 'S3 access key: ' ABRBIT_S3_ACCESS_KEY
read -r -s -p 'S3 secret key: ' ABRBIT_S3_SECRET_KEY; printf '\n'
export ABRBIT_S3_ENDPOINT ABRBIT_S3_ACCESS_KEY ABRBIT_S3_SECRET_KEY
ABRBIT_S3_ENDPOINT=${ABRBIT_S3_ENDPOINT%/}
کلید S3 با توکن API متفاوت است؛ سربرگ Authorization: Bearer را به این درخواستها اضافه نکنید.
ارسال فایل کوچک
نام فایل محلی را به فایل خودتان تغییر دهید؛ نام شیء نمونه فقط از نویسههای ساده استفاده میکند تا به کدگذاری مسیر نیاز نداشته باشد.
توجه: ارسال فایل، دادهٔ واقعی ذخیره میکند و ممکن است هزینهٔ ذخیرهسازی و ترافیک داشته باشد؛ نام مقصد باید برای این آزمایش یکتا باشد تا فایل موجود بازنویسی نشود.
export ABRBIT_OBJECT="api-demo-$(date +%s)-$RANDOM.txt"
printf 'Abrbit API demo\n' > /tmp/abrbit-api-demo.txt
curl --fail-with-body --silent --show-error \
--aws-sigv4 'aws:amz:us-east-1:s3' \
--user "$ABRBIT_S3_ACCESS_KEY:$ABRBIT_S3_SECRET_KEY" \
--header 'Content-Type: text/plain' \
--upload-file /tmp/abrbit-api-demo.txt \
"$ABRBIT_S3_ENDPOINT/$ABRBIT_BUCKET/$ABRBIT_OBJECT"
پاسخ موفق ارسال فایل معمولاً بدنه ندارد؛ برای تأیید، همان شیء را دریافت و محتوا را مقایسه کنید.
دریافت و مقایسه
curl --fail-with-body --silent --show-error \
--aws-sigv4 'aws:amz:us-east-1:s3' \
--user "$ABRBIT_S3_ACCESS_KEY:$ABRBIT_S3_SECRET_KEY" \
--output /tmp/abrbit-api-demo-downloaded.txt \
"$ABRBIT_S3_ENDPOINT/$ABRBIT_BUCKET/$ABRBIT_OBJECT" && \
cmp /tmp/abrbit-api-demo.txt /tmp/abrbit-api-demo-downloaded.txt
خروج موفق cmp بدون نمایش متن یعنی بایتهای فایل دریافتشده با فایل ارسالی یکساناند.
حذف فایل آزمایشی
توجه: دستور زیر فقط شیء مشخصشده در
ABRBIT_OBJECTرا حذف میکند؛ این متغیر را به نام فایل مشتری یا دادهٔ موردنیاز تغییر ندهید.
curl --fail-with-body --silent --show-error --request DELETE \
--aws-sigv4 'aws:amz:us-east-1:s3' \
--user "$ABRBIT_S3_ACCESS_KEY:$ABRBIT_S3_SECRET_KEY" \
"$ABRBIT_S3_ENDPOINT/$ABRBIT_BUCKET/$ABRBIT_OBJECT"
unset ABRBIT_S3_SECRET_KEY ABRBIT_S3_ACCESS_KEY
پس از پاکسازی، کلید آزمایشی و باکت خالی را از API مدیریت حذف کنید؛ در باکت دارای نسخهبندی، حذف ساده لزوماً نسخههای قبلی را پاک نمیکند.
محدودیتها و عیبیابی
برای خطای امضا، مقدار endpoint، کلید، ساعت سیستم و دستنخوردن مسیر درخواست را بررسی کنید؛ برای خطای دسترسی، آماده بودن باکت و سطح کلید را بررسی کنید.
در اتصال SDK یا ابزار S3، از endpoint رسمی و حالت مسیر باکت استفاده کنید؛ نمونهٔ امضا منطقهٔ us-east-1 را بهکار میبرد.
در آپلود مرورگر از کنسول، هر درخواست مستقیم PUT حداکثر ۱۰۰ MiB است؛ این راهنما به معنی وجود API آپلود چندبخشی در Gateway نیست و تنظیم CORS اختصاصی باکت نیز در این نسخه ارائه نمیشود.