Поделиться через


Установка или изменение уровня доступа блочного BLOB-объекта с помощью Python

В этой статье показано, как задать или изменить уровень доступа для блочного BLOB-объекта с помощью клиентской библиотеки служба хранилища Azure для Python.

Сведения об изменении уровня доступа большого двоичного объекта с помощью асинхронных API см. в статье Об асинхронном изменении уровня доступа большого двоичного объекта.

Необходимые компоненты

Настройка среды

Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для Python. Дополнительные сведения см. в статье "Начало работы с Хранилище BLOB-объектов Azure и 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 (рекомендуется), требуется встроенный участник данных хранилища BLOB-объектов хранилища ролей или более поздней версии. Дополнительные сведения см. в руководстве по авторизации для задания уровня BLOB-объектов.

Создание клиентского объекта

Чтобы подключить приложение к хранилищу BLOB-объектов, создайте экземпляр 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 объекта. Дополнительные сведения о создании клиентских объектов и управлении ими см. в статье "Создание клиентских объектов и управление ими", взаимодействующих с ресурсами данных.

Сведения о уровнях доступа к блочных BLOB-объектов

Чтобы управлять затратами на хранение, можно упорядочить данные на основе частоты доступа к ней и длительности хранения. Хранилище Azure предоставляет различные уровни доступа, что позволяет наиболее эффективно хранить данные BLOB-объектов в зависимости от того, как они используются.

Уровни доступа к данным BLOB-объектов

Уровни доступа службы хранилища Azure:

  • Горячий уровень — сетевой уровень, оптимизированный для хранения часто используемых или изменяемых данных. Горячий уровень имеет самые высокие затраты на хранение, но самые низкие затраты на доступ.
  • Холодный уровень — сетевой уровень, оптимизированный для хранения редко используемых или изменяемых данных. Данные на холодном уровне должны храниться не менее 30 дней. Уровень "холодный" имеет более низкие затраты на хранение и более высокие затраты на доступ по сравнению с горячим уровнем.
  • Холодный уровень — сетевой уровень, оптимизированный для хранения данных, которые редко обращаются или изменяются. Данные на холодном уровне должны храниться не менее 90 дней. На холодном уровне хранилища данные хранить дешевле, зато доступ к ним стоит дороже по сравнению с горячим уровнем.
  • Архивный уровень — автономный уровень, оптимизированный для хранения данных, которые используются редко и имеют нестрогие требования к задержке (порядка нескольких часов). Данные на уровне архива должны храниться не менее 180 дней.

Дополнительные сведения о уровнях доступа см. в разделе "Уровни доступа" для данных BLOB-объектов.

Хотя BLOB-объект находится на архивном уровне хранилища, он считается автономным элементом и не может быть считан или изменен. Чтобы считывать или изменять данные в архивном BLOB-объекте, необходимо сначала восстановить большой двоичный объект на онлайн-уровне. Дополнительные сведения о повторном создании большого двоичного объекта с уровня "Архив" на онлайн-уровне см. в статье о повторном извлечении BLOB-объектов из архивного уровня.

Ограничения

Установка уровня доступа разрешена только для блочных BLOB-объектов. Дополнительные сведения об ограничениях на настройку уровня доступа блочного BLOB-объекта см. в разделе Set Blob Tier (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".

Изменение уровня доступа для существующего блочного BLOB-объекта

Уровень доступа существующего блочного BLOB-объекта можно изменить с помощью следующей функции:

В следующем примере кода показано, как изменить уровень доступа для существующего большого двоичного объекта 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.

Копирование большого двоичного объекта на другой уровень доступа

Уровень доступа существующего блочного BLOB-объекта можно изменить, указав уровень доступа в рамках операции копирования. Чтобы изменить уровень доступа во время операции копирования, передайте 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".

Изменение уровня доступа большого двоичного объекта асинхронно

Клиентская библиотека Хранилище BLOB-объектов Azure для Python поддерживает асинхронное изменение уровня доступа большого двоичного объекта. Дополнительные сведения о требованиях к настройке проекта см. в статье асинхронное программирование.

Выполните следующие действия, чтобы изменить уровень доступа большого двоичного объекта с помощью асинхронных API:

  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. Эта функция запускает переданную корутину в main() нашем примере и управляет циклом asyncio событий. Корутины объявляются с синтаксисом async/await. В этом примере main() корутин сначала создает верхний уровень 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)
    

С помощью этой базовой настройки вы можете реализовать другие примеры в этой статье в качестве корутин с помощью синтаксиса async/await.

Ресурсы

Дополнительные сведения о настройке уровней доступа с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для Python см. в следующих ресурсах.

Операции REST API

Пакет SDK Azure для Python содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API с помощью знакомых парадигм Python. Методы клиентской библиотеки для настройки уровней доступа используют следующую операцию REST API:

Ресурсы клиентской библиотеки

Примеры кода

См. также