Como Usar Armazenamento Blob via Armazenamento de Arquivos Azure

Você pode se encontrar em necessidade de uma solução barata, porém eficiente, para armazenar seus arquivos em algum momento, mas onde encontrar essa solução? Dê uma olhada no armazenamento de Objeto Binário Grande (blob) da Microsoft Azure! O armazenamento de blob é um dos serviços de armazenamento da 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 na Azure, seguindo alguns exemplos comuns.

Continue lendo para começar!

Pré-requisitos

Este tutorial será uma demonstração prática. Se você deseja 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 inquilino do Azure Active Directory (AD), em seguida, execute o comando abaixo para concluir uma autenticação interativa no seu navegador da web, como mostrado abaixo.

Embora além do escopo deste tutorial, existem outros métodos de autenticação, como um Principal de Serviço 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 aqueles 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 é 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 um novo conta de armazenamento do Azure. Para este exemplo, a conta de armazenamento é chamada de storage e é anexada 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 -ResourceGroupName com a propriedade ResourceGroupName
# da variável $resourceGroup que você criou no passo três.
# Anexe números aleatórios ao nome da conta de armazenamento -Name
# semelhante 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 redundante local (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ção do Azure AD:

  • O valor -SignInName usa a conta com a qual você está atualmente conectado através da propriedade UserID retornada pelo cmdlet Get-AzAccessToken.
  • O valor de -RoleDefinitionName é a função integrada Contribuidor de Dados do Blob de Armazenamento que você está atribuindo.
  • O valor -Scope define o escopo da atribuição de função para a conta de armazenamento que você criou (armazenamento10029 mostrado abaixo) através 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ê fará upload e download deste arquivo da conta de armazenamento nas seções seguintes para demonstrar como funciona o armazenamento de blob.

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

Carregando Arquivos via PowerShell

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

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

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

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

Execute os comandos abaixo para criar um novo contêiner e fazer o upload do 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 está sendo enviado (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

Upload de 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 na sua inquilina do Azure e copiar seu arquivo local ($file) para o endpoint URL do seu contêiner. Você está fazendo login na inquilina do Azure porque o AzCopy não tem conhecimento das credenciais que você está usando com o PowerShell.

# Entrar no locatário do Azure
& .\azcopy.exe login
# Copiar 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 fazer o upload, talvez você queira baixar arquivos via AzCopy. Se for o caso, execute o comando abaixo para copiar os arquivos especificados (temp.dat) do seu container para o diretório local atual: & .\azopy.exe copy "$($container.CloudBlobContainer.Uri.AbsoluteUri)/temp.dat" .\temp.dat

Enviando Arquivos via Portal do Azure

Se você preferir um método gráfico para enviar 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 da conta de armazenamento no Portal do Azure.

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

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

3. Agora clique no ícone de pasta no painel Enviar blob para selecionar quais arquivos enviar (temp.dat).

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

Using the Upload blob blade in Azure Storage Explorer

Assim que o envio for concluído, você pode fechar a lâmina de Envio de blob e ver seu blob enviado, como na imagem abaixo.

Viewing contents of a blob container in Azure Storage Explorer

Baixando Arquivos via Portal Azure

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

Selecione o arquivo (temp.dat) para baixar e clique no botão Baixar no Azure Storage Explorer, como 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 iniciar o download para baixar os arquivos que você selecionou.

Downloading Selected Files from the Blob Storage

Baixando Arquivos via PowerShell

Assim como o envio 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 depois baixá-los.

Execute os comandos abaixo para listar todos os objetos em seu contêiner e baixar temp.dat para 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 únicos de curta duração para baixar arquivos, você pode usar tokens de Assinatura de Acesso Compartilhado (SAS) para criar um link de download pré-autorizado. Esses tokens são únicos e privados, e você pode usá-los para verificar seu acesso.

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

# Gerar 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
# Usar o link para baixar o arquivo para a variável $temp
$temp = Invoke-WebRequest $uri

# Ou alternativamente escrever o arquivo para o 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 de download de arquivos por usuários autenticados. Mas você sabia que o armazenamento de blob pode fornecer 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ê vai realizar nesta demonstração.

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

Já que você está 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, assim como fez na etapa quatro da seção “Construindo um Ambiente Azure”. Mas desta vez, passe 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 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 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 faça upload desse documento para o contêiner específico para hospedar conteúdo 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 web exibirá 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 upload do arquivo HTML para o contêiner de hospedagem web estático 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

Limpeza de Recursos

Agora que você passou por testes desses novos conceitos usando armazenamento de blob, você vai querer limpar seus recursos. Por quê? Fazê-lo ajuda a manter sua assinatura limpa. Mais importante ainda, você interrompe a incidência de 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.

Nem sempre os recursos 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 dele.

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

Conclusão

Neste tutorial, você abordou o envio e o download de arquivos para e de blobs no armazenamento em nuvem em diferentes plataformas. Você também aprendeu que é possível hospedar uma página da web a partir do armazenamento de blob 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/