كيفية العمل مع تخزين Blob عبر تخزين ملفات Azure

قد تجد نفسك في حاجة إلى حل رخيص وفعال لتخزين ملفاتك في وقت ما، ولكن أين تجد هذا الحل؟ تحقق من تخزين كائن البيانات الكبير (Blob) في Microsoft Azure! تعد تخزين الـ Blob واحدة من خدمات تخزين Azure وتتيح لك تخزين كميات كبيرة من الملفات النصية والبيانات الثنائية ومحتوى التدفق أو حتى المحتوى الثابت للتوزيع.

في هذا البرنامج التعليمي، ستتعلم كيفية العمل مع تخزين الـ Blob في Azure من خلال بعض الأمثلة الشائعة.

استمر في القراءة للانغماس في الموضوع!

الشروط المسبقة

سيكون هذا البرنامج التعليمي عرضًا عمليًا. إذا كنت ترغب في متابعة العملية، تأكد من تثبيت وتوافر ما يلي.

بناء بيئة Azure

قبل استخدام تخزين البلوب لتخزين ملفاتك، ستحتاج أولاً إلى استيراد وحدات PowerShell Core، الاتصال بالاشتراك الخاص بك في Azure، وبناء بيئة Azure.

1. قم بتشغيل PowerShell 7 وقم بتشغيل الأمر التالي لاستيراد الوحدات التي ستستخدمها لتخزين الملفات في تخزين البلوب.

Importing the necessary modules
# Az.Accounts - يوفر أوامر إدارة الاعتماد
# Az.Resources - يوفر أوامر للعمل مع مزودي خدمات موارد Azure على المستوى العلوي ، 
               # مثل الاشتراكات
# Az.Storage - يوفر الأوامر التي ستساعدك في العمل مع 
             # موارد التخزين المختلفة ، مثل البلوب
Import-Module Az.Accounts, Az.Resources, Az.Storage

2. بعد ذلك ، قم بتسجيل الدخول إلى مستأجر Azure Active Directory (AD) الخاص بك، ثم قم بتشغيل الأمر أدناه لإكمال المصادقة التفاعلية في متصفح الويب الخاص بك ، كما هو موضح أدناه.

على الرغم من أنه خارج نطاق هذا البرنامج التعليمي، إلا أن هناك طرق مصادقة أخرى، مثل Service Principal أو استخدام access token.

Connect-AzAccount
Azure Portal interactive login.

تأكد دائمًا من أن المستأجر والاشتراك المعروضين بعد تسجيل الدخول هما تلك التي تنوي استخدامها. إذا لزم الأمر، يمكنك تغيير سياقك.

3. الآن قم بتشغيل الأمر أدناه لإنشاء مجموعة موارد resource group جديدة ب اسم demo، ومضاف إليها خمسة أرقام عشوائية (Get-Random -Maximum 99999). تكون مجموعات الموارد تحت التسجيل بشكل تسلسلي وتحتوي على موارد تسمح بإدارة أدق.

لاحظ أن -Location لمجموعة الموارد مضبوطة على Central US في هذا المثال. عند اكتمال الأمر، يقوم بتخزين النتيجة في متغير $resourceGroup.

$resourceGroup = New-AzResourceGroup "demo$(Get-Random -Maximum 99999)" -Location 'Central US'
Creating a new resource group

4. قم بتشغيل الأمر أدناه لأداء المهام التالية وإنشاء حساب تخزين Azure جديد. في هذا المثال، يكون اسم حساب التخزين هو storage، وملحق بخمسة أرقام عشوائية (Get-Random -Maximum 99999). ستحتوي المتغير $storageAccount على الكائن المرجع بعد اكتمال الأمر.

# قم بتمرير -ResourceGroupName مع خاصية ResourceGroupName
# من المتغير $resourceGroup الذي تم إنشاؤه في الخطوة الثالثة.
# أضف أرقامًا عشوائية إلى اسم حساب التخزين -Name
# مماثلة لمجموعة الموارد.
# قم بتعيين نفس -Location كخاصية المتغير $resourceGroup's Location.
# وضع الموارد في نفس المنطقة كمجموعة الموارد الأصلية هو ممارسة جيدة.
# حدد اسم حساب التخزين بواسطة -SkuName مع
# تخزين محلي متكرر (LRS) أو اسم فريد عالميًا داخل Azure.

