Azure Blob Storage: Armazenamento de dados não estruturados - Manipulando Blobs com .NET Core

O Azure Blob Storage é uma solução de armazenamento de objetos da Microsoft para a nuvem. É otimizado para armazenar grandes quantidades de dados não estruturados, como texto ou dados binários.
Neste artigo farei uma breve explicação sobre os principais conceitos do Azure Blob Storage e demonstrarei a implementação de um aplicativo console em .NET Core capaz de manipular uma conta de armazenamento.
Azure Blob Storage — Uma visão geral
O armazenamento de Blobs foi projetado para:
- Fornecer imagens ou documentos diretamente a um navegador.
- Armazenar arquivos para acesso distribuído.
- Transmitir por streaming áudio e vídeo.
- Gravar arquivo de log.
- Armazenar dados de backup e restauração, recuperação de desastres e arquivamento.
- Armazenar dados para análise por um serviço local ou hospedado no Azure.
Os dados podem ser acessados via HTTP/HTTPS de qualquer lugar no mundo, estão acessíveis por meio do Blob service REST API, do Azure PowerShell, da CLI do Azure ou de uma biblioteca cliente do Azure Storage (disponível para diversas linguagens, como: C#, Java, Node, Python …)
O armazenamento de Blobs oferece três tipos de recursos:
- A conta de armazenamento - Fornece um namespace exclusivo no Azure para seus dados. Todos os objetos armazenados no Armazenamento do Azure têm um endereço que inclui o nome exclusivo da conta.
Por exemplo, se a conta de armazenamento se chamar mystorageaccount, o ponto de extremidade padrão para Armazenamento de Blobs será:
http://mystorageaccount.blob.core.windows.net- Um contêiner na conta de armazenamento - Um contêiner organiza um conjunto de blobs, semelhantes a um diretório em um sistema de arquivos.
- Um blob em um contêiner - Armazenamento de texto e dados binários

Como criar uma conta de armazenamento
Neste artigo de instruções, você aprende a criar uma conta de armazenamento usando o portal do Azure, Azure PowerShell, CLI do Azure ou um modelo Azure Resource Manager.
Gerenciando uma conta de armazenamento com .NET Core
Como vimos no inicio deste artigo, há diversas opções para gerenciar uma conta de armazenamento, a partir de agora iremos focar em como manipular uma conta de armazenamento com a biblioteca do Azure Blob Storage para .NET.
A seguir, mostro um passo a passo da criação de um aplicativo console para demonstrar algumas das ações que conseguimos realizar através desta biblioteca.
Pré-requisitos:
- Assinatura do Azure
- Uma conta de armazenamento do Azure
- O SDK do .NET Core atual para o seu sistema operacional.
- Visual Studio code
Criando o projeto
- No terminal do VSCode use o comando abaixo para criar um novo aplicativo console chamado: blobstorage.
> dotnet new console -n blobstorage2. Navegue para o diretório recém criado para compilar a aplicação.
> cd blobstorage
> dotnet buildO resultado da compilação deve ser algo como:
Microsoft(R) Build Engine versão 16.3.0+0f4c62fea para .NET Core
Copyright (C) Microsoft Corporation. Todos os direitos reservados.Restauração concluída em 34,97 ms para C:\Projetos\blobstorage\blobstorage.csproj.
blobstorage -> C:\Projetos\blobstorage\bin\Debug\netcoreapp3.0\blobstorage.dllCompilação com êxito.
0 Aviso(s)
0 Erro(s)Tempo Decorrido 00:00:01.35
Com isto, teremos um simples projeto “Olá, Mundo” em C#, com um arquivo de origem único: Program.cs. Utilize o atalho Ctrl+K Ctrl+O no VSCode para abrir o diretório do projeto e conferir a estrutura criada.
Instalando dependência
Ainda no diretório da aplicação, utilize o comando abaixo para instalar a biblioteca do Azure Blob Storage para .NET.
dotnet add package Microsoft.Azure.Storage.BlobUtilizaremos as seguintes classes .NET desta biblioteca para interagir com os recursos do armazenamento de Blobs:
- CloudStorageAccount: A classe
CloudStorageAccountrepresenta sua conta de armazenamento do Azure. - CloudBlobClient: A classe
CloudBlobClientfornece um ponto de acesso ao serviço Blob. - CloudBlobContainer: A classe
CloudBlobContainerrepresenta um contêiner de blobs. - CloudBlockBlob: O objeto
CloudBlockBlobrepresenta um blob.
Preparando a estrutura do projeto
- Abra o arquivo Program.cs com o VSCode.
- Remova o comando
Console.WriteLine. - Adicione as diretivas
using. - Crie um método
ProcessoAsync, onde faremos a implementação das operações. - No método
Mainchame de forma assíncrona o métodoProcessoAsync.
O código ficará da seguinte forma:
Para autenticar as solicitações do aplicativo, é preciso adicionar suas credencias da conta de armazenamento. Para consultar sua string de conexão, navegue até o Portal do Azure >> Selecione sua conta de armazenamento >> Configurações >> Selecione Chaves de acesso. Copie o valor da cadeia de conexão em Key1.
Depois de copiar a string de conexão, grave-a em uma nova variável de ambiente.
setx CONNECT_STR_BLOB "<suaStringDeConexao>"Autenticando o cliente
O código abaixo verifica se a variável de ambiente contém uma cadeia de conexão que pode ser analisada para criar um objeto CloudStorageAccount apontando para a conta de armazenamento.
Adicione este código dentro do método ProcessoAsync:
Substitua
// ADD AS OUTRAS OPERACOES AQUIno código acima pelos códigos das seções a seguir.
Criar um contêiner
Para criar um contêiner, primeiro crie uma instância do objeto CloudBlobClient, que aponta para o armazenamento de blobs na sua conta de armazenamento. Em seguida, crie uma instância do objeto CloudBlobContainer e crie o contêiner.
Definir permissões em um contêiner
Para definir as permissões em um contêiner, utilize a classe BlobContainerPermissions. Se um blob é público, qualquer cliente poderá acessa-lo anonimamente.
Upload de blobs em um contêiner
O snippet a seguir cria um documento local e realiza o upload no contêiner criado na anterior. Crie uma referência a um objeto CloudBlockBlob chamando o método GetBlockBlobReference no contêiner. Este método criará um novo blob ou substituirá se já exisitir.
Download de blobs
Para realizar o download de um blob, utilize o método DownloadToFileAsync. O snippet a seguir realiza o download do blob criado anteriormente para o sistema de arquivos local.
Executando o código
No terminal, navegue até o diretório do projeto, em seguida, compile e execute o aplicativo.
> dotnet build
> dotnet runOs fontes utilizados neste artigo estão disponíveis no meu GitHub.
