Exemplo: criar o Armazenamento do Azure usando as bibliotecas do Azure para Python

Neste artigo, você aprenderá a usar as bibliotecas de gerenciamento do Azure para Python para criar um grupo de recursos, juntamente com uma conta de Armazenamento do Azure e um contêiner de Armazenamento de Blobs.

Depois de provisionar esses recursos, consulte a seção Exemplo: use o Armazenamento do Azure para ver como usar as bibliotecas de clientes do Azure no Python para carregar um arquivo no contêiner de Blobs.

Os comandos equivalentes da CLI do Azure para bash e PowerShell são listados posteriormente neste artigo. Se você preferir usar o portal do Azure, consulte Criar uma conta de armazenamento do Azure e criar um contêiner de blob.

1: Configurar seu ambiente de desenvolvimento local

Caso ainda não tenha feito isso, configure um ambiente em que você possa executar o código. Aqui estão algumas opções:

  • Configure um ambiente virtual do Python usando venv ou sua ferramenta de escolha. Para começar a usar o ambiente virtual, ative-o. Para instalar o Python, consulte Instalar o Python.

    #!/bin/bash
    # Create a virtual environment
    python -m venv .venv
    # Activate the virtual environment
    source .venv/Scripts/activate # only required for Windows (Git Bash)
    
  • Usar um ambiente conda. Para instalar o Conda, consulte Instalar o Miniconda.

  • Use um contêiner de desenvolvimento no Visual Studio Code ou no GitHub Codespaces.

2: Instalar os pacotes necessários da biblioteca do Azure

  1. No console, crie um arquivo requirements.txt que lista as bibliotecas de gerenciamento usadas neste exemplo:

    azure-mgmt-resource
    azure-mgmt-storage
    azure-identity
    
  2. No console com o ambiente virtual ativado, instale os requisitos:

    pip install -r requirements.txt
    

3. Definir variáveis de ambiente

Nesta etapa, você definirá variáveis de ambiente para uso no código neste artigo. O código usa o os.environ método para recuperar os valores.

#!/bin/bash
export AZURE_RESOURCE_GROUP_NAME="<ResourceGroupName>" # Change to your preferred resource group name
export LOCATION="<Location>" # Change to your preferred region
export AZURE_SUBSCRIPTION_ID=$(az account show --query id --output tsv)
export STORAGE_ACCOUNT_NAME="<StorageAccountName>" # Change to your preferred storage account name
export CONTAINER_NAME="<ContainerName>" # Change to your preferred container name

4: Escrever código para criar uma conta de armazenamento e um contêiner de blob

Nesta etapa, você criará um arquivo Python chamado provision_blob.py com o código a seguir. Esse script Python usa o SDK do Azure para bibliotecas de gerenciamento de Python para criar um grupo de recursos, uma conta Armazenamento do Azure e um contêiner de Blob.

import os

# Import the needed credential and management objects from the libraries.
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
from azure.mgmt.storage.models import BlobContainer

# Acquire a credential object.
credential = DefaultAzureCredential()

# Retrieve subscription ID from environment variable.
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

# Retrieve resource group name and location from environment variables
RESOURCE_GROUP_NAME = os.environ["AZURE_RESOURCE_GROUP_NAME"]
LOCATION = os.environ["LOCATION"]

# Step 1: Provision the resource group.
resource_client = ResourceManagementClient(credential, subscription_id)

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: Create a resource group:
# https://learn.microsoft.com/azure/developer/python/sdk/examples/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 = os.environ["STORAGE_ACCOUNT_NAME"] 

# 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, "type": "Microsoft.Storage/storageAccounts" }
)

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("Retrieved the primary key for the storage account")

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 = os.environ["CONTAINER_NAME"]
container = storage_client.blob_containers.create(RESOURCE_GROUP_NAME, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, BlobContainer())

print(f"Provisioned blob container {container.name}")

Autenticação no código

Mais adiante neste artigo, você entra no Azure usando o CLI do Azure para executar o código de exemplo. Se sua conta tiver permissões suficientes para criar grupos de recursos e recursos de armazenamento em sua assinatura Azure, o script será executado com êxito sem configuração adicional.

