Azure Blob Storage no .NET 6.0

Hoje, apresento a solução Azure Blob Storage, utilizado para armazenar objetos binários em nuvem. A velocidade, escalabilidade, facilidade de acesso e segurança (contra acidentes e ataques) tornam esse armazenamento em nuvem muito atraente para todos os tipos de organizações, além de ser uma ferramenta à um custo muito baixo.

O Blob Storage é ideal para:

  • Fornecer imagens ou documentos diretamente no navegador.
  • Streaming de vídeo ou áudio.
  • Armazenamento de dados para backup, restauração e arquivamento.
  • Armazenar arquivos para acesso distribuído.
  • Gravar arquivos de log.

A principal vantagem em utilizá-lo é de não salvar arquivos do tipo IMAGE ou Base64 no banco de dados relacional, o que deixa uma operação muito custosa e lenta dependendo do tamanho e quantidade.

Neste artigo, apresento uma breve explicação sobre os principais conceitos do Azure Blob Storage, com exemplo de implementação de uma API em .NET 6 realizando as operações de upload e download de imagens.

Pré-requisitos

Configurando o Azure Blob Storage

O Blob Storage é composto por três recursos, conforme explicado abaixo:

Azure Blob Storage
  • Storage Account: Conta de armazenamento do Azure.
  • Container: Atua como um diretório para organizar e gerenciar os objetos.
  • Blob: Representação de um objeto não estruturado, podendo ser texto, áudio, imagem, vídeo, etc.

Para utilizar os recursos do Blob é necessário criar um Storage Account no Azure, configurando conforme a imagem abaixo:

Em Performance é possível selecionar Standard (HDD) ou Premium (SDD), neste exemplo utilizarem o modelo Standard, indicado para gravação e leitura de objetos Blob.

Em seguida, na aba Advanced é necessário habilitar a transferência segura por API (Require secure transfer for REST API operations) e marcar o Access tier como Hot.

  • Cool: Camada que armazena os dados que não são acessados com frequência. Seu custo de armazenamento é menor, mas o custo de acesso é maior do que o nível Hot.
  • Hot: O custo de armazenamento é maior do que o acesso Cool, mas o custo de acesso é menor.

Com as configurações realizadas, clique Review + create para provisionar o Storage Account.

Após a criação, clique em Access keys, copie e guarde o conteúdo da Connection string.

Configurando a API

Primeiro, é necessário configurar a connection string no arquivo appsettings.json:

  "ConnectionStrings": {
    "AzureStorageAccount": "DefaultEndpointsProtocol=https;AccountName=xxxxxxxx;AccountKey=xxxxxxxxxx;EndpointSuffix=core.windows.net"
  }

Em seguida, é preciso configurar a classe program.cs com o código abaixo:

Onde a classe AzureBlobStorage.cs contém as principais operações com o Blob Storage:

No controller, é necessário registrar a interface IAzureBlobStorage para acessar os principais métodos do Blob Storage:

É uma boa prática, inclusive de segurança, utilizar a geração de guid para compor o nome de um objeto no Storage, isso evita criar arquivos com nomes sequenciais:

var fileName = $"{Guid.NewGuid()}{fileExtensiom}";

O método CreateContainerAsync é responsável por criar ou retornar um container caso já exista (Container é equivalente à uma pasta de separação dos objetos, por ele também é possível configurar o permissionamento de acessos).

Também é possível criar políticas de compartilhamento, por exemplo, em situações onde é necessário compartilhar uma pasta por um determinado tempo, nesse caso podemos utilizar o SharedAccessBlobPolicy para esse controle, como no código abaixo, onde um container é compartilhado para leitura por 24 horas:

Testando

Ao executar a API, é possível realizar as duas operações. Clique no endpoint de upload e faça o teste carregando uma imagem qualquer:

Conferindo no Storage Account, na seção Data storage, clique em Containers e é possível ver que o container images foi criado automaticamente:

E ao abrir o container, é possível navegar pelos objetos carregados pela API:

Finalizando

Azure Blob Storage é uma ferramenta obrigatória caso suas aplicações necessitem guardar ou administrar arquivos / objetos. Ele veio justamente para você deixar de utilizar banco transacional (onde é necessário salvar no tipo IMAGE ou base64) ou File System, além de poder realizar controle de acesso aos containers e objetos.

Utilizar o Blob Storage é performático, simples, seguro e barato.

Os detalhes completos deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/sample-azure-blob

Deixe uma resposta