تعيين أو تغيير طبقة وصول كائن ثنائي كبير الحجم للكتلة باستخدام Python

توضح هذه المقالة كيفية تعيين أو تغيير طبقة الوصول لكتلة blob باستخدام مكتبة عميل Azure Storage ل Python.

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

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

إعداد بيئتك

إذا لم يكن لديك مشروع موجود، يوضح لك هذا القسم كيفية إعداد مشروع للعمل مع مكتبة عميل Azure Blob Storage ل Python. لمزيد من التفاصيل، راجع بدء استخدام Azure Blob Storage وPython.

لاستخدام أمثلة التعليمات البرمجية في هذه المقالة، اتبع هذه الخطوات لإعداد مشروعك.

تثبيت الحزم

قم بتثبيت الحزم التالية باستخدام pip install:

pip install azure-storage-blob azure-identity

إضافة عبارات الاستيراد

أضف عبارات import التالية:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
    BlobServiceClient,
    BlobClient,
    StandardBlobTier,
    RehydratePriority
)

التصريح

يجب أن يكون لآلية التخويل الأذونات اللازمة لتعيين طبقة الوصول إلى كائن ثنائي كبير الحجم. للحصول على تخويل باستخدام معرف Microsoft Entra (مستحسن)، تحتاج إلى دور Azure RBAC المضمن في Storage Blob Data Contributor أو أعلى. لمعرفة المزيد، راجع إرشادات التخويل ل Set Blob Tier.

إنشاء كائن عميل

لتوصيل تطبيق ب Blob Storage، قم بإنشاء مثيل BlobServiceClient. يوضح المثال التالي كيفية إنشاء كائن عميل باستخدام DefaultAzureCredential للتخويل:

# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()

# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)

يمكنك أيضا إنشاء كائنات العميل لحاويات أو كائنات ثنائية كبيرة الحجم معينة، إما مباشرة أو من BlobServiceClient العنصر. لمعرفة المزيد حول إنشاء كائنات العميل وإدارتها، راجع إنشاء كائنات العميل التي تتفاعل مع موارد البيانات وإدارتها.

حول مستويات الوصول إلى الكائن الثنائي كبير الحجم للكتلة

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

مستويات الوصول لبيانات الكائن الثنائي كبير الحجم

تتضمن طبقات التخزين إلى Azure Storage ما يلي:

  • الطبقة الساخنة - طبقة عبر الإنترنت محسّنة لتخزين البيانات التي يتم الوصول إليها أو تعديلها بشكل متكرر. الطبقة الساخنة لديها أعلى تكاليف التخزين، ولكن أقل تكاليف الوصول.
  • الطبقة الباردة - طبقة عبر الإنترنت محسّنة لتخزين البيانات التي نادراً ما يتم الوصول إليها أو تعديلها. يجب تخزين البيانات في الطبقة الباردة لمدة لا تقل عن 30 يوما. يحتوي المستوى البارد على تكاليف تخزين أقل وتكاليف وصول أعلى مقارنة بالطبقة الساخنة.
  • الطبقة الباردة - طبقة عبر الإنترنت محسنة لتخزين البيانات التي يتم الوصول إليها أو تعديلها بشكل غير متكرر. يجب تخزين البيانات في الطبقة الباردة لمدة لا تقل عن 90 يوما. تحتوي الطبقة الباردة على تكاليف تخزين أقل وتكاليف وصول أعلى مقارنة بالطبقة الباردة.
  • الطبقة الأرشيفية - طبقة بلا اتصال محسّنة لتخزين البيانات التي نادراً ما يتم الوصول إليها، والتي لها متطلبات زمن انتقال مرنة، حسب ترتيب الساعات. يجب تخزين البيانات في مستوى الأرشيف لمدة لا تقل عن 180 يوما.

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

