دورکاری مفهومی جدید در عصر جدید است! حالا دیگر بشر برای ارتزاق هم نیاز نیست از خانه بیرون برود. در این مقاله میخواهیم راجع به یکی از سرویسهایی که دورکاری را ممکن کرد صحبت کنیم. میخواهیم ببینیم S3 چیست؟
این سرویس توسط یکی از غولهای دنیای تکنولوژی، یعنی Amazon ارائه میشود. در ادامه با قابلیتهای این سرویس و چگونگی راهاندازی آن آشنا خواهیم شد؛ اما ابتدا بیایید کمی بیشتر با S3 آشنا شویم.
S3 چیست؟
همانطور که میدانید، دادهها نقشی بسیار حیاتی در دنیای اینترنت بازی میکنند. همچنین باید بدانید که دادهها هم مثل اشیای فیزیکی به فضایی برای نگهداری نیاز دارند!
Amazon S3، مثل انباری بزرگ است که از دادهها در آن نگهداری میشود. با کمک این سرویس میتوانید دادههای مختلف را ذخیره کنید و در هر زمانی و از هر مکانی به آنها – از طریق وب – دسترسی داشته باشید. اگر مقاله رایانش ابری را بخوانید، با ماهیت این سرویس بیشتر آشنا خواهید شد.
با استفاده از S3، دولوپرها میتوانند از همان ساختار Storageای استفاده کنند که آمازون برای سایتهایش از آن بهره میبرد. همان قدر Scalable، همان قدر قابلاعتماد و همان قدر سریع و صدالبته ارزان! هدف آمازونیها از ارائه این سرویس به دولوپرها، بهرهمند کردن آنها از مزایای S3 است.
خب در ادامه قصد داریم راجع به مزایای این سرویس صحبت کنیم؛ اما قبل از آن باید با چند اصطلاح مرتبط با آن آشنا شوید.
اصطلاحات مرتبط با Amazon S3
اگر قصد کار کردن با S3 را دارید، اینها اصطلاحاتی هستند که زیاد به گوشتان خواهند خورد:
Buckets
باکتها (Bucket) مجموعهای از Storageها هستند که وظیفه نگهداری از دادهها را دارند. اگر بخواهیم یک ساختار برای S3 تعریف کنیم. در بالاترین شاخه، باکتها قرار میگیرند که متشکل از Objectها هستند.
Bucket سه وظیفه مهم را در محیط S3 برعهده دارد:
- فضاهای Amazon S3 را به بهترین شکل سازماندهی میکنند.
- اکانتهایی که اجازه دسترسی به دادهها دارند را شناسایی میکنند.
- در فرایند Access Control نقش دارند.
اگر قصد استفاده از S3 را دارید، میتوانید Region باکتتان را هنگام ساخت مشخص کنید. همچنین میتوانید آن را طوری تنظیم که هربار Object جدیدی اضافه شد، یک Version ID منحصربهفرد به آن اختصاص داده شود.
Objects
همانطور که گفتیم، Bucket در بالاترین شاخه قرار میگیرد و پس از آن Object را داریم. تعریف پیچیده این مفهوم به این شکل است: موجودیتهای بنیادی که در S3 ذخیره میشوند!!
این موجودیتهای بنیادی، متشکل از Metadata و Object Data هستند.
برای اینکه یک Object توسط Bucket شناسایی شود، نیاز به یک کلید (Name) و یک Version ID است.
Keys
همانطور که گفتیم، برای شناسایی Object توسط Bucket، به Key نیاز داریم. هر Object در فضای S3، یک کلید دارد! ترکیب Bucket, Version ID و Key، آبجکت را شناسایی میکند.
Regions
این اصطلاح، محل جغرافیایی نگهداری از Bucket را مشخص میکند. میتوانید انتخاب کنید که Bucket حاوی دادههایتان، در کدام منطقه جغرافیایی ذخیره شود.
این انتخاب میتواند در کاهش زمان پاسخدهی و البته کاهش هزینهها موثر باشد.
نکته: آبجکتهایی که در یک Region ذخیره شده باشند، آنجا را ترک نمیکنند مگر اینکه شما بخواهید منتقلشان کنید!
حالا به مثال زیر که در سایت آمازون قرار دارد توجه کنید:
اگر نام آبجکتی، photos/puppy.jpg باشد و در awsexamplebucket1 ذخیره شده و محل نگهداری از آن در غرب ایالات متحده باشد، URL زیر را خواهد داشت:
https://awsexamplebucket1.s3.us-west-2.amazonaws.com/photos/puppy.jpg
خب برویم سراغ مزایای این سرویس!
Amazon S3 چه مزایایی دارد؟
مسلماً S3 بیرقیب نیست! مثلاً یکی از شناختهشدهترین رقبای آن، Google Cloud Storage است. به همین خاطر، دانستن مزایای آن نسبت به رقبا اهمیت پیدا میکند. البته که S3 طراحی بسیار سادهای دارد و تمرکزش روی نیرومندی است؛ اما بی مزیت هم نیست!
این شما و این مزایای استفاده از S3:
ساخت Bucket
اولیهترین کاری که میتوان در محیط S3 انجام داد، ساخت باکت است! همانطور که گفتیم، Bucket پایه و اساس فضاهای نگهداری در این سرویس است. شما بهعنوان کاربر S3 میتوانید باکت مدنظرتان را با نام دلخواهتان بسازید.
ذخیرهسازی داده
Amazon این امکان را در اختیار کاربران S3 قرار میدهد که میزان نامحدودی از داده را در S3 ذخیره کنند. میتوانید هرتعداد Object که دوست دارید در این فضا آپلود کنید. هر Object میتواند پذیرای 5 ترابایت داده باشد.
همچنین میدانید که دولوپرها، با استفاده از کلید مخصوص میتوانند به Objectها دسترسی داشته باشند.
دانلود داده
یکی از مزایای تمام سیستمهای ابری و صدالبته S3، امکان دسترسی به دادهها در هر زمان و در هر مکان است. هروقت که خواستید میتوانید دادههایتان را دانلود کنید. حتی میتوانید این اجازه را به دیگران هم بدهید تا اگر نیاز است به دادهها دسترسی پیدا کنند.
اجازهها
میتوانید تعیین کنید که چه افرادی امکان دانلود و آپلود فایل در Bucketها را دارند. البته شاید فکر کنید ممکن است امنیت دادهها به خطر بیفتند، اما اینطور نیست! استفاده از مکانیزمهای احراز هویت، از دسترسی افراد غیرمجاز جلوگیری میکند.
رابطهای کاربری استاندارد
برای هرچه سادهتر کردن کار، Amazon دو رابط کاربری Rest و Soap را در اختیار کاربرانش قرار میدهد که بر پایه استانداردها شکل گرفتهاند.
خوب است بدانید S3 برای ذخیرهسازی دادهها، از 3 متد مختلف استفاده میکند.
S3 از چه متدهایی برای ذخیرهسازی استفاده میکند؟
همانطور که تا اینجا متوجه شدید، وظیفه اصلی S3 ذخیرهسازی دادهها است. S3 برای انجام اینکار، از 3 متد مختلف کمک میگیرد:
- STANDARD: از این متد برای مصارف عمومی استفاده میشود. زمانی که نیاز است مرتباً به دادهها دسترسی داشت.
- STANDARD_IA: مثل متد قبلی است. فقط در این حالت دادهها به نسبت حالت قبلی، کمتر مورد استفاده قرار میگیرند.
- S3 GLACIER: اگر قرار است دادهای برای مدت طولانی ذخیره شود، از این متد استفاده میشود.
نکته آخر قبل از پرداختن به آموزش راهاندازی این سرویس:
S3 یکپارچگی بسیار قدرتمندی در تمام دستورات write و read ارائه میکند!
برویم سراغ آموزش.
چگونگی راهاندازی سرویس Amazon S3
برای استفاده از S3، چندین روش وجود دارد. ما در این مقاله 2 روش را یادتان میدهیم: روش S3fs روی CentOS و rclone.
با این آموزش میخواهیم فضای S3 را بعنوان یک پارتیشن به لینوکس معرفی کنیم 👇
روش اول: اتصال فضای پشتیبان S3 از طریق S3fs
قبل از هرکاری، باید پیشنیازهای لازم را نصب کنید. اینکار با کمک دستورهای زیر انجام میشود:
yum install epel-release yum install s3fs-fuse
حالا باید اطلاعات لاگین را در سرور ذخیره کنید:
echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs
توجه داشته باشید که در کد بالا، باید بهجای ACCESS_KEY_ID و SECRET_ACCESS_KEY، مقادیری که در اختیار دارید را وارد کنید.
سپس باید سطح دسترسی را مشخص کنید:
chmod 600 ${HOME}/.passwd-s3fs
حالا باید با دستور زیر، پارتیشن را Mount کنید:
s3fs mybucket /path/to/mountpoint -o passwd_file=${HOME}/.passwd-s3fs -o url=https://END-POINT-ADDRESS/ -o use_path_request_style
در کد بالا هم باید بهجای mybucket، نام Bucketای که ایجاد کردهاید را وارد کنید. در ادامه آن هم باید مسیری از سرور که میخواهید فضا به آن مونت شود را وارد کنید. مقدار ENDPOINT هم مطابق با الگوی درنظر گرفته شده مشخص میشود.
برای اینکه بعد از Reboot شدن سرور، فضای مونت شده، وجود داشته باشد، باید کد زیر را در /etc/fstab اضافه کنید:
mybucket /path/to/mountpoint fuse.s3fs _netdev,allow_other,use_path_request_style,url=https://END-POINT-ADDRESS/ 0 0
یادتان باشد که در این کد هم باید برخی از مقادیر را اصلاح کنید!
نکته 1: اگر پارتیشنی بهصورت S3fs مونت شده باشد و بخواهید با chmod خاصی عمل مونت را انجام دهید، باید از دستور زیر استفاده کنید:
s3fs mybucket /path/to/mountpoint -o passwd_file=${HOME}/.passwd-s3fs -o url=https://END-POINT-ADDRESS/ -o use_path_request_style -o umask=0000
نکته 2: اگر پارتیشنی بهصورت S3fs مونت شده باشد و بخواهید با chown عمل مونت پارتیشن را انجام دهید، باید از دستور زیر استفاده کنید:
s3fs mybucket /path/to/mountpoint -o passwd_file=${HOME}/.passwd-s3fs -o url=https://END-POINT-ADDRESS/ -o use_path_request_style -o uid=1001,gid=1002
روش دوم: آموزش مونت با روشrclone
در قدم اول به مسیر نصب نرمافزار بروید و پوشهای را برای نصب این نرمافزار بسازید.
cd /opt/
👇
sudo mkdir rclone
بعد از ساختن پوشه، باید اسکریپت دانلود و نصب نرمافزار را با دستور زیر اجرا کنید.
sudo curl https://rclone.org/install.sh | sudo bash
حال، برای انجام تنظیمات نرمافزار، اطلاعات S3 را باید وارد کنید. برای انجام این کار طبق دستور زیر عمل کنید.
ابتدا 👇
rclone config
حالا سوالهای پرسیده شده را یک به یک جواب بدهید.
نکته: n را برای دستور New remote وارد کنید.
server@ubuntu:~/Desktop$ rclone config 2021/01/21 00:33:36 NOTICE: Config file "/home/server/.config/rclone/rclone.conf" not found - using defaults No remotes found - make a new one n) New remote s) Set configuration password q) Quit config n/s/q> n
الان دیگر باید نام باکت دلخواهتان را وارد کنید. ما برای مثال از نام bucketname استفاده کردهایم.
name> bucketname
لیست زیر را ببینید. اینجا باید نوع سرویس را انتخاب کنیم. ما گزینهٔ ۴ یعنی S3 را انتخاب میکنیم. درست مثل دستورات زیر.
Type of storage to configure. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / 1Fichier \ "fichier" 2 / Alias for an existing remote \ "alias" 3 / Amazon Drive \ "amazon cloud drive" 4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, Tencent COS, etc) \ "s3" 5 / Backblaze B2 \ "b2" 6 / Box \ "box" 7 / Cache a remote \ "cache" 8 / Citrix Sharefile \ "sharefile" 9 / Dropbox \ "dropbox" 10 / Encrypt/Decrypt a remote \ "crypt" 11 / FTP Connection \ "ftp" 12 / Google Cloud Storage (this is not Google Drive) \ "google cloud storage" 13 / Google Drive \ "drive" 14 / Google Photos \ "google photos" 15 / Hubic \ "hubic" 16 / In memory object storage system. \ "memory" 17 / Jottacloud \ "jottacloud" 18 / Koofr \ "koofr" 19 / Local Disk \ "local" 20 / Mail.ru Cloud \ "mailru" 21 / Mega \ "mega" 22 / Microsoft Azure Blob Storage \ "azureblob" 23 / Microsoft OneDrive \ "onedrive" 24 / OpenDrive \ "opendrive" 25 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH) \ "swift" 26 / Pcloud \ "pcloud" 27 / Put.io \ "putio" 28 / QingCloud Object Storage \ "qingstor" 29 / SSH/SFTP Connection \ "sftp" 30 / Sugarsync \ "sugarsync" 31 / Tardigrade Decentralized Cloud Storage \ "tardigrade" 32 / Transparently chunk/split large files \ "chunker" 33 / Union merges the contents of several upstream fs \ "union" 34 / Webdav \ "webdav" 35 / Yandex Disk \ "yandex" 36 / http Connection \ "http" 37 / premiumize.me \ "premiumizeme" 38 / seafile \ "seafile" Storage> 4
حالا نوبت انتخاب نام سرویسدهندۀ هدف است.
انتخاب ما: گزینهٔ۷،MinIO
** See help for s3 backend at: https://rclone.org/s3/ ** Choose your S3 provider. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / Amazon Web Services (AWS) S3 \ "AWS" 2 / Alibaba Cloud Object Storage System (OSS) formerly Aliyun \ "Alibaba" 3 / Ceph Object Storage \ "Ceph" 4 / Digital Ocean Spaces \ "DigitalOcean" 5 / Dreamhost DreamObjects \ "Dreamhost" 6 / IBM COS S3 \ "IBMCOS" 7 / Minio Object Storage \ "Minio" 8 / Netease Object Storage (NOS) \ "Netease" 9 / Scaleway Object Storage \ "Scaleway" 10 / StackPath Object Storage \ "StackPath" 11 / Tencent Cloud Object Storage (COS) \ "TencentCOS" 12 / Wasabi Object Storage \ "Wasabi" 13 / Any other S3 compatible provider \ "Other" provider> 7
در این مرحله اطلاعات پارتیشن S3 را بهشکل دستی وارد کنید. بدون هیچ ورودی میتوانید اینتر را بزنید.
Get AWS credentials from runtime (environment variables or EC2/ECS meta data if no env vars). Only applies if access_key_id and secret_access_key is blank. Enter a boolean value (true or false). Press Enter for the default ("false"). Choose a number from below, or type in your own value 1 / Enter AWS credentials in the next step \ "false" 2 / Get AWS credentials from the environment (env vars or IAM) \ "true" env_auth>
Access Key ID را وارد کنید.
AWS Access Key ID. Leave blank for anonymous access or runtime credentials. Enter a string value. Press Enter for the default (""). access_key_id> XXXXXXXXXXXX
Secret Access Key را وارد کنید.
AWS Secret Access Key (password) Leave blank for anonymous access or runtime credentials. Enter a string value. Press Enter for the default (""). secret_access_key> XXXXXXXXXX
بدون هیچ ورودی Enter را بزنید تا همان گزینهٔ اول انتخاب شود.
Region to connect to. Leave blank if you are using an S3 clone and you don't have a region. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / Use this if unsure. Will use v4 signatures and an empty region. \ "" 2 / Use this only if v4 signatures don't work, eg pre Jewel/v10 CEPH. \ "other-v2-signature" region>
Endpoint را برای S3 وارد کنید.
Endpoint for S3 API. Required when using an S3 clone. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value endpoint> s3storage.greenwebit.c5.mountains.poshtiban.com
دوباره بدون ورودی خاصی Enter را بزنید و این کار را تا زمانی که علامت 👇 را در این مقاله میبینید ادامه دهید.
Location constraint - must be set to match the Region. Leave blank if not sure. Used when creating buckets only. Enter a string value. Press Enter for the default (""). location_constraint>
👇
Canned ACL used when creating buckets and storing or copying objects. This ACL is used for creating objects and if bucket_acl isn't set, for creating buckets too. For more info visit https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl Note that this ACL is applied when server side copying objects as S3 doesn't copy the ACL from the source but rather writes a fresh one. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / Owner gets FULL_CONTROL. No one else has access rights (default). \ "private" 2 / Owner gets FULL_CONTROL. The AllUsers group gets READ access. \ "public-read" / Owner gets FULL_CONTROL. The AllUsers group gets READ and WRITE access. 3 | Granting this on a bucket is generally not recommended. \ "public-read-write" 4 / Owner gets FULL_CONTROL. The AuthenticatedUsers group gets READ access. \ "authenticated-read" / Object owner gets FULL_CONTROL. Bucket owner gets READ access. 5 | If you specify this canned ACL when creating a bucket, Amazon S3 ignores it. \ "bucket-owner-read" / Both the object owner and the bucket owner get FULL_CONTROL over the object. 6 | If you specify this canned ACL when creating a bucket, Amazon S3 ignores it. \ "bucket-owner-full-control" acl>
👇
The server-side encryption algorithm used when storing this object in S3. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / None \ "" 2 / AES256 \ "AES256" 3 / aws:kms \ "aws:kms" server_side_encryption>
👇
If using KMS ID you must provide the ARN of Key. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / None \ "" 2 / arn:aws:kms:* \ "arn:aws:kms:us-east-1:*" sse_kms_key_id>
👇
Edit advanced config? (y/n) y) Yes n) No (default) y/n>
در این مرحله وارد تنظیمات شدهاید و برای تائید اطلاعات وارد شده اینتر را میزنید.
Remote config -------------------- [bucktname] type = s3 provider = Minio access_key_id = XXXXXXXXXXXX secret_access_key = XXXXXXXXXX endpoint = s3storage.greenwebit.c5.mountains.poshtiban.com -------------------- y) Yes this is OK (default) e) Edit this remote d) Delete this remote y/e/d>
نکته 1: برای خروج از تنظیمات میتوانید Q را وارد کنید، اینتر را بزنید و خارج شوید.
نکته 2: با دستور زیر میتوانید دایرکتوری دلخواه را به باکت مونت کنید.
local/mount
مثال:
rclone mount chatbackup:chatbackup/ /usr/local/bin/data/db/backup/ --daemon
در پایان هم دستور daemon را وارد کنید تا خیالتان از بابت اجرای آن در پسزمینه راحت شود و پس از خروج شما از سرور، قطع ارتباط صورت نگیرد.
جمعبندی
اگر قصد دارید از دادههایتان در یک فضای حرفهای و مطمئن نگهداری کنید، سرویس S3 کمپانی Amazon اینکار را برایتان انجام میدهد. در این مقاله علاوه بر معرفی این سرویس، یکی از روشهای راهاندازی آن را بررسی کردیم.
اگر سوال یا نظری در رابطه با S3 دارید، در قسمت کامنتها با ما مطرح کنید.
2 دیدگاه. دیدگاه تازه ای بنویسید
مکر آمازون ما رو فیلتر نکرده جطور میشه ازش استفاده کرد
در حال حاضر متاسفانه تهیهی سرویس از AWS یا Google Cloud با مشخصات ایرانی به دلیل تحریمها ممکن نیست.
Google Cloud نه تنها به کاربران ایرانی سرویس میزبانی نمیده، بلکه سایتهای خارجی که بر روی Google Cloud میزبانی شدند نیز در دسترس کاربران ایرانی نیستند.
البته خوشبختانه AWS صرفا فقط به عدم ارائهی سرویس بسنده کرده و وبسایتهای خارجی که بر روی سرویسهای AWS میزبانی شدند در دسترس کاربران ایرانی هستند. با استفاده از VPS خارجی هم میشه از این سرویس استفاده کرد.
در کل این مقاله صرفا جهت اشتراک دانشی به زبان فارسی برای آموزش نحوهی استفاده از سرویس S3 آمازون بود؛ در مورد تحریم حق با شماست و متاسفانه امکان تهیهی سرویس با مشخصات ایرانی از آمازون کار سختیه و توصیه نمیشه.