Compartir a través de


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:

2: Instalación de los paquetes de biblioteca de Azure necesarios

  1. 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
    
  2. 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.

4. Ejecución del script

  1. Si aún no lo ha hecho, inicie sesión en Azure mediante la CLI de Azure:

    az login
    
  2. 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 propiedad id en la salida):

    set AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000
    
  3. Ejecute el script:

    python provision_blob.py
    

El script puede tardar un minuto o dos en completarse.

5: Comprobación de los recursos

  1. 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.

    Página de Azure Portal para el nuevo grupo de recursos, que muestra la cuenta de almacenamiento

  2. 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":

    Página de Azure Portal para la cuenta de almacenamiento, que muestra el contenedor de blobs

  3. 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