Criar um contêiner de blob com Python
Os blobs no Armazenamento do Azure são organizados em contêineres. Antes de carregar um blob, é necessário primeiro criar um contêiner. Este artigo mostra como criar contêineres com a biblioteca de clientes do Armazenamento do Azure para Python.
Para saber mais sobre como criar contêoneres de blobs usando APIs assíncronas, confira Criar contêineres de forma assíncrona.
Pré-requisitos
- Este artigo pressupõe que você já tenha um projeto configurado para trabalhar com a biblioteca de clientes do Armazenamento de Blobs do Azure para Python. Para saber mais sobre como configurar seu projeto, incluindo a instalação de pacote, a adição de instruções de
import
e a criação de um objeto de cliente autorizado, consulte Introdução ao Armazenamento de Blobs do Azure e Python. - O mecanismo de autorização deve ter permissões para criar um contêiner de blob. Para saber mais, consulte as diretrizes de autorização para as seguintes operações de API REST:
Sobre a nomenclatura de contêiner
Um nome de contêiner deve ser um nome DNS válido, pois ele faz parte do URI exclusivo usado para endereçar o contêiner ou seus blobs. Siga estas regras ao nomear um contêiner:
- O comprimento dos nomes do contêiner pode ser entre 3 e 63 aracteres.
- Os nomes de contêiner devem começar com uma letra ou número e podem conter apenas letras minúsculas, números e o caractere traço (-).
- Caracteres de traço consecutivos não são permitidos em nomes de contêineres.
O URI de um recurso de contêiner é formatado da seguinte maneira:
https://my-account-name.blob.core.windows.net/my-container-name
Criar um contêiner
Para criar um contêiner, chame o seguinte método da classe BlobServiceClient:
Você também pode criar um contêiner usando um dos seguintes métodos da classe ContainerClient:
Os contêineres são criados imediatamente sob a conta de armazenamento. Não é possível aninhar um contêiner sob outro. Uma exceção será lançada se já existir um contêiner com o mesmo nome.
O seguinte exemplo cria um contêiner de um objetoBlobServiceClient
:
def create_blob_container(self, blob_service_client: BlobServiceClient, container_name):
try:
container_client = blob_service_client.create_container(name=container_name)
except ResourceExistsError:
print('A container with this name already exists')
Criar o contêiner raiz
Um contêiner raiz funciona como um contêiner padrão para sua conta de armazenamento. Cada conta de armazenamento pode ter um contêiner raiz, que deve ser nomeado $root. O contêiner raiz deve ser explicitamente criado ou excluído.
Você pode fazer referência a um blob armazenado no contêiner raiz sem incluir o nome do contêiner raiz. O contêiner raiz permite que você consulte um blob no nível superior da hierarquia da conta de armazenamento. Por exemplo, você pode fazer referência a um blob no contêiner raiz da seguinte maneira:
https://accountname.blob.core.windows.net/default.html
O exemplo a seguir cria um novo objeto ContainerClient
com o nome do contêiner $root e, em seguida, cria o contêiner se ele ainda não existir na conta de armazenamento:
def create_blob_root_container(self, blob_service_client: BlobServiceClient):
container_client = blob_service_client.get_container_client(container="$root")
# Create the root container if it doesn't already exist
if not container_client.exists():
container_client.create_container()
Criar um contêiner de maneira assíncrona
A biblioteca de clientes do Armazenamento de Blobs do Azure para Python dá suporte à criação assíncrona de contêiner de blobs. Para saber mais sobre os requisitos de instalação do projeto, confira Programação assíncrona.
Siga as etapas abaixo para criar um contêiner usando APIs assíncronas:
Adicione as seguintes instruções de importação:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient from azure.core.exceptions import ResourceExistsError
Adicione o código para executar o programa usando
asyncio.run
. Essa função executa a corrotina passada,main()
no nosso exemplo, e gerencia o loop de eventosasyncio
. As corrotinas são declaradas com a sintaxe async/await. Nesse exemplo, a corrotinamain()
primeiro cria oBlobServiceClient
de nível superior usandoasync with
e, em seguida, chama o método para criar o contêiner. Observe que somente o cliente de nível superior precisa usarasync with
, pois os outros clientes criados a partir dele compartilham o mesmo pool de conexões.async def main(): sample = ContainerSamples() # TODO: Replace <storage-account-name> with your actual storage account name account_url = "https://<storage-account-name>.blob.core.windows.net" credential = DefaultAzureCredential() async with BlobServiceClient(account_url, credential=credential) as blob_service_client: await sample.create_blob_container(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())
Adicione código para criar um contêiner. O código é igual ao exemplo síncrono, exceto que o método é declarado com a palavra-chave
async
e a palavra-chaveawait
é usada ao chamar o métodocreate_container
.async def create_blob_container(self, blob_service_client: BlobServiceClient, container_name): try: container_client = await blob_service_client.create_container(name=container_name) except ResourceExistsError: print('A container with this name already exists')
Com essa configuração básica em vigor, você pode implementar outros exemplos neste artigo como corrotinas usando sintaxe a async/await.
Recursos
Para saber mais sobre como criar um contêiner usando a biblioteca de clientes do Armazenamento de Blobs do Azure para Python, consulte os recursos a seguir.
Operações da API REST
O SDK do Azure para Python contém bibliotecas que se baseiam na API REST do Azure, permitindo a interação com as operações da API REST por meio de paradigmas conhecidos do Python. Os métodos da biblioteca de clientes para criar um contêiner usam a seguinte operação de API REST:
- Criar contêiner (API REST)
Exemplos de código
- Exibir exemplos de código síncrono ou assíncrono deste artigo (GitHub)