Como Utilizar o Armazenamento de Blob via Armazenamento de Arquivos do Azure

Você pode se encontrar precisando de uma solução barata, mas eficiente, para armazenar seus arquivos em algum momento, mas onde você encontra essa solução? Dê uma olhada no armazenamento de Objeto Binário Grande (blob) do Microsoft Azure! O armazenamento de blob é um dos serviços de armazenamento do Azure e permite que você armazene grandes quantidades de arquivos de dados de texto e binários, conteúdo de streaming ou até mesmo conteúdo estático para distribuição.

Neste tutorial, você aprenderá como trabalhar com o armazenamento de blob no Azure, percorrendo alguns exemplos comuns.

Continue lendo para entrar de cabeça!

Pré-requisitos

Este tutorial será uma demonstração prática. Se você quiser acompanhar, certifique-se de ter o seguinte instalado e disponível.

Construindo um Ambiente Azure

Antes de usar o armazenamento de blob para armazenar seus arquivos, você primeiro precisará importar os módulos do PowerShell Core, conectar-se à sua Assinatura Azure e construir um ambiente Azure.

1. Inicie o PowerShell 7 e execute o seguinte comando para importar os módulos que você usará para armazenar arquivos no armazenamento de blob.

Importing the necessary modules
# Az.Accounts - Fornece cmdlets de gerenciamento de credenciais
# Az.Resources - Fornece cmdlets para trabalhar com os provedores de recursos Azure de nível superior, 
               # como assinaturas
# Az.Storage - Fornece os cmdlets que o ajudarão a trabalhar com 
             # diferentes recursos de armazenamento, como blobs
Import-Module Az.Accounts, Az.Resources, Az.Storage

2. Em seguida, faça login no seu locatário do Azure Active Directory (AD), e execute o comando abaixo para completar uma autenticação interativa no seu navegador da web, conforme mostrado abaixo.

Embora além do escopo deste tutorial, existem outros métodos de autenticação, como um Service Principal ou usando um token de acesso.

Connect-AzAccount
Azure Portal interactive login.

Sempre verifique se o locatário e a assinatura mostrados após o login são os que você pretende usar. Se necessário, você pode alterar seu contexto.

3. Agora execute o comando abaixo para criar um novo grupo de recursos chamado demo, e acrescente cinco números aleatórios (Get-Random -Maximum 99999). Grupos de recursos estão hierarquicamente abaixo de assinaturas e contêm recursos que permitem um gerenciamento mais granular.

Observe que a -Localização do grupo de recursos está definida como Central US para este exemplo. Quando o comando for concluído, ele armazena o resultado na variável $resourceGroup.

$resourceGroup = New-AzResourceGroup "demo$(Get-Random -Maximum 99999)" -Location 'Central US'
Creating a new resource group

4. Execute o comando abaixo para realizar as seguintes tarefas e criar uma nova conta de armazenamento do Azure. Para este exemplo, a conta de armazenamento é nomeada como “storage” e acrescida com cinco números aleatórios (`Get-Random -Maximum 99999`). A variável `$storageAccount` irá armazenar o objeto retornado após a conclusão do comando.

# Passe o parâmetro -ResourceGroupName com a propriedade ResourceGroupName 
# da variável $resourceGroup que você criou no terceiro passo.
# Acrescente números aleatórios ao nome da conta de armazenamento -Name 
# similar ao grupo de recursos.
# Defina a mesma -Location que a propriedade Location da variável $resourceGroup.
# Colocar recursos na mesma região que o grupo de recursos pai é uma boa prática. 
# Especifique o nome da conta de armazenamento -SkuName com
# armazenamento localmente redundante (LRS) ou um nome globalmente único dentro do Azure.

$storageAccount = New-AzStorageAccount `
 -ResourceGroupName $resourceGroup.ResourceGroupName `
 -Name storage$(Get-Random -Maximum 99999) `
 -Location $resourceGroup.Location `
 -SkuName Standard_LRS
Creating a new storage account

