نحوه اتصال به فضای ابری پارس پک از طریق AWS SDK

در این مقاله میخوانید
اتصال به فضای ابری روشهای مختلفی دارد که از مهمترین آنها میتوان به دسترسی به فضای ابری ازطریق AWS SDK اشاره کرد. فضای ذخیرهسازی ابری (Cloud Storage) به فناوری ذخیرهسازی دادهها در سرورها و مراکز داده مجازی گفته میشود. از ویژگیهای فضای ذخیرهسازی ابری میتوان به موارد زیر اشاره کرد:
- اشتراکگذاری آسان دادهها با دیگران
- نگهداری نسخههای پشتیبان از دادهها
- امکان بهروزرسانی و همگامسازی خودکار دادهها
- افزایش امنیت دادهها با رمزنگاری و کنترل دسترسی
- قابلیت دسترسی به دادهها از هر مکان و در هر زمان
- کاهش هزینههای نگهداری و مدیریت زیرساختهای ذخیرهسازی
- دادهها روی سرورهای ابری ذخیره میشوند نه روی دستگاههای کاربر
در این مقاله، درباره فضای ابری پارس پک، ویژگیهای آن و ارتباط آن با پروتکل S3 آمازون صحبت خواهیم کرد. همچنین نحوه خرید و مدیریت فضای ذخیره سازی ابری و اتصال به آن با استفاده از AWS SDK را آموزش خواهیم داد.
آشنایی با فضای ذخیرهسازی ابری پارس پک
فضای ذخیرهسازی ابری پارس پک با زیرساخت قدرتمند و امکانات بهروز، امنیت و دوام دادههای کاربران خود را تضمین میکند و دادهها را در هر مکان و زمانی در دسترس کاربران قرار میدهد. این فضا با استفاده از پنل مدیریتی اختصاصی و معماری Multi-Tenant، امکانات پیشرفتهای را برای کاربران فراهم میکند و تا به امروز رضایت حداکثری کاربران را جلب کرده است.
شما میتوانید برای اتصال به فضای ابری پارس پک از روشهای مختلفی استفاده کنید. یکی از این روشها استفاده از AWS SDK است. در ادامه نحوه اتصال به فضای ابری پارس پک از طریق AWS SDK را آموزش خواهیم داد.
روشهای مختلفی برای دسترسی به سرویس فضای ذخیرهسازی ابری وجود دارد که ازجمله رایجترین آنها اتصال به فضای ابری پارس پک با پروتکل S3 است. برای اتصال به فضای ابری پارس پک از طریق AWS SDK فقط باید مرتبط با زبان برنامهنویسی مورد استفاده سرویستان پکیجهای مربوطه را نصب و فعال کنید تا امکان دسترسی به فایلهایتان در باکت فضای ابری برایتان فراهم شود.
پروتکل S3 آمازون چیست و چه ارتباطی با فضای ابری پارس پک دارد؟
برنامههای کاربردی توسعهیافته در فضای ابری اغلب از مقیاسپذیری وسیع و ویژگیهای فراداده Object Storage بهره میبرند. Amazon Simple Storage Service یا Amazon S3 سرویس ذخیرهسازی ابری آبجکت (Object Storage) است که مقیاسپذیری، دردسترسبودن دادهها، امنیت و سرعت چشمگیر از قابلیتهای آن محسوب میشود.
با استفاده از پروتکل S3 آمازون، میتوانید هر حجم داده را ذخیره و بازیابی کنید و در هر زمان و مکانی، به آن دسترسی داشته باشید. این پروتکل برای ساخت برنامههای پیشرفته نیازمند به مقیاس و انعطافپذیری ایدهآل است. معمولاً از ذخیرهسازی آبجکت برای وبسایتهای فروشگاهی، پشتیبانگیری، بایگانی و تحلیل دادهها بیشتر استفاده میشود.
فضای ذخیرهسازی ابری پارسپک یکی از بهترین و ایمنترین استوریجهای (storage) ایرانی است که برای بهبود سرعت و عملکرد و سرویسدهی از پروتکل S3 آمازون بهره میبرد. همانطور که پیشتر گفتیم برای اتصال به این Cloud Storage، میتوانید از SDK آمازون استفاده کنید. در ادامه، نحوه انجام این کار را بهطور کامل آموزش خواهیم داد.