Para usar esse código em um ambiente de produção, autentique-se usando uma entidade de serviço e defina variáveis de ambiente. Essa abordagem permite acesso seguro e automatizado sem depender da entrada interativa. Para obter diretrizes detalhadas, consulte Como autenticar aplicativos Python com os serviços do Azure.

Certifique-se de que a entidade de serviço receba uma função com permissões suficientes para criar grupos de recursos e contas de armazenamento. Por exemplo, atribuir a função Colaborador no nível da assinatura fornece o acesso necessário. Para saber mais sobre atribuições de função, consulte RBAC (controle de acesso baseado em função) no Azure.

5. Executar o script

  1. Se ainda não tiver feito isso, entre no Azure usando o CLI do Azure:

    az login
    

  2. Executar o script:

    python provision_blob.py
    

    O script leva um ou dois minutos para ser concluído.

6: Verificar os recursos

  1. Abra o portal do Azure para verificar se o grupo de recursos e a conta de armazenamento foram criados conforme o esperado. Talvez seja necessário aguardar um minuto e atualizar a exibição do grupo de recursos.

  2. Selecione a conta de armazenamento e selecioneContêineres de > de Dados no menu à esquerda para verificar se o contêiner que você criou aparece:

    Página do portal do Azure para a conta de armazenamento mostrando o blob container

  3. Se você quiser tentar usar esses recursos do código do aplicativo, continue com o exemplo: use o Armazenamento do Azure.

Para obter outro exemplo de como usar a biblioteca de gerenciamento do Armazenamento do Azure, consulte o exemplo Gerenciar Armazenamento do Python.

7: Limpar recursos

Se você quiser usar esses recursos no código do aplicativo, siga o artigo Example: Use Armazenamento do Azure. Caso contrário, execute o comando az group delete se você não precisar manter o grupo de recursos e os recursos de armazenamento criados neste exemplo.

Os grupos de recursos não incorrem em encargos contínuos em sua assinatura, mas recursos, como contas de armazenamento, no grupo de recursos podem incorrer em encargos. É uma boa prática limpar qualquer grupo de recursos que você não esteja usando ativamente. O --no-wait argumento permite que o comando retorne imediatamente em vez de aguardar a conclusão da operação.

#!/bin/bash
az group delete -n $AZURE_RESOURCE_GROUP_NAME --no-wait

Para referência: comandos equivalentes da CLI do Azure

Os seguintes comandos da CLI do Azure completam as mesmas etapas de criação do script Python:

#!/bin/bash

# Set variables
export LOCATION="<Location>" # Change to your preferred region
export AZURE_RESOURCE_GROUP_NAME="<ResourceGroupName>" # Change to your preferred resource group name
export STORAGE_ACCOUNT_NAME="<StorageAccountName>" # Change to your preferred storage account name
export CONTAINER_NAME="<ContainerName>" # Change to your preferred container name

# Provision the resource group
echo "Creating resource group: $AZURE_RESOURCE_GROUP_NAME"
az group create \
    --location "$LOCATION" \
    --name "$AZURE_RESOURCE_GROUP_NAME"

# Provision the storage account
az storage account create \
    --resource-group "$AZURE_RESOURCE_GROUP_NAME" \
    --location "$LOCATION" \
    --name "$STORAGE_ACCOUNT_NAME" \
    --kind StorageV2 \
    --sku Standard_LRS

echo "Storage account name is $STORAGE_ACCOUNT_NAME"

# Retrieve the connection string
CONNECTION_STRING=$(az storage account show-connection-string \
    --resource-group "$AZURE_RESOURCE_GROUP_NAME" \
    --name "$STORAGE_ACCOUNT_NAME" \
    --query connectionString \
    --output tsv)

# Provision the blob container
az storage container create \
    --name "$CONTAINER_NAME" \
    --account-name "$STORAGE_ACCOUNT_NAME" \
    --connection-string "$CONNECTION_STRING"

Consulte também