Guia de Início Rápido: biblioteca de clientes do Armazenamento de Blobs do Azure para Python

Observação

A opção Criar do zero orienta você passo a passo pelo processo de criação de um projeto, instalação de pacotes, escrita do código e execução de um aplicativo de console básico. Essa abordagem é recomendada se você deseja entender todos os detalhes envolvidos na criação de um aplicativo que se conecta ao Armazenamento de Blobs do Azure. Caso prefira automatizar as tarefas de implantação e começar com um projeto concluído, escolha Iniciar com um modelo.

Observação

A opção Iniciar com um modelo usa o Azure Developer CLI para automatizar tarefas de implantação e iniciar com um projeto concluído. Essa abordagem é recomendada se você deseja explorar o código o mais rápido possível sem passar pelas tarefas de instalação. Caso prefira obter instruções passo a passo para criar o aplicativo, escolha Criar do zero.

Introdução à biblioteca de clientes do Armazenamento de Blobs do Azure para Python a fim de gerenciar blobs e contêineres.

Neste artigo, você vai seguir as etapas para instalar o pacote e testar o código de exemplo para tarefas básicas.

Neste artigo, você usará o Azure Developer CLI para implantar recursos do Azure e executar um aplicativo de console concluído com apenas alguns comandos.

Documentação de referência de API | Código-fonte da biblioteca | Pacote (PyPi) | Amostras

Este vídeo mostra como começar a usar a biblioteca de clientes do Armazenamento de Blobs do Azure para Python.

As etapas no vídeo também são descritas nas seções a seguir.

Pré-requisitos

Configurando

Esta seção orienta você na preparação de um projeto para trabalhar com a biblioteca de clientes do Armazenamento de Blobs do Azure para Python.

Criar o projeto

Crie um aplicativo Python chamado blob-quickstart.

  1. Em uma janela de console (como PowerShell ou Bash), crie um diretório para o projeto:

    mkdir blob-quickstart
    
  2. Alterne para o diretório blob-quickstart recém-criado:

    cd blob-quickstart
    

Instalar os pacotes

No diretório do projeto, instale pacotes para as bibliotecas de cliente do Armazenamento de Blobs do Azure e do Azure Identity usando o comando pip install. O pacote azure-identity é necessário para conexões sem senha com os serviços do Azure.

pip install azure-storage-blob azure-identity

Configurar o framework de aplicativos

No diretório do projeto, siga as etapas para criar a estrutura básica do aplicativo:

  1. Abra um arquivo de texto novo no editor de código.
  2. Adicione as instruções import, crie a estrutura para o programa e inclua o tratamento de exceção básico, conforme mostrado abaixo.
  3. Salve o novo arquivo como blob_quickstart.py no diretório blob-quickstart.
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 here

except Exception as ex:
    print('Exception:')
    print(ex)

Com o Azure Developer CLI instalado, você pode criar uma conta de armazenamento e executar o código de exemplo com apenas alguns comandos. Execute o projeto em seu ambiente de desenvolvimento local ou em um DevContainer.

Inicializar o modelo do Azure Developer CLI e implantar recursos

Em um diretório vazio, siga estas etapas para inicializar o modelo azd, provisionar recursos do Azure e começar a usar o código:

  • Clone os ativos do repositório de início rápido do GitHub e inicialize o modelo localmente:

    azd init --template blob-storage-quickstart-python
    

    Você será solicitado a dar as seguintes informações:

    • Nome do ambiente: esse valor é usado como um prefixo para todos os recursos do Azure criados pelo Azure Developer CLI. O nome precisa ser exclusivo em todas as assinaturas do Azure e ter entre 3 e 24 caracteres. O nome pode conter apenas números e letras minúsculas.
  • Faça logon no Azure:

    azd auth login
    
  • Provisione e implante os recursos no Azure:

    azd up
    

    Você será solicitado a dar as seguintes informações:

    • Assinatura: a assinatura do Azure na qual seus recursos estão implantados.
    • Localização: a região do Azure em que os recursos estão implantados.

    A implantação pode levar alguns minutos para ser concluída. A saída do comando azd up inclui o nome da conta de armazenamento recém-criada, que você precisará mais tarde para executar o código.

Execute o código de exemplo