مراحل استفاده از فضای ابری پارس پک
برای استفاده از فضای ابری، باید چند مفهوم ساده را درک کنید. S3 آمازون دادهها را بهعنوان Object درون Bucket ذخیره میکند. هر شیء (Object) شامل یک فایل و متاداده (فراداده) است که آن فایل را توصیف میکند. برای ذخیره شیء در S3، کافی است فایل مد نظرتان را در Bucket آپلود کنید. توجه کنید که وقتی فایل را بارگذاری میکنید، میتوانید مجوزهایی برای شیء و هر متاداده تنظیم کنید. برای استفاده از فضای ابری پارس پک باید مراحل زیر را طی کنید.
۱. دسترسی به حساب
پس از اینکه فضای ذخیرهسازی ابری خود را از پارس پک دریافت کردید، اطلاعات اتصال به فضای ابری در بخش فضای ابری، برایتان ایجاد شده و به نمایش در میآید.

۲. اتصال و استفاده
اکنون برای اضافهکردن فایل به کلود استوریج خود کاملاً آماده هستید. این فایل میتواند هر نوع فایلی باشد؛ مانند صوت، متن، عکس و ویدئو. سادهترین راه این است که از طریق پنل کاربری پارس پک، یک پوشه جدید ایجاد کرده و فایل مدنظرتان را در آن آپلود کنید. اما اتصال به فضای ابری پارس پک از طریق AWS SDK امکانپذیر است که در ادامه نحوه انجام این کار را آموزش میدهیم.

آموزش اتصال به فضای ابری از طریق AWS SDK
در این قسمت، آموزش اتصال به فضای ابری پارس پک از طریق AWS SDK را برای برخی زبانهای برنامهنویسی بهصورت جداگانه آموزش خواهیم داد و لینک دانلود کد را نیز در هر بخش قرار میدهیم.
آیا به فضای ذخیرهسازی نیاز دارید؟ در مقاله زیر، با فضای ابری آشنا شوید و ببینید که چگونه میتواند به شما کمک کند تا دادههای خود را بهطور کارآمدتر، انعطافپذیرتر و مقرونبهصرفهتر مدیریت کنید.
۱. زبان PHP
برای اتصال به فضای ابری خود ازطریق SDK آمازون (AWS)، ابتدا با استفاده از دستور زیر پکیجهای موردنیاز را نصب کنید، لازم است Composer را از پیش نصب کرده باشید، سپس دستور زیر را اجرا کنید:
$ composer require aws/aws-sdk-php

برای آپلود فایل، ابتدا ازطریق کلاس Credentials اطلاعات مربوط به باکت خود را مشخص کنید:
$key = 'YOUR_ACCESS_KEY'; $secret = 'YOUR_SECRET_KEY'; $credentials = new Aws\Credentials\Credentials($key, $secret);

سپس، تنظیمات زیر را هنگام ایجاد شیء جدید از کلاس S3Client وارد کنید:
$bucket = 'YOUR_BUCKET_NAME'; // Example : c123456 $domain = 'YOUR_BUCKET_DOMAIN'; // Example : https://c123456.domain.com $s3 = new Aws\S3\S3Client([ 'version' => 'latest', 'region' => 'us-west-2', 'credentials' => $credentials, 'endpoint' => $domain, 'http' => [ 'verify' => false ], 'use_path_style_endpoint' => true ]);

برای دریافت فهرست فایلهای باکت، میتوانید از کد زیر استفاده کنید:
try { $results = $s3->getPaginator('ListObjects', [ 'Bucket' => $bucket ]); foreach ($results as $result) { foreach ($result['Contents'] as $object) { echo $object['Key'] . PHP_EOL; } } } catch (Aws\S3\Exception\S3Exception $e) { echo $e->getMessage() . PHP_EOL; }

پس از تکمیل کد و اجرای آن، فهرست فایلهای موجود نمایش داده میشود:

برای آپلود فایل میتوانید از نمونه کد زیر استفاده کنید:
$sourceFilePath = 'source-file-name.txt'; $filePath = 'path/to/destination/file.txt'; $result = $s3->putObject([ 'Bucket' => $bucket, 'Key' => $filePath, 'SourceFile' => $sourceFilePath, ]);
برای آپلود یک فایل نمونه به باکت خود دستور زیر را اجرا کنید:
$ php s3.php put