$storageAccount = New-AzStorageAccount `
 -ResourceGroupName $resourceGroup.ResourceGroupName `
 -Name storage$(Get-Random -Maximum 99999) `
 -Location $resourceGroup.Location `
 -SkuName Standard_LRS
Creating a new storage account

5. قم بتنفيذ الأمر أدناه لتشغيل بعض المهام لتعيين دور Azure AD:

  • قيمة -SignInName تستخدم الحساب الذي تم تسجيل الدخول إليه حاليًا عبر خاصية UserID المرجعة بواسطة cmdlet Get-AzAccessToken.
  • قيمة -RoleDefinitionName هي دور المساهم في بيانات حاوية التخزين المدمج التي تقوم بتعيينها.
  • قيمة -Scope تحدد نطاق تعيين الدور لحساب التخزين الذي تم إنشاؤه (storage10029 المعروض أدناه) عبر خاصية Id لمتغير $storageAccount.

يمكنك دائمًا توفير تعيينات أدوار أكثر تفصيلاً لحاويات فردية حسب الحاجة.

New-AzRoleAssignment `
 -SignInName (Get-AzAccessToken).UserId`
 -RoleDefinitionName "Storage Blob Data Contributor"`
 -Scope $storageAccount.Id
Creating and verifying a new file

6. أخيرًا ، قم بتشغيل سلسلة الأوامر أدناه لإنشاء ملف يسمى temp.dat على النظام المحلي الخاص بك. ستقوم بتحميل وتنزيل هذا الملف من حساب التخزين في الأقسام التالية لتوضيح كيفية عمل تخزين السحابة.

# قم بتحميل فئة FileStream .NET
$file = New-Object System.IO.FileStream .\temp.dat,Create,ReadWrite
# قم بتعيين حجم الملف
$file.SetLength(10MB)
# أغلق المقبض
$file.Close()
# ابحث عن الملف للتحقق من الحجم
(Get-ChildItem $file.Name).Length
Creating and verifying a new file

تحميل الملفات عبر PowerShell

الآن بعد أن قمت ببناء بيئة Azure وأنشأت ملفًا تجريبيًا، دعونا نبدأ بتحميل الملف إلى تخزين Blob. تخزين Blob يعمل بطريقة مختلفة عن أنظمة الملفات القياسية. يُعتبر كل ملف في تخزين Blob ككائن ويُحفظ داخل حاويات.

الوظيفة الأساسية لـ blobs مشابهة لأنظمة الملفات الأخرى، ولكن هناك حالات استخدام قد تكون إحدى الحلول أفضل فيها من الأخرى. يمكن أن تؤيد ال blobs حتى أنظمة الملفات الظاهرية (على سبيل المثال، BlobFuse).

تقدم Microsoft عدة طرق لتحميل الملفات إلى حسابات التخزين الخاصة بك عبر PowerShell و AzCopy و Azure Portal. ولكن دعونا نقوم بتحميل الملف التجريبي (temp.dat) إلى تخزين Blob عبر PowerShell للبداية. يتيح لك PowerShell تجربة متسقة للعمل مع حسابات تخزين Azure الخاصة بك.

سيتم تحميل الإجراءات المطلوبة لأداء هذا العرض تكاليف. راقب استهلاكك واحذف الموارد عندما لا تنوي استخدامها بعد الآن.

قم بتشغيل الأوامر أدناه لإنشاء حاوية جديدة وتحميل ملف temp.dat ($file) ككائن. تم تسمية الحاوية باسم demo في هذا المثال، ولكن يمكنك تسميتها بشكل مختلف حسب تفضيلك.

# ينشئ حاوية داخل $storageAccount عبر خاصية Context لحساب التخزين
# يتم تمرير الكائن المُرَجَّع إلى المتغير $container بعد ذلك
$container = New-AzStorageContainer -Name demo -Context $storageAccount.Context
# يقوم بتحميل ملف temp.dat ($file) إلى حاوية العرض ($container)
# سيستخدم اسم الكتلة (-Blob) نفس اسم الملف الذي تقوم بتحميله (احصل على عنصر فرعي $file.Name)
Set-AzStorageBlobContent -File $file.Name -Container $container.Name -Blob (Get-ChildItem $file.Name).Name -Context $storageAccount.Context
Uploading a file to Azure Storage Account

تحميل الملفات عبر AzCopy

ربما لديك حالات استخدام أكثر تعقيدًا، مثل مزامنة المحتوى أو نسخ المحتوى بين حسابات مختلفة بشكل مكبّر. إذا كان الأمر كذلك، فإن أداة سطر الأوامر AzCopy هي ما تحتاجه.

قم بتشغيل الأوامر أدناه لتسجيل الدخول إلى مستأجر Azure الخاص بك ونسخ ملفك المحلي ($file) إلى عنوان URL الخاص بحاويتك. أنت تقوم بتسجيل الدخول إلى مستأجر Azure لأن AzCopy لا يعرف بالاعتمادات التي تستخدمها مع PowerShell.

# تسجيل الدخول إلى المستأجر Azure
& .\azcopy.exe login
# انسخ الملف المحلي $file إلى عنوان URI الكامل لوجهة $container
& .\azcopy.exe copy $file.Name $container.CloudBlobContainer.Uri.AbsoluteUri
Uploading to Azure Storage Account using AzCopy

بدلاً من الرفع، ربما ترغب في تنزيل الملفات عبر AzCopy. إذا كنت كذلك، قم بتشغيل الأمر أدناه لـ نسخ الملفات المحددة (temp.dat) من حاويتك إلى الدليل المحلي الحالي: & .\azopy.exe copy "$($container.CloudBlobContainer.Uri.AbsoluteUri)/temp.dat" .\temp.dat

تحميل الملفات عبر بوابة Azure

إذا كنت تفضل طريقة GUI لتحميل ملفاتك، فـ Azure Storage Explorer هو صديقك. Azure Storage Explorer هو أحد أفضل الطرق الرسومية لإدارة تخزين الكتل الخاص بك. يمكنك الوصول إلى مستكشف التخزين من مورد حساب التخزين في بوابة Azure.

1. افتح المتصفح الويب المفضل لديك وانتقل إلى مستكشف التخزين في بوابة Azure.

2. انقر فوق الحاوية demo تحت حاويات الكتل، كما هو موضح أدناه، ثم انقر فوق تحميل للوصول إلى شفرة تحميل الكتلة (لوحة اليمين).

3. الآن انقر فوق أيقونة المجلد في اللوحة تحميل الكتلة لتحديد الملفات التي تريد تحميلها (temp.dat).

4. أخيرًا، انقر على تحميل (زر أزرق) لتحميل ملفك.

Using the Upload blob blade in Azure Storage Explorer

بمجرد اكتمال التحميل، يمكنك إغلاق شاشة تحميل الكتلة ورؤية الكتلة التي قمت بتحميلها، مثل الصورة أدناه.

Viewing contents of a blob container in Azure Storage Explorer

تنزيل الملفات عبر بوابة Azure

بشكل مماثل لتحميل المحتوى إلى تخزين الكتل، تدعم Azure تنزيل المحتوى بعدة طرق. ولكن نظرًا لأنك قمت للتو بتحميل ملف (temp.dat) عبر بوابة Azure، دعونا نقوم بتنزيل نفس الملف باستخدام Azure Storage Explorer في بوابة Azure.

حدد الملف (temp.dat) للتنزيل وانقر على زر تنزيل في Azure Storage Explorer، كما هو موضح أدناه. وبذلك، تنشأ نافذة حوارية جديدة لتأكيد عملية التنزيل التي سترونها في الخطوة التالية.

Selecting Files to Download

الآن انقر على زر انقر هنا لبدء التنزيل لتنزيل الملفات التي حددتها.

Downloading Selected Files from the Blob Storage

تنزيل الملفات عبر PowerShell

مثل تحميل الملفات، تحصل أيضًا على خيار لتنزيل الملفات من تخزين الكتل عن طريق تشغيل أوامر في PowerShell. باستخدام PowerShell، يمكنك إدراج الكائنات داخل حاوية ثم تنزيلها.

قم بتشغيل الأوامر أدناه لإدراج جميع الكائنات في الحاوية الخاصة بك وتنزيل temp.dat إلى الدليل المحلي الخاص بك.

# قائمة جميع الكائنات داخل $container للتحقق من إنشاء الحاوية الفارغة
Get-AzStorageBlob -Container $container.Name -Context $storageAccount.Context
# تنزيل كائن temp.dat من $container
Get-AzStorageBlobContent -Blob temp.dat -Container $container.Name -Context $storageAccount.Context
Downloading files from Azure Storage Account

إذا كنت تفضل استخدام روابط فريدة وقصيرة لتنزيل الملفات، يمكنك استخدام رموز الوصول المشتركة (SAS) لإنشاء رابط تنزيل مُفوّض مسبقًا. هذه الرموز فريدة وخاصة، وهي رموز مصادقة يمكنك استخدامها للتحقق من وصولك.

قم بتشغيل الأوامر التالية لإنشاء رابط تنزيل جديد للملف (temp.dat) الذي تريد تنزيله. ينتهي صلاحية الرابط الذي تم إنشاؤه بعد 10 ثوانٍ، وسيقوم بتنزيل المحتوى (Invoke-WebRequest $uri) باستخدام تلك الروابط إلى المتغير $temp.

# إنشاء رابط تنزيل جديد صالح لمدة 10 دقائق
$uri = New-AzStorageBlobSASToken -Context $storageAccount.Context -Container $container.Name -Blob temp.dat -Permission r -ExpiryTime (Get-Date).AddSeconds(10) -FullUri
# استخدام الرابط لتنزيل الملف إلى المتغير $temp
$temp = Invoke-WebRequest $uri

# بديلة، يمكنك كتابة الملف إلى الدليل الحالي
Invoke-WebRequest $uri -OutFile .\temp.dat
Download from Azure Storage Account using a SAS token

استضافة صفحة ويب على الإنترنت العامة من تخزين الكتل

حتى الآن، رأيت حالات استخدام لتنزيل الملفات من قبل مستخدمين مصدقين. ولكن هل تعلم أن تخزين الكتل يمكن أن يوفر خيارًا ممتازًا للمحتوى العام أيضًا؟ مثال على ذلك هو استخدام كتلة لاستضافة محتوى صفحة الويب الخاص بك، والذي ستحقق ذلك في هذا العرض التوضيحي.

حتى إذا كانت محتويات صفحة الويب الخاصة بك مشفرة سواء أثناء النقل أو في حالة الراحة، يمكن لأي شخص الوصول إلى تلك المحتويات إذا تم تعيين الوصول العام.

بما أنك تقوم بإعداد حالة استخدام مختلفة، ستستفيد من أحد الفوائد الرئيسية للسحابة العامة في النطاق والمرونة. يمكنك تخصيص حساب تخزين جديد لحالة استخدام معينة وتقليل مخاطر استخدام حاويات السحابة العامة.

1. قم بتشغيل الأمر أدناه لإنشاء حساب تخزين جديد كما فعلت في الخطوة الرابعة من قسم “بناء بيئة Azure”. ولكن هذه المرة، ستمرر الكائن المسترجع إلى المتغير $publicStorageAccount.

$publicStorageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroup.ResourceGroupName -Name storage$(Get-Random -Maximum 99999) -Location $resourceGroup.Location -SkuName Standard_LRS
Creating a storage account

الآن لديك حساب تخزين مخصص للمحتوى العام، ويمكنك تكوينه لاستضافة محتوى الويب الثابت باستخدام الأمر التالي.

2. في الخطوة التالية، قم بتشغيل أمر Enable-AzStorageStaticWebsite لتكوين حساب التخزين ($publicStorageAccount) لحالة الاستخدام الجديدة الخاصة بك. يُحدد -IndexDocument صفحة الويب الافتراضية التي تريد تقديمها للمستخدمين. و-Context سيكون حساب التخزين الجديد الذي أنشأته للتو.

# أنشئ حاوية $web وقم بتكوين حساب التخزين
Enable-AzStorageStaticWebsite -IndexDocument index.html -Context $publicStorageAccount.Context
Enable storage account for website hosting

3. قم بتشغيل الأوامر أدناه لإنشاء مستند HTML جديد في الدليل الحالي وتحميل هذا المستند إلى الحاوية المخصصة خصيصًا لاستضافة محتوى الويب. يُعين نوع المحتوى على HTML (ContentType="text/html") حتى يتمكن متصفح الويب من تفسير المستند بشكل صحيح.

الوصول إلى المستند على متصفح الويب يطبع Hello from <storage account name> message.

# إنشاء ملف HTML بسيط
"<body><h1>Hello from $($publicStorageAccount.StorageAccountName)!</h1></body>"|Out-File .\index.html
# قم بتحميل ملف HTML إلى حاوية استضافة الويب الثابتة وتعيين نوع المحتوى إلى text/html
Set-AzStorageBlobContent -File .\index.html -Container "`$web" -Properties @{ContentType="text/html"} -Context $publicStorageAccount.Context
Create and upload an HTML document

