إدارة حاويات كائن ثنائي كبير الحجم باستخدام Azure CLI

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

Azure CLI هو تجربة سطر أوامر عبر الأنظمة الأساسية من Azure لإدارة موارد Azure. يمكنك استخدامه في المستعرض الخاص بك مع Azure Cloud Shell. يمكنك أيضاً تثبيته على الأجهزة التي تعمل بنظام تشغيل macOS أو Linux أو Windows وتشغيله محليًا من سطر الأوامر.

تعلمت في مقالة الإرشادات هذه كيفية استخدام Azure CLI مع Bash للعمل مع كائنات الحاوية.

المتطلبات الأساسية

للوصول إلى Azure Storage، يلزم الحصول على أحد اشتراكات Azure. إذا لم يكن لديك اشتراك بالفعل، فأنشئ حسابًا مجانيًا قبل أن تبدأ.

يتم الوصول إلى Azure Storage من خلال حساب تخزين. بالنسبة للتشغيل السريع هذا، أنشئ حساب تخزين باستخدام مدخل Azure أو Azure PowerShell أو Azure CLI. للمساعدة في إنشاء حساب تخزين، راجع إنشاء حساب تخزين.

إعداد البيئة الخاصة بك لـ Azure CLI

  • من الجيد دومًا تثبيت أحدث إصدار من Azure CLI. إذا كنت تستخدم Azure Cloud Shell، يتم تثبيت أحدث إصدار بالفعل.

السماح بالوصول إلى Blob storage

يمكنك تخويل الوصول إلى تخزين Blob من Azure CLI إما باستخدام بيانات اعتماد Microsoft Entra أو باستخدام مفتاح الوصول إلى حساب التخزين. يوصى باستخدام بيانات اعتماد Microsoft Entra، وتستخدم أمثلة هذه المقالة معرف Microsoft Entra حصريا.

تعمل أوامر Azure CLI لعمليات البيانات مقابل Blob storage على دعم المعلمة --auth-mode، والتي تمكنك من تحديد طريقة تخويل إحدى العمليات المعينة. قم بتعيين المعلمة --auth-mode إلى login للتخويل باستخدام بيانات اعتماد Microsoft Entra. للحصول على مزيد من المعلومات، راجع تخويل الوصول إلى بيانات قائمة الانتظار أو الكائنات الثنائية كبيرة الحجم باستخدام Azure CLI.

شغّل الأمر login لفتح المتصفح واتصل باشتراك Azure.

az login

إنشاء حاوية

لإنشاء حاوية مع Azure CLI، استدعِ الأمر إنشاء حاوية تخزين az. يوضح المثال التالي ثلاثة خيارات لإنشاء حاويات كائن ثنائي كبير الحجم باستخدام الأمر az storage container create. يُنشئ الأسلوب الأول حاوية واحدة، بينما يستخدم الأسلوبان المتبقيان عمليات البرمجة النصية Bash لأتمتة إنشاء حاوية.

لاستخدام هذا المثال، وفّر قيم للمتغيرات وتأكد من تسجيل الدخول. تذكَّر استبدال قيم العناصر النائبة في الأقواس بقيمك.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Approach 1: Create a container
az storage container create \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Approach 2: Create containers with a loop
for value in {2..5}
do
    az storage container create \
        --name $containerPrefix$value \
        --account-name $storageAccount \
        --auth-mode login
done

# Approach 3: Create containers by splitting multiple values
containerList="${containerPrefix}6 ${containerPrefix}7 ${containerPrefix}8"
for container in $containerList
do
    az storage container create \
        --name $container \
        --account-name $storageAccount \
        --auth-mode login
done

قائمة الحاويات

استخدم الأمر az storage container list لاسترداد قائمة حاويات التخزين. لإرجاع قائمة الحاويات التي تبدأ أسماؤها بسلسلة أحرف معينة، مرر السلسلة كقيمة المعلمة --prefix.

