Краткое руководство. Хранилище BLOB-объектов Azure клиентская библиотека для Python
Статья
Примечание
В разделе "Сборка с нуля " пошаговые инструкции по созданию проекта, установке пакетов, написанию кода и запуску базового консольного приложения. Этот подход рекомендуется, если вы хотите понять все сведения, связанные с созданием приложения, которое подключается к Хранилище BLOB-объектов Azure. Если вы предпочитаете автоматизировать задачи развертывания и начинать работу с завершенным проектом, выберите "Начать с шаблона".
Примечание
Параметр "Начать с шаблона " использует интерфейс командной строки разработчика Azure для автоматизации задач развертывания и начинает работу с завершенным проектом. Этот подход рекомендуется, если вы хотите как можно быстрее изучить код без выполнения задач установки. Если вы предпочитаете пошаговые инструкции по созданию приложения, выберите "Сборка с нуля".
Начало работы с клиентской библиотекой Хранилище BLOB-объектов Azure для Python для управления большими двоичными объектами и контейнерами.
В этой статье описано, как установить пакет и попробовать пример кода для основных задач.
В этой статье вы используете интерфейс командной строки разработчика Azure для развертывания ресурсов Azure и запуска полного консольного приложения с несколькими командами.
В этом разделе описывается подготовка проекта для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для Python.
Создание проекта
Создайте приложение Python с именем BLOB-quickstart.
В окне консоли (например, PowerShell или Bash) создайте новый каталог для проекта:
Консоль
mkdir blob-quickstart
Перейдите в только что созданный каталог blob-quickstart :
Консоль
cd blob-quickstart
Установка пакетов
В каталоге проекта установите пакеты для клиентских библиотек Хранилище BLOB-объектов Azure и удостоверений Azure с помощью pip install команды.
Пакет azure-identity необходим для бессерверных подключений к службам Azure.
Консоль
pip install azure-storage-blob azure-identity
Настройка платформы приложения
В каталоге проекта выполните действия, чтобы создать базовую структуру приложения:
Откройте новый текстовый файл в редакторе кода.
Добавьте import инструкции, создайте структуру для программы и включите базовую обработку исключений, как показано ниже.
Сохраните новый файл как blob_quickstart.py в каталоге blob-quickstart .
Python
import os, uuid
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient
try:
print("Azure Blob Storage Python quickstart sample")
# Quickstart code goes hereexcept Exception as ex:
print('Exception:')
print(ex)
Имя среды: это значение используется в качестве префикса для всех ресурсов Azure, созданных Azure Developer CLI. Имя должно быть уникальным для всех подписок Azure и должно составлять от 3 до 24 символов. Имя может содержать только цифры и строчные буквы.
Войдите в Azure:
Консоль
azd auth login
Подготовка и развертывание ресурсов в Azure:
Консоль
azd up
Вам будет предложено получить следующие сведения:
Подписка: подписка Azure, в которую развертываются ваши ресурсы.
Расположение: регион Azure, в котором развернуты ресурсы.
Завершение развертывания может занять несколько минут. Выходные данные команды azd up включают имя только что созданной учетной записи хранения, которую потребуется позже для запуска кода.
Запуск примера кода
На этом этапе ресурсы развертываются в Azure, и код почти готов к выполнению. Выполните следующие действия, чтобы установить пакеты, обновить имя учетной записи хранения в коде и запустить пример консольного приложения:
Установите пакеты: В локальном каталоге установите пакеты для клиента хранилища BLOB-объектов Azure и клиента Azure Identity, используя следующую команду:pip install azure-storage-blob azure-identity
Обновите имя учетной записи хранения: в локальном каталоге измените файл с именем blob_quickstart.py. Найдите заполнитель <storage-account-name> и замените его фактическим именем учетной записи хранения, созданной командой azd up. Сохраните изменения.
Запустите проект: выполните следующую команду, чтобы запустить приложение: python blob_quickstart.py
Просмотрите выходные данные: это приложение создает тестовый файл в локальной папке данных и отправляет его в контейнер в учетной записи хранения. Затем выводится список объектов-blob в контейнере, и файл загружается с новым именем, чтобы вы могли сравнить старый и новый файлы.
Дополнительные сведения о работе примера кода см. Примеры кода.
После завершения тестирования кода см. раздел "Очистка ресурсов", чтобы удалить ресурсы, созданные командой azd up.
Объектная модель
Хранилище BLOB-объектов Azure оптимизировано для хранения больших объемов неструктурированных данных. Неструктурированные данные — это данные, которые не соответствуют определенной модели данных или определению, например текстовых или двоичных данных. Blob-хранилище имеет три типа ресурсов:
учетная запись хранения;
контейнер в учетной записи хранения;
блоб в контейнере
На следующей схеме показана связь между этими ресурсами:
Используйте следующие классы Python для взаимодействия с этими ресурсами.
BlobServiceClient: класс BlobServiceClient позволяет управлять ресурсами службы хранилища Azure и контейнерами BLOB-объектов.
ContainerClient: класс ContainerClient позволяет управлять контейнерами службы хранилища Azure и их блобами.
BlobClient: класс BlobClient позволяет управлять BLOB-объектами службы хранилища Azure.
Примеры кода
В этих примерах фрагментов кода показано, как выполнять следующие задачи с помощью клиентской библиотеки Хранилища BLOB-объектов Azure для Python:
Шаблон ИНТЕРФЕЙСА командной строки разработчика Azure содержит файл с примером кода. В следующих примерах приведены подробные сведения для каждой части примера кода. Шаблон реализует рекомендуемый метод проверки подлинности без пароля, как описано в разделе "Проверка подлинности в Azure ". Способ со строкой подключения отображается как альтернатива, но не используется в шаблоне и не рекомендуется для продакшн-кода.
Проверка подлинности в Azure и авторизация доступа к данным BLOB
Запросы приложений к Хранилищу BLOB-объектов Azure должны быть авторизованы. Использование класса DefaultAzureCredential, предоставленного клиентской библиотекой удостоверений Azure, является рекомендуемым подходом для реализации беспарольных подключений к службам Azure в вашем коде, включая Blob-хранилище.
Вы также можете авторизовать запросы к Хранилищу BLOB-объектов Azure с помощью ключа доступа к учетной записи. Однако этот подход следует использовать с осторожностью. Разработчики должны тщательно следить за тем, чтобы не раскрыть ключи доступа в незащищенном расположении. Любой пользователь, имеющий ключ доступа, может авторизовать запросы к учетной записи хранения и эффективно иметь доступ ко всем данным.
DefaultAzureCredential предлагает улучшенные преимущества управления и безопасности по сравнению с ключом учетной записи, чтобы разрешить проверку подлинности без пароля. Оба варианта показаны в следующем примере.
DefaultAzureCredential поддерживает несколько способов проверки подлинности и определяет, какой из них следует использовать в среде выполнения. Такой подход позволяет приложению использовать различные способы проверки подлинности в разных средах (локальной и рабочей) без реализации кода для конкретной среды.
Например, приложение может пройти проверку подлинности с помощью учетных данных входа Azure CLI при локальной разработке. После развертывания приложения в Azure приложение может использовать управляемое удостоверение. Для такого перехода не требуется изменять код.
Назначение ролей учетной записи пользователя Microsoft Entra
Если вы выполняете разработку локально, убедитесь, что учетная запись пользователя, через которую осуществляется доступ к данным BLOB-объектов, имеет правильные разрешения. Вам потребуется роль Storage Blob Data Contributor для чтения и записи данных BLOB-объектов. Чтобы назначить себе эту роль, вам потребуется, чтобы вам назначили роль Администратора доступа пользователей или другую роль, в которую включено действие Microsoft.Authorization/roleAssignments/write. Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Дополнительные сведения о доступных областях назначения ролей можно узнать на странице обзора области.
В этом сценарии вы назначите разрешения для своей учетной записи пользователя, ограниченные учетной записью хранения, чтобы обеспечить соблюдение принципа минимальных привилегий. В рамках этой практики пользователям предоставляются только минимальные необходимые разрешения, что позволяет создавать более защищенные рабочие среды.
В следующем примере роль участника данных BLOB-объектов хранилища назначается учетной записи пользователя, которая предоставляет доступ как для чтения, так и записи к данным BLOB-объектов в вашей учетной записи хранения.
Важно!
В большинстве случаев для распространения назначения ролей в Azure потребуется минута или две, но в редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
На портале Azure найдите свою учетную запись хранения, воспользовавшись основной панелью поиска или областью навигации слева.
На странице обзора учетной записи хранения выберите Контроль доступа (IAM) в меню слева.
На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.
Выберите + Добавить в верхнем меню, а затем выберите Добавить назначение роли в появившемся раскрывающемся меню.
Используйте поле поиска, чтобы отфильтровать результаты для отображения нужной роли. В этом примере найдите Storage Blob Data Contributor и выберите соответствующий результат, а затем нажмите Далее.
В разделе Назначение доступа для выберите Пользователь, группа или субъект-служба и + Выбрать членов.
В диалоговом окне найдите имя пользователя Microsoft Entra (обычно ваш user@domain адрес электронной почты), а затем выберите в нижней части диалогового окна.
Нажмите кнопку Проверить и назначить, чтобы перейти на последнюю страницу, а затем еще раз Проверить и назначить, чтобы завершить процесс.
Чтобы назначить роль на уровне ресурсов с помощью Azure CLI, сначала необходимо получить идентификатор ресурса с помощью команды az storage account show. Вы можете отфильтровать выходные свойства с помощью параметра --query.
Azure CLI
az storage account show --resource-group'<your-resource-group-name>'--name'<your-storage-account-name>'--query id
Скопируйте выходной Id из предыдущей команды. Затем можно назначить роли с помощью команды az role в Azure CLI.
Azure CLI
az role assignment create --assignee"<user@domain>" \
--role"Storage Blob Data Contributor" \
--scope"<your-resource-id>"
Чтобы назначить роль на уровне ресурсов с помощью Azure PowerShell, сначала необходимо получить идентификатор ресурса с помощью Get-AzResource команды.
Войдите и подключите код приложения к Azure с помощью DefaultAzureCredential
Чтобы авторизовать доступ к данным в учетной записи хранения, выполните следующие действия:
Убедитесь, что вы прошли проверку подлинности с той же учетной записью Microsoft Entra, которую вы использовали для назначения роли в учетной записи хранилища. Вы можете пройти проверку подлинности с помощью Azure CLI, Visual Studio Code или Azure PowerShell.
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Добавьте этот код в try блок. При запуске кода на локальной рабочей станции DefaultAzureCredential используются учетные данные разработчика, вошедшего в систему, для проверки подлинности в Azure. Примерами этих средств являются Azure CLI или Visual Studio Code.
Обязательно обновите имя учетной записи хранения в URI объекта BlobServiceClient . Имя учетной записи хранения можно найти на странице обзора портала Azure.
Примечание
При развертывании в Azure этот же код можно использовать для авторизации запросов к службе хранилища Azure из приложения, работающего в Azure. Однако вам необходимо включить управляемое удостоверение в приложении в Azure. Затем настройте учетную запись хранения, чтобы разрешить подключение к управляемому удостоверению. Подробные инструкции по настройке этого подключения между службами Azure см. в учебнике по проверке подлинности в приложениях, размещенных в Azure.
Строка подключения содержит ключ доступа к учетной записи хранения и использует ее для авторизации запросов. Всегда будьте осторожны и никогда не предоставляйте ключи в небезопасном расположении.
Примечание
Чтобы авторизовать доступ к данным с помощью ключа доступа к учетной записи хранения, вам потребуются разрешения для следующих действий Azure RBAC: Microsoft.Storage/storageAccounts/listkeys/action. Наименее привилегированная встроенная роль с разрешениями для этого действия — читатель и доступ к данным, но любая роль, которая включает это действие, будет работать.
На панели меню учетной записи хранения в разделе Безопасность и сети выберите Ключи доступа. На этой странице вы увидите ключи доступа к учетной записи и полную строку подключения для каждого ключа.
В области Ключи доступа выберите команду Показать ключи.
В разделе key1 найдите значение Строка подключения. Нажмите значок Копировать в буфер обмена, чтобы скопировать строку подключения. В следующем разделе вы добавите значение строки подключения в переменную среды.
После копирования строки подключения запишите ее в переменной среды на локальном компьютере, где выполняется приложение. Чтобы задать переменную среды, откройте окно консоли и следуйте инструкциям для используемой операционной системы. Замените <yourconnectionstring> фактической строкой подключения.
Приведенный ниже код извлекает строку подключения для учетной записи хранилища из переменной среды, созданной ранее, и использует строку подключения для создания клиентского объекта службы.
Добавьте этот код в блок try.
Python
# Retrieve the connection string for use with the application. The storage# connection string is stored in an environment variable on the machine# running the application called AZURE_STORAGE_CONNECTION_STRING. If the environment variable is# created after the application is launched in a console or with Visual Studio,# the shell or application needs to be closed and reloaded to take the# environment variable into account.
connect_str = os.getenv('AZURE_STORAGE_CONNECTION_STRING')
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
Важно!
Ключ доступа к учетной записи следует использовать с осторожностью. Если ключ доступа к учетной записи потерян или случайно помещен в небезопасное расположение, ваша служба может стать уязвимой. Любой пользователь, имеющий ключ доступа, может авторизовать запросы к учетной записи хранения и эффективно иметь доступ ко всем данным.
DefaultAzureCredential предоставляет расширенные функции безопасности и преимущества и рекомендуется использовать для управления авторизацией в службах Azure.
Создание контейнера
Создайте контейнер в учетной записи хранения, вызвав метод create_container объекта blob_service_client . В этом примере код добавляет значение GUID к имени контейнера, чтобы убедиться, что он уникальный.
Добавьте следующий код в конец блока try.
Python
# Create a unique name for the container
container_name = str(uuid.uuid4())
# Create the container
container_client = blob_service_client.create_container(container_name)
Имена контейнеров должны состоять из знаков нижнего регистра. Дополнительные сведения об именовании контейнеров и больших двоичных объектов см. в статье Naming and Referencing Containers, Blobs, and Metadata (Именование контейнеров, больших двоичных объектов и метаданных и ссылка на них).
Загрузка блобов в контейнер
Загрузите объект в контейнер с помощью upload_blob. Пример кода создает текстовый файл в локальном каталоге данных для отправки в контейнер.
Добавьте следующий код в конец блока try.
Python
# Create a local directory to hold blob data
local_path = "./data"
os.mkdir(local_path)
# Create a file in the local data directory to upload and download
local_file_name = str(uuid.uuid4()) + ".txt"
upload_file_path = os.path.join(local_path, local_file_name)
# Write text to the file
file = open(file=upload_file_path, mode='w')
file.write("Hello, World!")
file.close()
# Create a blob client using the local file name as the name for the blob
blob_client = blob_service_client.get_blob_client(container=container_name, blob=local_file_name)
print("\nUploading to Azure Storage as blob:\n\t" + local_file_name)
# Upload the created filewith open(file=upload_file_path, mode="rb") as data:
blob_client.upload_blob(data)
Дополнительные сведения о загрузке блобов и для изучения дополнительных примеров кода ознакомьтесь с «Загрузкой блоба с помощью Python».
Перечислить объекты типа BLOB в контейнере
Перечислите блобы в контейнере, вызвав метод list_blobs. В этом случае в контейнер был добавлен только один блоб, поэтому операция перечисления возвращает только этот объект.
Добавьте следующий код в конец блока try.
Python
print("\nListing blobs...")
# List the blobs in the container
blob_list = container_client.list_blobs()
for blob in blob_list:
print("\t" + blob.name)
Скачайте созданный ранее объект, вызвав метод download_blob. Пример кода добавляет суффикс "DOWNLOAD" к имени файла, чтобы в локальной файловой системе можно было просмотреть оба файла.
Добавьте следующий код в конец блока try.
Python
# Download the blob to a local file# Add 'DOWNLOAD' before the .txt extension so you can see both files in the data directory
download_file_path = os.path.join(local_path, str.replace(local_file_name ,'.txt', 'DOWNLOAD.txt'))
container_client = blob_service_client.get_container_client(container= container_name)
print("\nDownloading blob to \n\t" + download_file_path)
with open(file=download_file_path, mode="wb") as download_file:
download_file.write(container_client.download_blob(blob.name).readall())
Следующий код очищает созданные приложением ресурсы, полностью удаляя контейнер с помощью метода delete_container. Кроме того, при необходимости можно удалить локальные файлы.
Приложение приостанавливается для получения ввода от пользователя, вызывая input(), перед удалением блоба, контейнера и локальных файлов. Убедитесь, что ресурсы были созданы правильно перед их удалением.
Добавьте следующий код в конец блока try.
Python
# Clean up
print("\nPress the Enter key to begin clean up")
input()
print("Deleting blob container...")
container_client.delete_container()
print("Deleting the local source and downloaded files...")
os.remove(upload_file_path)
os.remove(download_file_path)
os.rmdir(local_path)
print("Done")
В этом приложении тестовый файл создается в локальной папке, а затем передается в Хранилище BLOB-объектов Azure. Затем пример перечисляет BLOB-объекты в контейнере и скачивает файл, сохраняя его под новым именем. Теперь вы можете сравнить старый и новый файлы.
Перейдите в каталог, содержащий файл blob_quickstart.py , а затем выполните следующую python команду, чтобы запустить приложение:
Консоль
python blob_quickstart.py
Выходные данные приложения аналогичны следующему примеру (значения UUID, пропущенные для удобочитаемости):
Выходные данные
Azure Blob Storage Python quickstart sample
Uploading to Azure Storage as blob:
quickstartUUID.txt
Listing blobs...
quickstartUUID.txt
Downloading blob to
./data/quickstartUUIDDOWNLOAD.txt
Press the Enter key to begin clean up
Deleting blob container...
Deleting the local source and downloaded files...
Done
Прежде чем начать процесс удаления, проверьте наличие двух файлов в папке data. Вы можете сравнить их и наблюдать, что они идентичны.
Очистка ресурсов
После проверки файлов и завершения тестирования нажмите клавишу Enter, чтобы удалить тестовые файлы вместе с контейнером, который вы создали в учетной записи хранилища. Вы также можете использовать Azure CLI для удаления ресурсов.
Когда вы закончите с кратким руководством, вы можете очистить созданные ресурсы с помощью следующей команды:
Консоль
azd down
Вам будет предложено подтвердить удаление ресурсов. Введите y для подтверждения.
Создавайте комплексные решения в Microsoft Azure для создания Функции Azure, реализации веб-приложений и управления ими, разработке решений, использующих службу хранилища Azure, и т. д.
Начните разработку приложения Python, которое работает с Хранилище BLOB-объектов Azure. В этой статье приводятся сведения о настройке проекта и авторизации доступа к конечной точке Хранилища BLOB-объектов Azure.
Узнайте, как перечислить большие двоичные объекты в учетной записи хранения с помощью клиентской библиотеки служба хранилища Azure для Python. В примерах кода показано, как получить неструктурированный список больших двоичных объектов или как создать структурированный список больших двоичных объектов, как если бы они были упорядочены по каталогам или папкам.