Neste ponto, os recursos são implantados no Azure e o código está quase pronto para ser executado. Siga estas etapas para instalar pacotes, atualizar o nome da conta de armazenamento no código e executar o aplicativo de console de exemplo:

  • Instalar pacotes: no diretório local, instale pacotes para o Armazenamento de Blobs do Azure e bibliotecas de cliente do Azure Identity usando o seguinte comando: pip install azure-storage-blob azure-identity
  • Atualize o nome da conta de armazenamento: no diretório local, edite o arquivo chamado blob_quickstart.py. Localize o espaço reservado <storage-account-name> e substitua-o pelo nome real da conta de armazenamento criada pelo comando azd up. Salve as alterações.
  • Execute o projeto: Execute o seguinte comando para executar o aplicativo: python blob_quickstart.py.
  • Observar a saída: esse aplicativo cria um arquivo de teste na pasta de dados local e o carrega em um contêiner na conta de armazenamento. Em seguida, o exemplo lista os blobs no contêiner e baixa o arquivo com um novo nome para que você possa comparar os arquivos novos e antigos.

Para saber mais sobre como o código de exemplo funciona, confira Exemplos de código.

Quando terminar de testar o código, confira a seção Limpar recursos para excluir os recursos criados pelo comando azd up.

Modelo de objeto

O Armazenamento de Blobs do Azure é otimizado para armazenar grandes quantidades de dados não estruturados. Dados não estruturados são dados que não estão de acordo com uma definição ou um modelo de dados específico, como texto ou dados binários. O Armazenamento de Blobs oferece três tipos de recursos:

  • A conta de armazenamento
  • Um contêiner na conta de armazenamento
  • Um blob no contêiner

O diagrama a seguir mostra a relação entre esses recursos:

Diagram of Blob storage architecture

Use as classes Python a seguir para interagir com esses recursos:

  • BlobServiceClient: a classe BlobServiceClient permite manipular os recursos do Armazenamento do Azure e os contêineres do blob.
  • ContainerClient: a classe ContainerClient permite manipular os contêineres do Armazenamento do Azure e seus blobs.
  • BlobClient: a classe BlobClient permite manipular os blobs do Armazenamento do Azure.

Exemplos de código

Estes exemplos de snippets de código mostram como realizar as seguintes tarefas com a biblioteca de clientes do Armazenamento de Blobs do Azure para Python:

Observação

O modelo da CLI do Desenvolvedor do Azure inclui um arquivo com código de exemplo já instalado. Os exemplos a seguir fornecem detalhes de cada parte do código de exemplo. O modelo implementa o método de autenticação sem senha recomendado, conforme descrito na seção Autenticar-se no Azure. O método de cadeia de conexão é mostrado como uma alternativa, mas não é usado no modelo e não é recomendado para o código de produção.

Autenticar-se no Azure e autorizar o acesso a dados de blob

As solicitações de aplicativo para o Armazenamento de Blobs do Azure devem ser autorizadas. O uso da classe DefaultAzureCredential fornecida pela biblioteca de clientes de identidade do Azure é a abordagem recomendada para implementar conexões sem senha com os serviços do Azure no código, incluindo o Armazenamento de Blobs.

Você também pode autorizar solicitações para o Armazenamento de Blobs do Azure usando a chave de acesso da conta. No entanto, essa abordagem deve ser usada com cautela. Os desenvolvedores devem ser diligentes para nunca expor as chaves de acesso em um local não seguro. Qualquer pessoa que tenha a chave de acesso pode autorizar solicitações na conta de armazenamento e efetivamente tem acesso a todos os dados. DefaultAzureCredential oferece benefícios aprimorados de gerenciamento e segurança sobre a chave de conta para permitir a autenticação sem senha. Ambas as opções são demonstradas no exemplo a seguir.

DefaultAzureCredential dá suporte a vários métodos de autenticação e determina quais métodos devem ser usados no runtime. Essa abordagem permite que seu aplicativo use diferentes métodos de autenticação em ambientes diferentes (local versus produção) sem implementar código específico do ambiente.

A ordem e as localizações nas quais DefaultAzureCredential procura as credenciais, podem ser encontradas na Visão geral da biblioteca de Identidade do Azure.

Por exemplo, o aplicativo pode autenticar usando suas credenciais de entrada da CLI do Azure no desenvolvimento local. Em seguida, o aplicativo pode usar uma identidade gerenciada após ser implantado no Azure. Nenhuma alteração de código é necessária para essa transição.