برای دریافت فایل از باکت میتوانید از نمونه کد زیر استفاده کنید:
$targetPath = 'path/to/local/file.txt'; $sourceFilePath = 'path/to/file.txt'; $result = $s3->getObject([ 'Bucket' => $bucket, 'Key' => $sourceFilePath, 'SaveAs' => $targetPath ]);
برای دریافت فایل نمونه آپلود شده به باکت دستور زیر را اجرا کنید:
$ php s3.php get

برای حذف فایل از باکت میتوانید از نمونه کد زیر استفاده کنید:
$filePath = 'path/to/file.txt'; $result = $s3->deleteObject([ 'Bucket' => $bucket, 'Key' => $filePath ]);
برای حذف فایل نمونه آپلود شده از باکت دستور زیر را اجرا کنید:
$ php s3.php delete

۲. فریمورک Laravel
برای اتصال به فضای ابری خود در لاراول ابتدا با استفاده از دستور زیر پکیج های مورد نیاز را نصب کنید:
composer require league/flysystem-aws-s3-v3:^1.0

سپس تنظیمات زیر را در هنگام ایجاد شیء جدید از کلاس S3Client وارد کنید:
$key = 'YOUR_ACCESS_KEY'; $secret = 'YOUR_SECRET_KEY'; $bucket = 'YOUR_BUCKET_NAME'; // Example : c123456 $domain = 'YOUR_BUCKET_DOMAIN'; // Example : https://c123456.domain.com $s3 = new Aws\S3\S3Client ([ 'version' => 'latest', 'region' => 'us-east-1', 'endpoint' => $domain, 'use_path_style_endpoint' => true, 'credentials' => [ 'key' => $key, 'secret' => $secret, ], ]);

نمونه کد ارائه شده برای تست در S3Controller قرار دارد. مشخصات باکت خود را در کنترلر وارد کرده و پس از اجرای سرور لاراول در خط فرمان از طریق مسیر زیر اتصال خود به باکت را بررسی کنید:
php artisan serve http://127.0.0.1:8000/get-files

۳. زبان GO
برای اتصال به فضای ابری خود با استفاده از Go ابتدا با استفاده از دستورات زیر پکیجهای مورد نیاز را نصب کنید:
mkdir ~/s3 cd ~/s3 go mod init s3 go get github.com/aws/aws-sdk-go-v2/aws go get github.com/aws/aws-sdk-go-v2/config go get github.com/aws/aws-sdk-go-v2/service/dynamodb

برای اتصال به باکت اطلاعات مربوطه را در فایل s3.go مشخص کنید:
bucket := "c123456" domain := "https://c123456.parspack.net" accessKey := "YOUR_ACCESS_KEY" secretKey := "YOUR_SECRET_KEY"

برای دریافت لیست فایلهای باکت میتوانید از کد زیر استفاده کنید:
resp, err := svc.ListObjectsV2(&s3.ListObjectsV2Input{Bucket: aws.String(bucket)}) if err != nil { exitErrorf("Unable to list items in bucket %q, %v", bucket, err) } for _, item := range resp.Contents { fmt.Println("Name: ", *item.Key) fmt.Println("Size: ", *item.Size) fmt.Println("") } fmt.Println(len(resp.Contents), "files")
برای مشاهده لیست فایلهای باکت دستور زیر را اجرا کنید:
go run s3.go list

برای آپلود فایل میتوانید از نمونه کد زیر استفاده کنید:
filename := "./parspack.png" file, err := os.Open(filename) if err != nil { exitErrorf("Unable to open file %q, %v", err) } defer file.Close() uploader := s3manager.NewUploader(sess) _, err = uploader.Upload(&s3manager.UploadInput{ Bucket: aws.String(bucket), Key: aws.String(filename), Body: file, }) if err != nil { exitErrorf("Unable to upload %q to %q, %v", filename, bucket, err) } fmt.Println("Uploaded file: ",filename)
برای آپلود یک فایل نمونه به باکت خود دستور زیر را اجرا کنید:
go run s3.go put