أثناء وجود كائن ثنائي كبير الحجم في طبقة تخزين "الأرشيف"، فإنه يُعتبر غير متصل ولا يمكن قراءته أو تعديله. لقراءة البيانات أو تعديلها في كائن ثنائي كبير الحجم مؤرشف، يجب أولا إعادة ترطيب الكائن الثنائي كبير الحجم إلى طبقة عبر الإنترنت. لمعرفة المزيد حول إعادة ترطيب كائن ثنائي كبير الحجم من طبقة الأرشيف إلى طبقة عبر الإنترنت، راجع إعادة ترطيب Blob من طبقة الأرشيف.

القيود

يسمح بتعيين طبقة الوصول فقط على الكائنات الثنائية كبيرة الحجم للكتلة. لمعرفة المزيد حول القيود المفروضة على تعيين طبقة وصول كائن ثنائي كبير الحجم للكتلة، راجع تعيين طبقة Blob (REST API).

إشعار

لتعيين طبقة الوصول إلى Cold استخدام Python، يجب استخدام الحد الأدنى لإصدار مكتبة العميل من 12.15.0.

تعيين مستوى وصول كائن ثنائي كبير الحجم أثناء التحميل

يمكنك تعيين طبقة وصول كائن ثنائي كبير الحجم عند التحميل عن طريق تمرير وسيطة standard_blob_tier الكلمة الأساسية إلى upload_blob أو upload_blob_from_url.

يوضح مثال التعليمات البرمجية التالي كيفية تعيين طبقة الوصول عند تحميل كائن ثنائي كبير الحجم:

def upload_blob_access_tier(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
    
    #Upload blob to the cool tier
    with open(file=os.path.join(r'file_path', blob_name), mode="rb") as data:
        blob_client = blob_client.upload_blob(data=data, overwrite=True, standard_blob_tier=StandardBlobTier.COOL)

لمعرفة المزيد حول تحميل كائن ثنائي كبير الحجم باستخدام Python، راجع تحميل كائن ثنائي كبير الحجم باستخدام Python.

تغيير طبقة الوصول لكتلة كائن ثنائي كبير الحجم موجودة

يمكنك تغيير طبقة الوصول لكتلة كائن ثنائي كبير الحجم موجودة باستخدام الدالة التالية:

يوضح مثال التعليمات البرمجية التالي كيفية تغيير طبقة الوصول إلى كائن ثنائي كبير الحجم موجود إلى Cool:

def change_blob_access_tier(self, blob_client: BlobClient):
    # Change the blob access tier to cool
    blob_client.set_standard_blob_tier(StandardBlobTier.COOL)

إذا كنت تقوم بإعادة ترطيب كائن ثنائي كبير الحجم مؤرشف، يمكنك اختياريا تمرير وسيطة rehydrate_priority الكلمة الأساسية ك HIGH أو STANDARD.

نسخ كائن ثنائي كبير الحجم إلى طبقة وصول مختلفة

يمكنك تغيير طبقة الوصول لكتلة كائن ثنائي كبير الحجم موجودة عن طريق تحديد طبقة وصول كجزء من عملية النسخ. لتغيير طبقة الوصول أثناء عملية النسخ، مرر وسيطة standard_blob_tier الكلمة الأساسية إلى start_copy_from_url. إذا كنت تقوم بإعادة ترطيب كائن ثنائي كبير الحجم من طبقة الأرشيف باستخدام عملية نسخ، يمكنك اختياريا تمرير وسيطة rehydrate_priority الكلمة الأساسية ك HIGH أو STANDARD.

يوضح مثال التعليمات البرمجية التالي كيفية إعادة ترطيب كائن ثنائي كبير الحجم مؤرشف إلى Hot المستوى باستخدام عملية نسخ:

def rehydrate_blob_using_copy(self, source_archive_blob: BlobClient, destination_rehydrated_blob: BlobClient):
    # Note: the destination blob must have a different name than the source blob

    # Start the copy operation - specify the rehydrate priority and blob access tier
    copy_operation = dict()
    copy_operation = destination_rehydrated_blob.start_copy_from_url(
        source_url=source_archive_blob.url,
        standard_blob_tier=StandardBlobTier.HOT,
        rehydrate_priority=RehydratePriority.STANDARD,
        requires_sync=False)

لمعرفة المزيد حول نسخ كائن ثنائي كبير الحجم باستخدام Python، راجع نسخ كائن ثنائي كبير الحجم باستخدام Python.

تغيير طبقة الوصول إلى كائن ثنائي كبير الحجم بشكل غير متزامن

تدعم مكتبة عميل Azure Blob Storage ل Python تغيير طبقة الوصول إلى كائن ثنائي كبير الحجم بشكل غير متزامن. لمعرفة المزيد حول متطلبات إعداد المشروع، راجع البرمجة غير المتزامنة.

اتبع هذه الخطوات لتغيير طبقة الوصول إلى كائن ثنائي كبير الحجم باستخدام واجهات برمجة التطبيقات غير المتزامنة:

  1. إضافة عبارات الاستيراد التالية:

    import asyncio
    
    from azure.storage.blob import (
    StandardBlobTier
    )
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import (
    BlobServiceClient,
    BlobClient
    )
    
  2. أضف التعليمات البرمجية لتشغيل البرنامج باستخدام asyncio.run. تقوم هذه الدالة بتشغيل coroutine الذي تم تمريره، main() في مثالنا، وتدير asyncio حلقة الحدث. يتم الإعلان عن Coroutines باستخدام بناء الجملة غير المتزامن/انتظار. في هذا المثال، main() يقوم coroutine أولا بإنشاء المستوى BlobServiceClient الأعلى باستخدام async with، ثم يستدعي الأسلوب الذي يغير طبقة الوصول للكائن الثنائي كبير الحجم. لاحظ أن عميل المستوى الأعلى فقط يحتاج إلى استخدام async with، حيث يشارك العملاء الآخرون الذين تم إنشاؤهم منه نفس تجمع الاتصال.

    async def main():
        sample = BlobAccessTierSamples()
    
        # TODO: Replace <storage-account-name> with an actual storage account name
        account_url = "https://<storage-account-name>.blob.core.windows.net"
        credential = DefaultAzureCredential()
    
        async with BlobServiceClient(account_url, credential=credential) as blob_service_client:
            # Change the blob access tier to cool
            blob_client = blob_service_client.get_blob_client(container="sample-container", blob="sample-blob.txt")
            await sample.change_blob_access_tier(blob_client=blob_client)
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. إضافة تعليمة برمجية لتغيير طبقة الوصول إلى الكائن الثنائي كبير الحجم. التعليمات البرمجية هي نفس المثال المتزامن، باستثناء أن الأسلوب يتم تعريفه باستخدام async الكلمة الأساسية ويتم await استخدام الكلمة الأساسية عند استدعاء set_standard_blob_tier الأسلوب .

    async def change_blob_access_tier(self, blob_client: BlobClient):
        # Change the blob access tier to cool
        await blob_client.set_standard_blob_tier(StandardBlobTier.COOL)
    

مع هذا الإعداد الأساسي في مكانه، يمكنك تنفيذ أمثلة أخرى في هذه المقالة ك coroutines باستخدام بناء الجملة غير المتزامن/انتظار.

الموارد

لمعرفة المزيد حول تعيين مستويات الوصول باستخدام مكتبة عميل Azure Blob Storage ل Python، راجع الموارد التالية.

عمليات واجهة برمجة تطبيقات REST

يحتوي Azure SDK ل Python على مكتبات تستند إلى واجهة برمجة تطبيقات AZURE REST، مما يسمح لك بالتفاعل مع عمليات REST API من خلال نماذج Python المألوفة. تستخدم أساليب مكتبة العميل لتعيين مستويات الوصول عملية REST API التالية:

موارد مكتبة العميل

نماذج التعليمات البرمجية

(راجع أيضًا )