Atribuir funções à sua conta de usuário do Microsoft Entra

Ao desenvolver localmente, verifique se a conta de usuário que está acessando os dados de blob tem as permissões corretas. Você precisará do Colaborador de Dados do Blob de Armazenamento para ler e gravar os dados de blob. Para atribuir essa função a si mesmo, você precisará receber a atribuição da função Administrador de Acesso do Usuário ou de outra função que inclua a ação Microsoft.Authorization/roleAssignments/write. É possível atribuir funções RBAC do Azure a um usuário usando o portal do Azure, a CLI do Azure ou o Azure PowerShell. Você pode saber mais sobre os escopos disponíveis para atribuições de função na página de visão geral do escopo.

Nesse cenário, você atribuirá permissões à sua conta de usuário, no escopo da conta de armazenamento, para seguir o Princípio do Privilégio Mínimo. Essa prática fornece aos usuários apenas as permissões mínimas necessárias e cria ambientes de produção mais seguros.

O exemplo a seguir atribuirá a função de Colaborador de Dados do Blob de Armazenamento à sua conta de usuário, que fornece acesso de leitura e gravação aos dados de blob na sua conta de armazenamento.

Importante

Na maioria dos casos, levará um ou dois minutos para a atribuição de função se propagar no Azure, mas em casos raros pode levar até oito minutos. Se você receber erros de autenticação ao executar o código pela primeira vez, aguarde alguns instantes e tente novamente.

  1. No portal do Azure, localize sua conta de armazenamento usando a barra de pesquisa principal ou a navegação à esquerda.

  2. Na página de visão geral da conta de armazenamento, selecione Controle de acesso (IAM) no menu à esquerda.

  3. Na página Controle de acesso (IAM), selecione a guia Atribuições de função.

  4. Selecione + Adicionar no menu superior e, em seguida, Adicionar atribuição de função no menu suspenso resultante.

    A screenshot showing how to assign a role.

  5. Use a caixa de pesquisa para filtrar os resultados para a função desejada. Para este exemplo, pesquise o Colaborador de Dados do Blob de Armazenamento e selecione o resultado correspondente e, em seguida, escolha Avançar.

  6. Em Atribuir acesso a, selecione Usuário, grupo ou entidade de serviço e, em seguida, selecione + Selecionar membros.

  7. No diálogo, pesquise seu nome de usuário do Microsoft Entra (geralmente seu endereço de email user@domain) e escolha Selecionar na parte inferior do diálogo.

  8. Selecione Revisar + atribuir para ir para a página final e, em seguida, Revisar + atribuir novamente para concluir o processo.

Entrar e conectar o código do aplicativo ao Azure usando DefaultAzureCredential

É possível autorizar o acesso aos dados pela conta de armazenamento usando as seguintes etapas:

  1. Verifique se você está autenticado com a mesma conta do Microsoft Entra à qual a função foi atribuída na sua conta de armazenamento. Você pode se autenticar pela CLI do Azure, pelo Visual Studio Code ou pelo Azure PowerShell.

    Entre no Azure por meio da CLI do Azure usando o seguinte comando:

    az login
    
  2. Para usar DefaultAzureCredential, verifique se o pacote azure-identity está instalado e se a classe é importada:

    from azure.identity import DefaultAzureCredential
    from azure.storage.blob import BlobServiceClient
    
  3. Adicione este código ao bloco try. Quando o código for executado na estação de trabalho local, DefaultAzureCredential usará as credenciais do desenvolvedor da ferramenta priorizada na qual você está conectado para autenticação no Azure. Exemplos dessas ferramentas incluem a CLI do Azure ou o Visual Studio Code.

    account_url = "https://<storageaccountname>.blob.core.windows.net"
    default_credential = DefaultAzureCredential()
    
    # Create the BlobServiceClient object
    blob_service_client = BlobServiceClient(account_url, credential=default_credential)
    
  4. Atualize o nome da conta de armazenamento no URI do objeto BlobServiceClient. O nome da conta de armazenamento pode ser encontrado na página de visão geral do portal do Azure.

    A screenshot showing how to find the storage account name.

    Observação

    Quando implantado no Azure, esse mesmo código pode ser usado para autorizar solicitações para o Armazenamento do Azure de um aplicativo em execução no Azure. No entanto, você precisará habilitar a identidade gerenciada em seu aplicativo no Azure. Em seguida, configure a conta de armazenamento para permitir que essa identidade gerenciada se conecte. Para obter instruções detalhadas sobre como configurar essa conexão entre os serviços do Azure, consulte o tutorial Autenticação de aplicativos hospedados no Azure.