يمكن استخدام المعلمة --num-results لتحديد عدد الحاويات التي يُرجعها الطلب. يحد Azure Storage عدد الحاويات التي أرجعتها عملية سرد مفردة إلى 5000. يضمن هذا الحد استرداد كميات البيانات التي يمكن التحكم فيها. إذا كان عدد الحاويات التي تم إرجاعها يتجاوز القيمة --num-results أو حد الخدمة، فسيتم إرجاع رمز متابعة مميز. يسمح لك هذا الرمز المميز باستخدام طلبات متعددة لاسترداد أي عدد من الحاويات.

يمكنك أيضًا استخدام المعلمة --query لتنفيذ JMESPath query على نتائج الأوامر. JMESPath هي لغة استعلام لـ JSON تسمح لك بتحديد البيانات التي تم إرجاعها من إخراج CLI والتعديل عليها. تُنفذ الاستعلامات على إخراج JSON قبل تنسيقه. لمزيد من المعلومات، راجع كيفية الاستعلام عن إخراج الأمر Azure CLI باستخدام استعلام JMESPath.

يسرد المثال التالي أولًا الحد الأقصى لعدد الحاويات (وفقًا لحد الخدمة). بعد ذلك، يسرد ثلاث حاويات تبدأ أسماؤها ببادئة container-عن طريق توفير قيم المعلمات --num-results و--prefix. وأخيرًا، تُسرد حاوية مفردة عن طريق توفير اسم حاوية معروفة إلى المعلمة --prefix.

اقرأ المزيد عن قائمة حاوية تخزين az.

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
containerName="demo-container-1"
numResults="3"

# Approach 1: List maximum containers
az storage container list \
    --account-name $storageAccount \
    --auth-mode login

# Approach 2: List a defined number of named containers
az storage container list \
    --prefix $containerPrefix \
    --num-results $numResults \
    --account-name $storageAccount \
    --auth-mode login

# Approach 3: List an individual container
az storage container list \
    --prefix $containerPrefix \
    --query "[?name=='$containerName']" \
    --account-name $storageAccount \
    --auth-mode login

قراءة خصائص الحاوية وبيانات التعريف

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

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

خصائص الحاوية

لعرض خصائص حاوية مع Azure CLI، استدعِ الأمر عرض حاوية تخزين az.

في المثال التالي، يعرض الأسلوب الأول خصائص حاوية واحدة مسماة. بعد ذلك يسترد جميع الحاويات مع البادئة demo-container- ويتكرر من خلالهم مع سرد خصائصها. تذكر أن تستبدل قيم العنصر النائب بقيمك الخاصة.

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
containerName="demo-container-1"

# Show a named container's properties
az storage container show \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# List several containers and show their properties
containerList=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

for row in $containerList
do
  tmpRow=$(echo $row | sed -e 's/\r//g')
  az storage container show --name $tmpRow --account-name $storageAccount --auth-mode login
done

قراءة بيانات تعريف الحاوية وكتابتها

يمكن للمستخدمين الذين لديهم عدة آلاف من العناصر داخل حساب التخزين خاصتهم تحديد مواقع حاويات معينة بسرعة استنادًا إلى بيانات تعريفهم. لقراءة بيانات التعريف، ستستخدم الأمر az storage container metadata show. لتحديث بيانات التعريف، ستحتاج إلى استدعاء الأمر az storage container metadata update. لا يقبل الأسلوب إلا أزواج قيمة المفاتيح مفصولة بمساحة. لمزيد من المعلومات، راجع وثائق بيانات تعريف حاوية تخزين az.

يُحدث أول مثال مذكور أدناه بيانات تعريف حاوية مسماة ثم يستردها. يُكرر المثال الثاني قائمة الحاويات التي تطابق القيمة -prefix. تحتوي الحاويات ذات الأسماء التي تحتوي على أرقام زوجية على مجموعة بيانات التعريف خاصتها مع قيم مُضمنة في متغير بيانات التعريف.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Create metadata string
metadata="key=value pie=delicious"

# Update named container metadata
az storage container metadata update \
    --name $containerName \
    --metadata $metadata \
    --account-name $storageAccount \
    --auth-mode login