برای دریافت فایل از باکت میتوانید از نمونه کد زیر استفاده کنید:
item := "parspack-downloaded.png" file, err := os.Create(item) if err != nil { exitErrorf("Unable to open file %q, %v", item, err) } defer file.Close() downloader := s3manager.NewDownloader(sess) numBytes, err := downloader.Download( file, &s3.GetObjectInput{ Bucket: aws.String(bucket), Key: aws.String("parspack.png"), }) if err != nil { exitErrorf("Unable to download item %q, %v", item, err) } fmt.Println("Downloaded", file.Name(), numBytes, "bytes")
برای دریافت فایل نمونه آپلود شده به باکت دستور زیر را اجرا کنید:
go run s3.go get

برای حذف فایل از باکت میتوانید از نمونه کد زیر استفاده کنید:
obj := "parspack.png" _, err = svc.DeleteObject(&s3.DeleteObjectInput{Bucket: aws.String(bucket), Key: aws.String(obj)}) if err != nil { exitErrorf("Unable to delete object %q from bucket %q, %v", obj, bucket, err) } err = svc.WaitUntilObjectNotExists(&s3.HeadObjectInput{ Bucket: aws.String(bucket), Key: aws.String(obj), }) if err != nil { exitErrorf("Error occurred while waiting for object %q to be deleted, %v", obj, err) } fmt.Printf("File %q deleted\n", obj)
برای حذف فایل نمونه آپلود شده از باکت دستور زیر را اجرا کنید:
go run s3.go delete

۴. Node.js
برای اتصال به فضای ابری خود از طریق SDK آمازون (AWS) ابتدا با استفاده از دستور زیر پکیج S3 را نصب کنید:
npm install @aws-sdk/client-s3

برای اتصال به باکت اطلاعات مربوطه را در فایل s3.js مشخص کنید:
let domain = 'https://c123456.parspack.net'; let bucketName = 'c123456'; let accessKey = 'YOUR_ACCESS_KEY'; let secretkey = 'YOUR_SECRET_KEY';

برای دریافت لیست فایل های باکت میتوانید از کد زیر استفاده کنید:
var response = await s3.send( new ListObjectsCommand({ Bucket: bucketName, }) );
برای دریافت لیست فایلهای باکت دستور زیر را در ترمینال اجرا کنید:
node s3.js list
پس از اجرای دستور لیست فایلها نمایش داده میشود:

برای آپلود فایل میتوانید از نمونه کد زیر استفاده کنید:
var file = __dirname + '/parspack.png'; var filePath = 'images/parspack.png'; const fileStream = fs.createReadStream(file); const uploadParams = { Bucket: bucketName, Key: filePath, ACL: 'public-read', // 'private' | 'public-read' Body: fileStream, }; fileStream.on('error', function (err) { console.log('File Error', err); }); try { var data = await s3.send(new PutObjectCommand(uploadParams)); console.log('Success', data); } catch (err) { console.log('Error', err); }
برای آپلود یک فایل نمونه به باکت خود دستور زیر را اجرا کنید:
node s3.js put

برای دریافت فایل از باکت میتوانید از نمونه کد زیر استفاده کنید:
var filePath = 'images/parspack.png'; const param = { Bucket: bucketName, Key: filePath }; var data = await s3.send(new GetObjectCommand(param)); const ws = fs.createWriteStream( __dirname + '/parspack-downloaded.png' ); data.Body.pipe(ws); console.log('Success');

برای حذف فایل از باکت میتوانید از نمونه کد زیر استفاده کنید:
var filePath = 'images/parspack.png'; var data = await s3.send( new DeleteObjectCommand({ Bucket: bucketName, Key: filePath }) );
برای حذف فایل نمونه آپلود شده از باکت دستور زیر را اجرا کنید:
node s3.js delete

۵. زبان python
برای اتصال به فضای ابری خود با استفاده از python ابتدا با استفاده از دستور زیر پکیجهای مورد نیاز را نصب کنید:
pip install boto3

برای اتصال به باکت اطلاعات مربوطه را در فایل s3.py مشخص کنید:
domain = 'https://c123456.parspack.net' bucketName = 'c123456' accessKey = 'YOUR_ACCESS_KEY' secretKey = 'YOUR_SECRET_KEY'

سپس با این تنظیمات توسط نمونه کد زیر به باکت متصل شوید:
try: s3_resource = boto3.resource( 's3', endpoint_url=domain, aws_access_key_id=accessKey, aws_secret_access_key=secretKey ) except Exception as exc: logging.info(exc) else: bucket = s3_resource.Bucket(bucketName)
برای دریافت لیست فایلهای باکت میتوانید از کد زیر استفاده کنید:
for obj in bucket.objects.all(): logging.info(f"object_name: {obj.key}, last_modified: {obj.last_modified}")
برای مشاهده لیست فایلهای باکت دستور زیر را اجرا کنید:
python3 s3.py list

برای آپلود فایل میتوانید از نمونه کد زیر استفاده کنید:
file_path = './parspack.png' object_name = 'parspack.png' with open(file_path, "rb") as file: bucket.put_object( ACL='private', Body=file, Key=object_name )
برای آپلود یک فایل نمونه به باکت خود دستور زیر را اجرا کنید:
python3 s3.py put

برای دریافت فایل از باکت میتوانید از نمونه کد زیر استفاده کنید:
object_name = 'parspack.png' download_path = 'parspack-downloaded.png' bucket.download_file( object_name, download_path )
برای دریافت فایل نمونه آپلود شده به باکت دستور زیر را اجرا کنید:
python3 s3.py get

برای حذف فایل از باکت میتوانید از نمونه کد زیر استفاده کنید:
object_name = 'parspack.png' object = bucket.Object(object_name) object.delete()
برای حذف فایل نمونه آپلود شده از باکت دستور زیر را اجرا کنید:
python3 s3.py delete
استفاده از s3 با aioboto3
aioboto3 یک کتابخانه عالی برای تعامل ناهمزمان با سرویسهای AWS در پایتون، از جمله Amazon S3 است. در اینجا نحوه استفاده از aioboto3 برای انجام عملیاتهای رایج S3 را بررسی میکنیم:
نصب aioboto3
pip install aioboto3
اتصال به S3
import aioboto3 async def main(): session = aioboto3.Session() async with session.client('s3') as s3: # عملیاتهای S3 در اینجا انجام میشود ایجاد Bucket await s3.create_bucket( Bucket='my-bucket-name', CreateBucketConfiguration={ 'LocationConstraint': 'eu-central-1' # منطقه دلخواه } )
آپلود فایل
await s3.upload_file( Filename='local_file.txt', Bucket='my-bucket-name', Key='remote_file.txt' )
دانلود فایل
await s3.download_file( Bucket='my-bucket-name', Key='remote_file.txt', Filename='downloaded_file.txt' )
لیست اشیاء در Bucket
response = await s3.list_objects_v2(Bucket='my-bucket-name') for obj in response['Contents']: print(obj['Key'])
حذف شیء
await s3.delete_object( Bucket='my-bucket-name', Key='remote_file.txt' )
حذف Bucket
await s3.delete_bucket(Bucket='my-bucket-name')
نکات:
- برای استفاده از aioboto3، باید با مفاهیم برنامهنویسی ناهمزمان در پایتون (async/await) آشنا باشید.
- برای انجام عملیاتها، به مجوزهای IAM مناسب نیاز دارید.
- میتوانید از session.resource(‘s3’) برای استفاده از رابط resource-oriented استفاده کنید.
- برای اطلاعات بیشتر و مثالهای کاملتر، به مستندات aioboto3 از طریق لینک https://aioboto3.readthedocs.io/ مراجعه کنید.
مثال:
import aioboto3 async def main(): session = aioboto3.Session() async with session.client('s3') as s3: ایجاد bucket: await s3.create_bucket( Bucket='my-bucket-name', CreateBucketConfiguration={ 'LocationConstraint': 'eu-central-1' } )
آپلود فایل:
await s3.upload_file( Filename='local_file.txt', Bucket='my-bucket-name', Key='remote_file.txt' )
دانلود فایل:
await s3.download_file( Bucket='my-bucket-name', Key='remote_file.txt', Filename='downloaded_file.txt' )
لیست اشیاء:
response = await s3.list_objects_v2(Bucket='my-bucket-name') for obj in response['Contents']: print(obj['Key'])
حذف شیء:
await s3.delete_object( Bucket='my-bucket-name', Key='remote_file.txt' )
حذف bucket:
await s3.delete_bucket(Bucket='my-bucket-name') if __name__ == '__main__': import asyncio asyncio.run(main())
۶. فریمورک net.
برای اتصال به فضای ابری خود از طریق SDK ابتدا با استفاده از دستور زیر پکیج S3 را نصب کنید:
Install-Package Minio
برای اتصال به باکت، اطلاعات مربوطه را بهصورت زیر قرار دهید:
string endpoint = "c123456.parspack.net"; string accessKey = "ACCESS_KET"; string secretKey = "SECRET_KEY"; string region = ""; string sessionToken = ""; Client = new MinioClient().WithEndpoint(endpoint); if (!string.IsNullOrEmpty(accessKey) && !string.IsNullOrEmpty(secretKey)) { Client.WithCredentials(accessKey, secretKey); } if (!string.IsNullOrEmpty(region)) { Client.WithRegion(region); } if (!string.IsNullOrEmpty(sessionToken)) { Client.WithSessionToken(sessionToken); } Client.WithSSL().Build();
برای دریافت لیست فایلهای باکت میتوانید از کد زیر استفاده کنید:
bool found = await minio.Client.BucketExistsAsync(new BucketExistsArgs().WithBucket("c123456")); if (found) { // List objects from 'my-bucketname' ListObjectsArgs args = new ListObjectsArgs() .WithBucket("c123456") .WithRecursive(true); IObservable<Item> observable = minio.Client.ListObjectsAsync(args); string log = ""; bool done = false; IDisposable subscription = observable.Subscribe( item => log += $"OnNext: {item.Key}" + "\n", ex => log += $"OnError: {ex.Message}" + "\n", () => done = true); while (!done) { continue; } richTextBox1.Text = log; }
جمعبندی
اتصال به فضای ابری از طریق AWS SDK به شما امکان میدهد با زبانهای برنامهنویسی مختلف به فضای ذخیرهسازی ابری خود متصل شده و باکتهای خود را مدیریت کنید.
فضای ابری پارس پک سرویسی مطمئن برای ذخیرهسازی انواع فایلها بهشمار میرود. این فضای ذخیرهسازی قابلیتهایی دارد که کاربران میتوانند با کمک آنها بهراحتی اطلاعاتشان را در آن ذخیره کنند و در زمان و مکان دلخواه با اتصال به اینترنت، به آنها دسترسی داشته باشند.
در این مقاله از آموزش سرویسهای میزبانی بلاگ پارس پک درباره فضای ذخیرهسازی ابری پارس پک و ویژگیهای آن صحبت کردیم. همچنین پروتکل S3 آمازون را بررسی کرده و نحوه خرید فضای ابری و اتصال به فضای ابری پارس پک ازطریق SDK آمازون را توضیح دادیم.
سؤالات متداول
۱. فضای ابری چیست؟
فضای ذخیره سازی ابری (Cloud Storage) نوعی مدل رایانش ابری است که دادهها را ازطریق ارائهدهنده رایانش ابری در اینترنت ذخیره و دادههای ذخیرهشده را مدیریت و اجرا میکند.
۲. پروتکل S3 آمازون چیست؟
پروتکل S3 (Simple Storage Service) یکی از خدمات ابری ارائه شده توسط آمازون وب سرویس (Amazon Web Services) است. S3 یک سرویس ذخیرهسازی ابری است که به شما امکان ذخیره و بازیابی دادهها در هر زمان و از هر مکان را میدهد. این سرویس برای ذخیرهسازی ایمن و مقیاسپذیر دادهها و فایلها استفاده میشود.
۳. فضای ذخیرهسازی ابری پارس پک چه ویژگیهایی دارد؟
از ویژگیهای فضای ابری پارس پک میتوان به مجهز بودن به پروتکل S3 آمازون، معماری Multi-Tenant، پنل ویژه مدیریتی و… اشاره کرد.
۴. چطور میتوان به فضای ابری پارس پک متصل شد؟
شما میتوانید از طریق SDK به فضای ابری پارس پک یا همان پروتکل S3 آمازون متصل شوید. برای دانلود فایل SDK برای هر زبان برنامهنویسی به مقاله مراجعه کنید. همچنین امکان آپلود فایل از طریق پنل نیز مهیاست.