5. Execute o comando abaixo para executar algumas tarefas para a atribuição de funções do Azure AD:

  • O valor -SignInName utiliza a conta com a qual você está atualmente autenticado por meio da propriedade UserID retornada pelo cmdlet Get-AzAccessToken.
  • O valor de -RoleDefinitionName é a função integrada Storage Blob Data Contributor que você está atribuindo.
  • O valor -Scope define o escopo da atribuição de função para a conta de armazenamento que você criou (mostrada como storage10029) por meio da propriedade Id da variável $storageAccount.

Você sempre pode fornecer atribuições de função mais granulares para contêineres individuais, conforme necessário.

New-AzRoleAssignment `
 -SignInName (Get-AzAccessToken).UserId`
 -RoleDefinitionName "Storage Blob Data Contributor"`
 -Scope $storageAccount.Id
Creating and verifying a new file

6. Por fim, execute a série de comandos abaixo para criar um arquivo chamado temp.dat em seu sistema local. Você irá carregar e baixar este arquivo da conta de armazenamento nas seções seguintes para demonstrar como o armazenamento de blob funciona.

# Carregue a classe .NET FileStream
$file = New-Object System.IO.FileStream .\temp.dat,Create,ReadWrite
# Defina o tamanho do arquivo
$file.SetLength(10MB)
# Feche o identificador
$file.Close()
# Procure o arquivo para confirmar o tamanho
(Get-ChildItem $file.Name).Length
Creating and verifying a new file

Upload de Arquivos via PowerShell

Agora que você construiu um ambiente Azure e criou um arquivo de exemplo, vamos começar a enviar o arquivo para o armazenamento de blob. O armazenamento de blob funciona de maneira diferente dos sistemas de arquivos padrão. Cada arquivo no armazenamento de blob é um objeto e é mantido dentro de contêineres.

A funcionalidade principal dos blobs é semelhante a outros sistemas de arquivos, mas existem casos de uso em que um ou outro poderia ser uma solução melhor. Os blobs podem até suportar sistemas de arquivos virtuais (por exemplo, BlobFuse).

A Microsoft oferece vários métodos para enviar arquivos para suas contas de armazenamento via PowerShell, AzCopy e Azure Portal. Mas vamos enviar o arquivo de exemplo (temp.dat) para o armazenamento de blob via PowerShell para começar. O PowerShell oferece uma experiência consistente para trabalhar com suas Contas de Armazenamento Azure.

As ações necessárias para realizar esta demonstração implicarão custos. Monitore seu consumo e exclua recursos quando não pretender mais usá-los.

Execute os comandos abaixo para criar um novo contêiner e enviar o arquivo temp.dat ($file) como um objeto. O contêiner é chamado demo neste exemplo, mas você pode nomeá-lo de forma diferente, conforme preferir.

# Cria um contêiner dentro de $storageAccount via propriedade Context da conta de armazenamento
# O objeto retornado é então passado para a variável $container
$container = New-AzStorageContainer -Name demo -Context $storageAccount.Context
# Faz o upload do arquivo temp.dat ($file) para o contêiner de demonstração ($container)
# O nome do blob (-Blob) usará o mesmo nome do arquivo que você está enviando (Get-ChildItem $file.Name)
Set-AzStorageBlobContent -File $file.Name -Container $container.Name -Blob (Get-ChildItem $file.Name).Name -Context $storageAccount.Context
Uploading a file to Azure Storage Account

Enviando Arquivos via AzCopy

Talvez você tenha casos de uso mais complexos, como sincronizar conteúdo ou copiar conteúdo entre diferentes contas em escala. Se for o caso, a ferramenta de linha de comando AzCopy é o que você precisa.

Execute os comandos abaixo para fazer login em sua locatário Azure e copiar seu arquivo local ($file) para o endpoint de URL do seu contêiner. Você está fazendo login no locatário Azure, pois o AzCopy não está ciente das credenciais que você está usando com o PowerShell.

# Inicie sessão no locatário Azure
& .\azcopy.exe login
# Copie o arquivo local $file para o URI completo do destino $container
& .\azcopy.exe copy $file.Name $container.CloudBlobContainer.Uri.AbsoluteUri
Uploading to Azure Storage Account using AzCopy

Em vez de carregar, talvez você queira baixar arquivos via AzCopy. Se for o caso, execute o comando abaixo para copiar os arquivos especificados (temp.dat) do seu contêiner para o diretório local atual: & .\azopy.exe copy "$($container.CloudBlobContainer.Uri.AbsoluteUri)/temp.dat" .\temp.dat

Carregando Arquivos via Portal do Azure

Se você preferir um método gráfico para carregar seus arquivos, então Azure Storage Explorer é seu amigo. O Azure Storage Explorer é um dos melhores métodos gráficos para gerenciar seu armazenamento de blobs. Você pode acessar o explorador de armazenamento a partir do recurso de conta de armazenamento no Portal do Azure.

1. Abra seu navegador da web favorito e vá para o seu explorador de armazenamento no Portal do Azure.

2. Clique no contêiner demo em CONTÊINERES DE BLOB, como mostrado abaixo, e clique em Carregar para acessar a lâmina Carregar blob (painel direito).

3. Agora clique no ícone da pasta no painel Carregar blob para selecionar quais arquivos carregar (temp.dat).

4. Por fim, clique em Upload (botão azul) para carregar o seu arquivo.

Using the Upload blob blade in Azure Storage Explorer

Assim que o carregamento estiver completo, você pode fechar a lâmina Upload blob e ver o seu blob carregado, como na imagem abaixo.

Viewing contents of a blob container in Azure Storage Explorer

Baixando Arquivos via Portal do Azure

Similar ao carregar conteúdo no armazenamento de blobs, o Azure suporta o download de conteúdo de várias maneiras. Mas como você acabou de carregar um arquivo (temp.dat) via Portal do Azure, vamos baixar o mesmo arquivo usando o Azure Storage Explorer no Portal do Azure.

Selecione o arquivo (temp.dat) para baixar e clique no botão Download no Azure Storage Explorer, conforme mostrado abaixo. Ao fazer isso, uma nova caixa de diálogo será aberta para confirmar o download que você verá no próximo passo.

Selecting Files to Download

Agora clique no botão Clique aqui para começar o download para baixar os arquivos selecionados.

Downloading Selected Files from the Blob Storage

Baixando Arquivos via PowerShell

Assim como o carregamento de arquivos, você também tem a opção de baixar arquivos do armazenamento de blobs executando comandos no PowerShell. Com o PowerShell, você pode listar os objetos dentro de um contêiner e, em seguida, baixá-los.

Execute os comandos abaixo para listar todos os objetos no seu contêiner e baixar temp.dat para o seu diretório local.

# Liste todos os objetos dentro do $container para verificar se o contêiner vazio foi criado
Get-AzStorageBlob -Container $container.Name -Context $storageAccount.Context
# Baixe o objeto temp.dat do $container
Get-AzStorageBlobContent -Blob temp.dat -Container $container.Name -Context $storageAccount.Context
Downloading files from Azure Storage Account

Se preferir usar links exclusivos de curta duração para baixar arquivos, pode utilizar tokens de Assinatura de Acesso Compartilhado (SAS) para criar um link de download pré-autorizado. Esses tokens são autenticações únicas e privadas que pode usar para verificar o acesso.

Execute os comandos abaixo para criar um novo link de download para o arquivo (temp.dat) que deseja baixar. O link gerado expira após 10 segundos e fará o download (Invoke-WebRequest $uri) do conteúdo usando esse link para a variável $temp.

# Gere um novo link de download válido por 10 minutos
$uri = New-AzStorageBlobSASToken -Context $storageAccount.Context -Container $container.Name -Blob temp.dat -Permission r -ExpiryTime (Get-Date).AddSeconds(10) -FullUri
# Use o link para baixar o arquivo para a variável $temp
$temp = Invoke-WebRequest $uri

# Ou escreva o arquivo no diretório atual
Invoke-WebRequest $uri -OutFile .\temp.dat
Download from Azure Storage Account using a SAS token

Hospedando uma Página da Web na Internet Pública a partir do Armazenamento de Blob

Até este ponto, você viu casos de uso para baixar arquivos por usuários autenticados. Mas sabia que o armazenamento de blob pode oferecer uma excelente opção para conteúdo público também? Um exemplo é usar um blob para hospedar o conteúdo da sua página da web, o que você realizará nesta demonstração.

Mesmo que o conteúdo da sua página da web esteja criptografado em trânsito e em repouso, qualquer pessoa pode acessar esses conteúdos se o acesso público estiver configurado.

Desde que esteja configurando um caso de uso diferente, você aproveitará um dos principais benefícios da nuvem pública em escala e elasticidade. Você pode provisionar uma nova conta de armazenamento para um caso de uso específico e limitar o risco de usar contêineres públicos.

1. Execute o comando abaixo para criar uma nova conta de armazenamento, como fez na quarta etapa da seção “Construindo um Ambiente Azure”. Mas desta vez, você passará o objeto retornado para a variável $publicStorageAccount.

$publicStorageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroup.ResourceGroupName -Name storage$(Get-Random -Maximum 99999) -Location $resourceGroup.Location -SkuName Standard_LRS
Creating a storage account

Agora você tem uma conta de armazenamento dedicada para seu conteúdo público e pode configurá-la para hospedar conteúdo da web estático com o seguinte comando.

2. Em seguida, execute o cmdlet Enable-AzStorageStaticWebsite para configurar a conta de armazenamento ($publicStorageAccount) para seu novo caso de uso. O -IndexDocument define a página web padrão que você deseja apresentar aos usuários. O -Context será a nova conta de armazenamento que você acabou de criar.

# Crie o contêiner $web e configure a conta de armazenamento
Enable-AzStorageStaticWebsite -IndexDocument index.html -Context $publicStorageAccount.Context
Enable storage account for website hosting

3. Execute os comandos abaixo para criar um novo documento HTML em seu diretório atual e carregar esse documento no contêiner especificamente para hospedar conteúdo da web. O tipo de conteúdo é definido como HTML (ContentType="text/html"), para que os navegadores da web possam interpretar corretamente o documento.

Acessar o documento em um navegador da web imprime a mensagem Hello from <nome da conta de armazenamento>.

# Crie um arquivo HTML simples
"<body><h1>Hello from $($publicStorageAccount.StorageAccountName)!</h1></body>"|Out-File .\index.html
# Faça o upload do arquivo HTML para o contêiner de hospedagem web estática e defina o ContentType como text/html
Set-AzStorageBlobContent -File .\index.html -Container "`$web" -Properties @{ContentType="text/html"} -Context $publicStorageAccount.Context
Create and upload an HTML document

4. Agora execute o seguinte comando para obter a URL onde os usuários podem acessar seu conteúdo.

$publicStorageAccount.PrimaryEndpoints.Web
Get the URI of the endpoint

5. Por fim, abra a URL em seu navegador, você verá algo semelhante à captura de tela a seguir.

Accessing HTML Document from Blob Storage

Limpando Recursos

Agora que você passou por testar esses novos conceitos usando armazenamento de blobs, você vai querer limpar seus recursos. Por quê? Fazê-lo ajuda a manter sua assinatura limpa. Mais importante ainda, você para de incorrer em encargos adicionais.

Como todos os recursos que você usou neste tutorial estão em um único grupo de recursos, você pode limpar todos os recursos excluindo o grupo de recursos.

Os recursos nem sempre estarão contidos em um único grupo de recursos, o que ilustra por que o uso liberal de segmentação lógica pode ser benéfico, especialmente ao testar ou iterar com frequência.

Execute o cmdlet Remove-AzResourceGroup abaixo, especificando a propriedade ResourceGroupName da variável $resourceGroup para excluir o grupo de recursos e todos os recursos dentro.

Remove-AzResourceGroup -Name $resourceGroup.ResourceGroupName
Delete resource group and contents

Conclusão

Neste tutorial, você abordou o upload e download de arquivos para e de blobs em armazenamento em nuvem em diferentes plataformas. Você também aprendeu que é possível hospedar uma página da web a partir do armazenamento de blobs, que os usuários podem acessar publicamente.

Você pode fazer muito mais com armazenamento de blob e outros tipos de armazenamento, então como você construiria sobre esses conceitos? Talvez trabalhar com contas de armazenamento de arquivos, fornecer sistemas de arquivos sem servidor, ou usar blobs de página para discos rígidos virtuais com máquinas virtuais do Azure?

Source:
https://adamtheautomator.com/blob-storage/