# Display metadata
az storage container metadata show \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Get list of containers
containerList=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

# Update and display metadata
for row in $containerList
do
  #Get the container's number
  tmpName=$(echo $row | sed -e 's/\r//g')
  if [ `expr ${tmpName: ${#containerPrefix}} % 2` == 0 ]
  then
    az storage container metadata update \
        --name $tmpName \
        --metadata $metadata \
        --account-name $storageAccount \
        --auth-mode login
    
    echo $tmpName

    az storage container metadata show \
    --name $tmpName \
    --account-name $storageAccount \
    --auth-mode login    
  fi
done

حذف الحاويات

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

تحذير

تشغيل الأمثلة التالية قد يحذف الحاويات والكائنات الثنائية كبيرة الحجم بشكل دائم. توصي Microsoft بتمكين الحذف المبدئي للحاوية لحماية الحاويات والكائنات الثنائية كبيرة الحجم من الحذف العرضي. لمزيد من المعلومات، راجع حذف مبدئي للحاويات.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Delete a single named container
az storage container delete \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Delete containers by iterating a loop
list=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)
for row in $list
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    az storage container delete \
    --name $tmpName \
    --account-name $storageAccount \
    --auth-mode login
done

إذا مُكّن الحذف المبدئي لحاوية لحساب التخزين خاصتك، إذن من الممكن استرداد الحاويات التي حُذفت. إذا مُكّن خيار حماية بيانات الحذف المبدئي لحساب التخزين خاصتك، ستُرجه المعلمة --include-deleted الحاويات المحذوفة خلال فترة الاستبقاء المُقترنة. لا يمكن استخدام المعلمة --include-deleted إلا لإرجاع الحاويات عند استخدامها مع المعلمة--prefix. لمعرفة المزيد حول الحذف المبدئي، راجع مقالة حذف مبدئي للحاويات.

استخدم المثال التالي لاسترداد قائمة الحاويات المحذوفة ضمن فترة الاستبقاء المُقترنة بحساب التخزين.

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"

# Retrieve a list of containers including those recently deleted
az storage container list \
    --prefix $containerPrefix \
    --include-deleted \
    --account-name $storageAccount\
    --auth-mode login

استعادة حاوية حُذفت مبدئيًا

كما هو مذكور في قسم قائمة الحاويات، يمكنك تكوين خيار حماية بيانات الحذف المبدئي على حساب التخزين خاصتك. عند التمكين، من الممكن استعادة الحاويات المحذوفة خلال فترة الاستبقاء المُقترنة. قبل أن تتمكن من اتباع هذا المثال، ستحتاج إلى تمكين الحذف المبدئي وتكوينه على حساب تخزين واحد على الأقل.

تُوضح الأمثلة التالية كيفية استعادة حاوية حُذفت مبدئيًا باستخدام الأمر az storage container restore. ستحتاج إلى توفير قيم للمعلمات --name و--version لضمان استعادة الإصدار الصحيح من الحاوية. إذا كنت لا تعرف رقم الإصدار، يمكنك استخدام الأمر az storage container list لاسترداده كما هو موضح في المثال الأول. يبحث المثال الثاني عن كافة الحاويات المحذوفة في حساب تخزين معين ويستعيدها.

لمعرفة المزيد حول خيار حماية بيانات الحذف المبدئي، راجع مقالة حذف مبدئي للحاويات.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"

# Restore an individual named container
containerVersion=$(az storage container list \
    --account-name $storageAccount \
    --query "[?name=='$containerName'].[version]" \
    --auth-mode login \
    --output tsv \
    --include-deleted | sed -e 's/\r//g')

az storage container restore \
    --name $containerName \
    --deleted-version $containerVersion \
    --account-name $storageAccount \
    --auth-mode login

# Restore a list of deleted containers
containerList=$(az storage container list \
    --account-name $storageAccount \
    --include-deleted \
    --auth-mode login \
    --query "[?deleted].{name:name,version:version}" \
    -o json)

