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


Создание контейнера BLOB-объектов с помощью Python

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

Сведения о создании контейнеров блоб-объектов с использованием асинхронных API см. в статье "Создание контейнера асинхронно".

Предварительные условия

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

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

Чтобы работать с примерами кода в этой статье, выполните следующие действия, чтобы настроить проект.

Установка пакетов

Установите следующие пакеты с помощью pip install:

pip install azure-storage-blob azure-identity

Добавить инструкции импорта

Добавьте следующие утверждения import :

from azure.core.exceptions import ResourceExistsError
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

Авторизация

Механизм авторизации должен иметь необходимые разрешения для создания контейнера. Для авторизации с помощью Microsoft Entra ID (рекомендовано), необходима встроенная роль Azure RBAC Сотрудник по работе с данными хранилища BLOB или более высокая. Дополнительные сведения см. в руководстве по авторизации для создания контейнера (REST API).

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

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

О именовании контейнеров

Имя контейнера должно быть допустимым DNS-именем, поскольку оно является частью уникального URI, используемого для адресации контейнера или его больших двоичных объектов. При присвоении имени контейнеру следуйте нижеприведенным правилам:

  • Имена контейнеров могут содержать от 3 до 63 символов.
  • Имена контейнеров должны начинаться с буквы или цифры и могут содержать только строчные буквы, цифры и тире (-).
  • Последовательные символы дефиса не допускаются в именах контейнеров.

URI для ресурса контейнера форматируется следующим образом:

https://my-account-name.blob.core.windows.net/my-container-name

Создание контейнера

Чтобы создать контейнер, вызовите следующий метод из класса BlobServiceClient :

Вы также можете создать контейнер с помощью следующего метода из класса ContainerClient :

Контейнеры создаются непосредственно под учетной записью хранилища. Нельзя вложить один контейнер в другой. Если контейнер с таким именем уже существует, выдается исключение.

В следующем примере создается контейнер из BlobServiceClient объекта:

def create_blob_container(self, blob_service_client: BlobServiceClient, container_name):
    try:
        container_client = blob_service_client.create_container(name=container_name)
    except ResourceExistsError:
        print('A container with this name already exists')

Создание корневого контейнера

Корневой контейнер является контейнером по умолчанию для вашей учетной записи хранения. У каждой учетной записи хранения может быть один корневой контейнер, который должен называться $root. Корневой контейнер должен быть явным образом создан или удален.

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

https://accountname.blob.core.windows.net/default.html

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

def create_blob_root_container(self, blob_service_client: BlobServiceClient):
    container_client = blob_service_client.get_container_client(container="$root")

    # Create the root container if it doesn't already exist
    if not container_client.exists():
        container_client.create_container()

Асинхронное создание контейнера

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

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

  1. Добавьте в файл следующие операторы импорта:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    from azure.core.exceptions import ResourceExistsError
    
  2. Добавьте код для запуска программы с помощью asyncio.run. Эта функция запускает переданную корутину main() и управляет циклом событий asyncio в нашем примере. Корутины объявляются с синтаксисом async/await. В этом примере main() корутина сначала создает верхний уровень BlobServiceClient с использованием async with, а затем вызывает метод, создающий контейнер. Обратите внимание, что только клиент верхнего уровня должен использовать async with, так как другие клиенты, созданные из него, используют тот же пул подключений.

    async def main():
        sample = ContainerSamples()
    
        # TODO: Replace <storage-account-name> with your 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:
            await sample.create_blob_container(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Добавьте код для создания контейнера. Код совпадает с синхронным примером, за исключением того, что метод объявляется с async ключевым словом, а await ключевое слово используется при вызове create_container метода.

    async def create_blob_container(self, blob_service_client: BlobServiceClient, container_name):
        try:
            container_client = await blob_service_client.create_container(name=container_name)
        except ResourceExistsError:
            print('A container with this name already exists')
    

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

Ресурсы

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

Примеры кода

Операции REST API

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

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

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