Criar um contêiner

Crie um novo contêiner em sua conta de armazenamento chamando o método create_container no objeto blob_service_client. Neste exemplo, o código acrescenta um valor GUID ao nome do contêiner para garantir que ele seja exclusivo.

Adicione este código ao final do bloco try:

# Create a unique name for the container
container_name = str(uuid.uuid4())

# Create the container
container_client = blob_service_client.create_container(container_name)

Para saber mais sobre como criar um contêiner e explorar mais exemplos de código, confira Criar um contêiner de blob com Python.

Importante

Os nomes de contêiner devem estar em minúsculas. Para saber mais sobre como nomear contêineres e blobs, veja Nomenclatura e referência de contêineres, blobs e metadados.

Carregar blobs em um contêiner

Carregue um blob em um contêiner usando upload_blob. O código de exemplo cria um arquivo de texto no diretório data local para carregá-lo no contêiner.

Adicione este código ao final do bloco try:

# 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 file
with open(file=upload_file_path, mode="rb") as data:
    blob_client.upload_blob(data)

Para saber mais sobre o carregamento de blobs, e para explorar mais exemplos de código, confira Carregar um blob com Python.

Listar os blobs em um contêiner

Lista os blobs no contêiner chamando o método list_blobs. Nesse caso, apenas um blob foi adicionado ao contêiner, portanto, a operação de listagem retorna apenas esse blob.

Adicione este código ao final do bloco try:

print("\nListing blobs...")

# List the blobs in the container
blob_list = container_client.list_blobs()
for blob in blob_list:
    print("\t" + blob.name)

Para saber mais sobre a listagem de blobs, e para explorar mais exemplos de código, confira Listagem de blobs com Python.

Baixar blobs

Baixa o blob criado anteriormente chamando o método download_blob. O código de exemplo adiciona o sufixo "DOWNLOAD" ao nome do blob para que você possa ver os dois arquivos no sistema de arquivos local.

Adicione este código ao final do bloco try:

# 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())

Para saber mais sobre o download de blobs, e para explorar mais exemplos de código, confira Baixar um blob com Python.

Excluir um contêiner

O código a seguir limpa os recursos que o aplicativo criou ao remover todo o contêiner usando o método delete_container. Você também pode excluir arquivos locais se desejar.

O aplicativo pausa a entrada do usuário chamando input() antes de excluir o blob, o contêiner e os arquivos locais. Verifique se os recursos foram criados corretamente antes de serem excluídos.

Adicione este código ao final do bloco try:

# 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")

Para saber mais sobre como excluir um contêiner e explorar mais exemplos de código, confira Excluir e restaurar um contêiner de blob com Python.

Executar o código

Este aplicativo cria um arquivo de teste na pasta local e o carrega no Armazenamento de Blobs do Azure. Depois, o exemplo lista os blobs no contêiner e baixa o arquivo com um novo nome. Você pode comparar os arquivos novos e antigos.

Navegue até o diretório que contém o arquivo blob_quickstart.py e execute o seguinte comando python para executar o aplicativo:

python blob_quickstart.py

A saída do aplicativo é semelhante ao seguinte exemplo (valores de UUID omitidos para fins de legibilidade):

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

Antes de iniciar o processo de limpeza, verifique se os dois arquivos estão na pasta data. Você pode compará-los e observar se eles são idênticos.

Limpar os recursos

Depois de verificar os arquivos e concluir o teste, pressione a tecla ENTER para excluir os arquivos de teste e o contêiner criado na conta de armazenamento. Use também a CLI do Azure para excluir recursos.

Ao terminar o início rápido, limpe os recursos criados executando o seguinte comando:

azd down

Você será solicitado a confirmar a exclusão dos recursos. Insira y para confirmar.

Próximas etapas

Neste início rápido você aprendeu a carregar, baixar e listar blobs usando Python.

Para ver os aplicativos de exemplo de armazenamento de blobs, acesse: