Ejemplo: Creación de Azure Storage con las bibliotecas de Azure para Python
En este artículo, aprenderá a usar las bibliotecas de administración de Azure en un script de Python para crear un grupo de recursos que contiene una cuenta de Azure Storage y un contenedor de almacenamiento de blobs.
Después de crear los recursos, consulte Ejemplo: Uso de Azure Storage para aprender a usar las bibliotecas cliente de Azure en el código de la aplicación de Python para cargar un archivo en el contenedor de almacenamiento de blobs.
Todos los comandos de este artículo funcionan igual en el bash de Linux o macOS y en los shells de comandos de Windows, a menos que se indique lo contrario.
Más adelante en este artículo se indican los comandos equivalentes de la CLI de Azure. Si prefiere usar Azure Portal, consulte Creación de una cuenta de Azure Storage y Creación de un contenedor de blobs.
1: Configuración del entorno de desarrollo local
Si aún no lo ha hecho, configure un entorno en el que pueda ejecutar el código. Estas son algunas opciones:
Configure un entorno virtual de Python mediante
venv
o la herramienta que prefiera. Puede crear el entorno virtual localmente o en Azure Cloud Shell y ejecutar el código allí. Asegúrese de activar el entorno virtual para empezar a usarlo.Use un entorno de conda.
Use un contenedor de desarrollo en Visual Studio Code o GitHub Codespaces.
2: Instalación de los paquetes de biblioteca de Azure necesarios
Cree un archivo requirements.txt en el que se enumeren las bibliotecas de administración que se usan en este ejemplo:
azure-mgmt-resource azure-mgmt-storage azure-identity
En el terminal con el entorno virtual activado, instale los requisitos:
pip install -r requirements.txt
3: Escritura de código para la creación de recursos de almacenamiento
Cree un archivo de Python llamado provision_blob.py con el siguiente código. Los detalles se explican en los comentarios. El script lee el identificador de suscripción de una variable de entorno, AZURE_SUBSCRIPTION_ID
. Esta variable se establece en un paso posterior. El nombre del grupo de recursos, la ubicación, el nombre de la cuenta de almacenamiento y el nombre del contenedor se definen como constantes en el código.
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}")
Autenticación en el código
Más adelante en este artículo, debe iniciar sesión en Azure con la CLI de Azure para ejecutar el código de ejemplo. Si la cuenta tiene permisos para crear grupos de recursos y recursos de almacenamiento en la suscripción de Azure, el código se ejecutará correctamente.
Para usar este código en un script de producción, puede establecer variables de entorno para usar un método basado en la entidad de servicio para la autenticación. Para más información, consulte Autenticación de aplicaciones de Python con los servicios de Azure. Debe asegurarse de que la entidad de servicio tenga permisos suficientes para crear grupos de recursos y recursos de almacenamiento en la suscripción mediante la asignación de un rol adecuado en Azure; por ejemplo, el rol Colaborador de la suscripción.
Vínculos de referencia a las clases usadas en el código
- DefaultAzureCredential (azure.identity)
- ResourceManagementClient (azure.mgmt.resource)
- StorageManagementClient (azure.mgmt.storage)
4. Ejecución del script
Si aún no lo ha hecho, inicie sesión en Azure mediante la CLI de Azure:
az login
Establezca como valor de la variable de entorno
AZURE_SUBSCRIPTION_ID
el identificador de su suscripción. (Puede ejecutar el comando az account show y obtener el identificador de suscripción de la propiedadid
en la salida):Ejecute el script:
python provision_blob.py
El script puede tardar un minuto o dos en completarse.
5: Comprobación de los recursos
Abra Azure Portal para comprobar que el grupo de recursos y la cuenta de almacenamiento se hayan creado según lo previsto. Es posible que tenga que esperar un minuto y también seleccionar Mostrar tipos ocultos en el grupo de recursos.
Seleccione la cuenta de almacenamiento y, a continuación, seleccione Almacenamiento de datos>Contenedores en el menú de la izquierda para comprobar que aparece "blob-container-01":
Si quiere intentar usar estos recursos aprovisionados desde el código de la aplicación, continúe con el Ejemplo: Uso de Azure Storage.
Para ver un ejemplo adicional del uso de la biblioteca de administración de Azure Storage, consulte el ejemplo de administración del almacenamiento de Python.
Como referencia: comandos equivalentes de la CLI de Azure
Los siguientes comandos de la CLI de Azure realizan los mismos pasos de creación que el script de 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: Limpieza de recursos
Deje los recursos en su lugar si desea seguir el artículo Ejemplo: Uso de Azure Storage para usar estos recursos en el código de la aplicación. De lo contrario, ejecute el comando az group delete si no necesita conservar el grupo de recursos y los recursos de almacenamiento creados en este ejemplo.
Los grupos de recursos no incurren en cargos continuos en la suscripción, pero los recursos, como las cuentas de almacenamiento en el grupo de recursos pueden incurrir en cargos. Es recomendable limpiar cualquier grupo que no esté usando activamente. El argumento --no-wait
permite que el comando devuelva el control inmediatamente en lugar de esperar a que finalice la operación.
az group delete -n PythonAzureExample-Storage-rg --no-wait
También puede usar el método ResourceManagementClient.resource_groups.begin_delete
para eliminar un grupo de recursos del código. El código de Ejemplo: Creación de un grupo de recursos muestra el uso.
Consulte también
- Ejemplo: Uso de Azure Storage
- Ejemplo: Creación de un grupo de recursos
- Ejemplo: Enumeración de los grupos de recursos de una suscripción
- Ejemplo: Creación de una aplicación web e implementación de código
- Ejemplo: Creación y consulta de una base de datos
- Ejemplo: Creación de una máquina virtual
- Uso de Azure Managed Disks con máquinas virtuales
- Realización de una breve encuesta sobre el SDK de Azure para Python