4. الآن قم بتشغيل الأمر التالي للحصول على عنوان URL حيث يمكن للمستخدمين الوصول إلى محتواك.

$publicStorageAccount.PrimaryEndpoints.Web
Get the URI of the endpoint

5. وأخيرًا، افتح الرابط في متصفحك، سترى شيئًا مشابهًا للصورة الموجودة أدناه.

Accessing HTML Document from Blob Storage

تنظيف الموارد

الآن بعد أن قمت بتجربة هذه المفاهيم الجديدة في استخدام تخزين blob، سترغب في تنظيف مواردك. لماذا؟ لأن ذلك يساعدك على الحفاظ على اشتراكك نظيفًا. والأهم من ذلك، تتوقف عن تكبد تكاليف إضافية.

نظرًا لأن جميع الموارد التي استخدمتها في هذا البرنامج التعليمي موجودة في مجموعة موارد واحدة، يمكنك تنظيف جميع الموارد عن طريق حذف مجموعة الموارد.

الموارد لن تكون دائمًا محتواة ضمن مجموعة موارد واحدة، مما يوضح لماذا يمكن أن يكون الاستخدام الليبرالي للتقسيم اللوجي مناسبًا، خاصة عند الاختبار أو التكرار بشكل متكرر.

قم بتشغيل الأمر Remove-AzResourceGroup أدناه، محددًا خاصية ResourceGroupName لمتغير $resourceGroup لحذف مجموعة الموارد وجميع الموارد داخلها.

Remove-AzResourceGroup -Name $resourceGroup.ResourceGroupName
Delete resource group and contents

الاستنتاج

في هذا البرنامج التعليمي، لمست عملية تحميل وتنزيل الملفات إلى ومن الـ blobs في تخزين السحابة على منصات مختلفة. كما تعلمت أنه من الممكن استضافة صفحة ويب من تخزين الـ blob التي يمكن للمستخدمين الوصول إليها علنًا.

يمكنك القيام بالمزيد باستخدام تخزين الكتل وأنواع التخزين الأخرى، فكيف ستبني على هذه المفاهيم؟ ربما تعمل مع حسابات تخزين الملفات، وتوفر أنظمة ملفات خادمية، أو تستخدم كتل الصفحات لأقراص صلبة افتراضية مع أجهزة الكمبيوتر الظاهرية في Azure؟

Source:
https://adamtheautomator.com/blob-storage/