Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Блобы в Azure Storage организованы в контейнеры. Прежде чем вы сможете загрузить блоб, сначала необходимо создать контейнер. В этой статье показано, как создать контейнеры с помощью клиентской библиотеки Azure Storage для Python.
Сведения о создании контейнеров блоб-объектов с использованием асинхронных API см. в статье "Создание контейнера асинхронно".
Предварительные условия
- Подписка Azure — создайте бесплатную учетную запись.
- Учетная запись хранения Azure — создайте такую учетную запись.
- Python 3.8+
Настройка среды
Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой Хранилище 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:
Добавьте в файл следующие операторы импорта:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient from azure.core.exceptions import ResourceExistsError
Добавьте код для запуска программы с помощью
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())
Добавьте код для создания контейнера. Код совпадает с синхронным примером, за исключением того, что метод объявляется с
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 см. в следующих ресурсах.
Примеры кода
- Просмотр примеров синхронного или асинхронного кода из этой статьи (GitHub)
Операции REST API
Пакет SDK Azure для Python содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API с помощью знакомых парадигм Python. Методы клиентской библиотеки для создания контейнера используют следующую операцию REST API:
- Создание контейнера (REST API)
Ресурсы клиентской библиотеки
Связанный контент
- Эта статья является частью руководства разработчика хранилища BLOB-объектов для Python. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения Python.