Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Блобы в 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.