for row in $(echo "${containerList}" | jq -c '.[]' )
do
    tmpName=$(echo $row | jq -r '.name')
    tmpVersion=$(echo $row | jq -r '.version')
    az storage container restore \
        --account-name $storageAccount \
        --name $tmpName \
        --deleted-version $tmpVersion \
        --auth-mode login
done

الحصول على توقيع الوصول المشترك للحاوية

يوفر توقيع الوصول المشترك (SAS) الوصول المُفوض إلى موارد Azure. يمنحك توقيع الوصول المشترك تحكمًا دقيقًا في كيفية وصول العميل إلى بياناتك. على سبيل المثال، يمكنك تحديد الموارد المُتوفرة للعميل. يمكنك أيضًا تحديد أنواع العمليات التي يمكن للعميل تنفيذها، وتحديد الفاصل الزمني الذي يكون توقيع الوصول المشترك صالحًا فيه.

يُشاع استخدام توقيع الوصول المشترك لتوفير وصول مؤقت وآمن إلى عميل لا يملك أذونات عادة. لإنشاء خدمة توقيع الوصول المشترك أو حساب له، ستحتاج إلى توفير قيم للمعلمات --account-name و--account-key. مثال على هذا السيناريو هو خدمة تسمح للمستخدمين بقراءة بياناتهم وكتابتها في حساب تخزينك.

يدعم Azure Storage ثلاثة أنواع من توقيعات الوصول المشتركة: تفويض المستخدم والخدمة وحساب SAS. للحصول على مزيد من المعلومات حول توقيعات الوصول المشتركة، راجع مقالة منح الوصول المحدود إلى موارد Azure Storage باستخدام توقيعات الوصول المشتركة (SAS).

تنبيه

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

يوضح المثال التالي عملية تكوين خدمة توقيع الوصول المشترك لحاوية معينة باستخدام الأمر az storage container generate-sas. نظرًا لأنه يُنشئ خدمة توقيع الوصول المشترك، فإن المثال يسترد مفتاح حساب التخزين أولًا لتمريره كقيمة --account-key.

سيُكوّن المثال توقيع الوصول المشترك بأوقات البدء وانتهاء الصلاحية والبروتوكول. كما سيتم تحديد أذونات حذف، وقراءة، وكتابة، وقائمة في توقيع الوصول المشترك باستخدام المعلمة --permissions. يمكنك الرجوع إلى الجدول الكامل للأذونات في المقالة إنشاء خدمة توقيع الوصول المشترك.

انسخ قيمة رمز SAS المميز لـ Blob وألصقها في موقع آمن. سيُعرض مرة واحدة فقط ولا يمكن استرداده بمجرد إغلاق Bash. لإنشاء عنوان URL لتوقيع الوصول المشترك، ألحق رمز SAS المميز (URI) إلى عنوان URL لخدمة التخزين.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
permissions="drwl"
expiry=`date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ'`

accountKey=$(az storage account keys list \
    --account-name $storageAccount \
    --query "[?permissions == 'FULL'].[value]" \
    --output tsv)

accountKey=$( echo $accountKey | cut -d' ' -f1 )
 
az storage container generate-sas \
    --name $containerName \
    --https-only \
    --permissions dlrw \
    --expiry $expiry \
    --account-key $accountKey \
    --account-name $storageAccount

إشعار

لا يتضمن رمز SAS المميز الذي تم إرجاعه بواسطة Azure CLI حرف المحدد ('؟') لسلسلة استعلام URL. إذا كنت تقوم بإلحاق رمز SAS المميز بعنوان URL لمورد، فتذكر إلحاق حرف المحدد بعنوان URL للمورد قبل إلحاق رمز SAS المميز.

الخطوات التالية

تعلمت في مقالة الإرشادات كيفية إدارة الحاويات في تخزين كائن ثنائي كبير الحجم. لمعرفة المزيد عن العمل مع تخزين البيانات الثنائية الكبيرة باستخدام Azure CLI، حدد أحد الخيارات أدناه.