Пример. Создание служба хранилища Azure с помощью библиотек Azure для Python
В этой статье вы узнаете, как использовать библиотеки управления Azure в скрипте Python для создания группы ресурсов, содержащей учетную запись служба хранилища Azure и контейнер хранилища BLOB-объектов.
После создания ресурсов см. пример: использование служба хранилища Azure для использования клиентских библиотек Azure в коде приложения Python для отправки файла в контейнер хранилища BLOB-объектов.
Все описанные в этой статье команды работают одинаково как в Bash для Linux или macOS, так и в командных оболочках для Windows, если не указано иное.
Эквивалентные команды Azure CLI перечислены далее в этой статье. Если вы предпочитаете использовать портал Azure, см. статью "Создание учетной записи хранения Azure" и создание контейнера BLOB-объектов.
1. Настройка локальной среды разработки
Если вы еще не сделали этого, настройте среду, в которой можно запустить код. Ниже приведено несколько вариантов:
Настройте виртуальную среду Python с помощью
venv
или выбранного средства. Вы можете создать виртуальную среду локально или в Azure Cloud Shell и запустить код там. Обязательно активируйте виртуальную среду, чтобы начать использовать ее.Используйте среду conda.
Используйте контейнер разработки в Visual Studio Code или GitHub Codespaces.
2. Установка необходимых пакетов библиотек Azure
Создайте файл requirements.txt, в котором перечислены библиотеки управления, используемые в этом примере.
azure-mgmt-resource azure-mgmt-storage azure-identity
В окне терминала с активированной виртуальной средой установите необходимые компоненты.
pip install -r requirements.txt
3. Написание кода для создания ресурсов хранилища
Создайте файл Python с именем provision_blob.py со указанным ниже содержимым. Подробные объяснения даны в комментариях. Скрипт считывает идентификатор подписки из переменной AZURE_SUBSCRIPTION_ID
среды. Вы устанавливаете эту переменную на следующем шаге. Имя группы ресурсов, расположение, имя учетной записи хранения и имя контейнера определяются как константы в коде.
import os, random
# Import the needed management objects from the libraries. The azure.common library
# is installed automatically with the other libraries.
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
# Acquire a credential object.
credential = DefaultAzureCredential()
# Retrieve subscription ID from environment variable.
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
# Obtain the management object for resources.
resource_client = ResourceManagementClient(credential, subscription_id)
# Constants we need in multiple places: the resource group name and the region
# in which we provision resources. You can change these values however you want.
RESOURCE_GROUP_NAME = "PythonAzureExample-Storage-rg"
LOCATION = "centralus"
# Step 1: Provision the resource group.
rg_result = resource_client.resource_groups.create_or_update(RESOURCE_GROUP_NAME,
{ "location": LOCATION })
print(f"Provisioned resource group {rg_result.name}")
# For details on the previous code, see Example: Provision a resource group
# at https://docs.microsoft.com/azure/developer/python/azure-sdk-example-resource-group
# Step 2: Provision the storage account, starting with a management object.
storage_client = StorageManagementClient(credential, subscription_id)
STORAGE_ACCOUNT_NAME = f"pythonazurestorage{random.randint(1,100000):05}"
# You can replace the storage account here with any unique name. A random number is used
# by default, but note that the name changes every time you run this script.
# The name must be 3-24 lower case letters and numbers only.
# Check if the account name is available. Storage account names must be unique across
# Azure because they're used in URLs.
availability_result = storage_client.storage_accounts.check_name_availability(
{ "name": STORAGE_ACCOUNT_NAME }
)
if not availability_result.name_available:
print(f"Storage name {STORAGE_ACCOUNT_NAME} is already in use. Try another name.")
exit()
# The name is available, so provision the account
poller = storage_client.storage_accounts.begin_create(RESOURCE_GROUP_NAME, STORAGE_ACCOUNT_NAME,
{
"location" : LOCATION,
"kind": "StorageV2",
"sku": {"name": "Standard_LRS"}
}
)
# Long-running operations return a poller object; calling poller.result()
# waits for completion.
account_result = poller.result()
print(f"Provisioned storage account {account_result.name}")
# Step 3: Retrieve the account's primary access key and generate a connection string.
keys = storage_client.storage_accounts.list_keys(RESOURCE_GROUP_NAME, STORAGE_ACCOUNT_NAME)
print(f"Primary key for storage account: {keys.keys[0].value}")
conn_string = f"DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName={STORAGE_ACCOUNT_NAME};AccountKey={keys.keys[0].value}"
print(f"Connection string: {conn_string}")
# Step 4: Provision the blob container in the account (this call is synchronous)
CONTAINER_NAME = "blob-container-01"
container = storage_client.blob_containers.create(RESOURCE_GROUP_NAME, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, {})
# The fourth argument is a required BlobContainer object, but because we don't need any
# special values there, so we just pass empty JSON.
print(f"Provisioned blob container {container.name}")
Проверка подлинности в коде
Далее в этой статье вы войдите в Azure с помощью Azure CLI, чтобы запустить пример кода. Если у вашей учетной записи есть разрешения на создание групп ресурсов и ресурсов хранилища в подписке Azure, код будет успешно выполняться.
Чтобы использовать такой код в рабочем скрипте, можно задать переменные среды для использования метода на основе субъекта-службы для проверки подлинности. Дополнительные сведения см. в статье "Проверка подлинности приложений Python с помощью служб Azure". Необходимо убедиться, что субъект-служба имеет достаточные разрешения для создания групп ресурсов и ресурсов хранилища в подписке, назначив ей соответствующую роль в Azure, например роль участника в подписке.
Ссылки на справку о классах, используемых в коде
- DefaultAzureCredential (azure.identity)
- ResourceManagementClient (azure.mgmt.resource)
- StorageManagementClient (azure.mgmt.storage)
4. Запуск скрипта
Если вы еще не сделали этого, войдите в Azure с помощью Azure CLI:
az login
Задайте для переменной
AZURE_SUBSCRIPTION_ID
среды идентификатор подписки. (Вы можете запустить команду az account show и получить идентификатор подписки изid
свойства в выходных данных):Запустите скрипт:
python provision_blob.py
Выполнение скрипта может занять одну-две минуты.
5. Проверка ресурсов
Откройте портал Azure, чтобы убедиться, что группа ресурсов и учетная запись хранения были созданы должным образом. Может потребоваться подождать минуту, а также выбрать " Показать скрытые типы " в группе ресурсов.
Выберите учетную запись хранения, а затем в меню слева откройте раздел Хранилище данных>Контейнеры, чтобы проверить, создан ли контейнер blob-container-01.
Если вы хотите использовать эти ресурсы из кода приложения, перейдите к примеру: используйте служба хранилища Azure.
Дополнительные примеры того, как можно использовать библиотеку управления службы хранилища Azure, см. в статье Начало работы с пакетом управления службой хранилища Azure для Python.
Для справки: аналогичные команды Azure CLI
Следующие команды Azure CLI выполняют те же действия по созданию, что и скрипт Python:
rem Provision the resource group
az group create ^
-n PythonAzureExample-Storage-rg ^
-l centralus
rem Provision the storage account
set account=pythonazurestorage%random%
echo Storage account name is %account%
az storage account create ^
-g PythonAzureExample-Storage-rg ^
-l centralus ^
-n %account% ^
--kind StorageV2 ^
--sku Standard_LRS
rem Retrieve the connection string
FOR /F %i IN ('az storage account show-connection-string -g PythonAzureExample-Storage-rg -n %account% --query connectionString') do (SET connstr=%i)
rem Provision the blob container
az storage container create ^
--name blob-container-01 ^
--account-name %account% ^
--connection-string %connstr%
6. Очистка ресурсов
Оставьте ресурсы на месте, если вы хотите следовать примеру статьи: используйте служба хранилища Azure для использования этих ресурсов в коде приложения. В противном случае выполните команду az group delete , если вам не нужно хранить ресурсы группы ресурсов и хранилища, созданные в этом примере.
Группы ресурсов не несут никаких текущих расходов в подписке, но ресурсы, такие как учетные записи хранения, в группе ресурсов могут взиматься плата. Рекомендуется очистить любую группу, которую вы не используете. Аргумент --no-wait
позволяет команде выполнять возврат без задержки, не ожидая завершения операции.
az group delete -n PythonAzureExample-Storage-rg --no-wait
Для удаления группы ресурсов с помощью кода также можно использовать метод ResourceManagementClient.resource_groups.begin_delete
. Код в примере: создание группы ресурсов демонстрирует использование.
См. также
- Пример. Использование служба хранилища Azure
- Пример. Создание группы ресурсов
- Пример. Перечисление групп ресурсов в подписке
- Пример. Создание веб-приложения и развертывание кода
- Пример. Создание и запрос базы данных
- Пример. Создание виртуальной машины
- Использование Управляемых дисков Azure с виртуальными машинами
- Пройдите короткий опрос об Azure SDK для Python