Exercício – gerir o armazenamento em camadas com aplicações ASP.NET Core

Concluído

Agora, irá testar alguns códigos .NET de exemplo para obter e modificar níveis de camadas para alguns exemplos de blobs de Armazenamento do Azure. Você criará uma nova conta BlobStorage e definirá a conta como Cool. Em seguida, você carregará alguns dados e usará o aplicativo para modificar as camadas de armazenamento.

Transferir o código e os dados de exemplo

Neste primeiro passo, irá transferir o código fonte e os dados de exemplo para o seu armazenamento do Cloud Shell.

  1. Execute os seguintes comandos no Cloud Shell para baixar o código-fonte e os dados de exemplo para a storageapp pasta no armazenamento do Cloud Shell:

    git clone https://github.com/MicrosoftDocs/mslearn-optimize-blob-storage-costs storageapp
    cd storageapp
    

Utilizar a CLI para criar uma nova conta de armazenamento de blobs

Agora você criará uma nova conta BlobStorage e recuperará a chave de armazenamento da conta.

  1. Execute os seguintes comandos no Cloud Shell para criar uma nova conta BlobStorage definida como Cool. Substitua <random string> no código a seguir por uma sequência de letras ou números:

    export RESOURCE_GROUP=<rgn>[sandbox resource group name]</rgn>
    
    export AZURE_STORAGE_ACCOUNT=<random string>storageaccount
    
    az storage account create \
        --resource-group $RESOURCE_GROUP \
        --name $AZURE_STORAGE_ACCOUNT \
        --kind BlobStorage \
        --access-tier Cool
    
  2. Execute o seguinte comando no Cloud Shell para recuperar a chave de armazenamento da conta e armazená-la em uma variável:

    export AZURE_STORAGE_KEY=`az storage account keys list -g $RESOURCE_GROUP -n $AZURE_STORAGE_ACCOUNT --query [0].value --output tsv`
    

Criar o contentor e carregar dados

Neste passo, irá criar um contentor de blobs e três blobs, cada um contendo alguns dados de exemplo.

  1. Execute o seguinte comando no Cloud Shell para criar um novo contentor:

    az storage container create \
        --name blobcontainer \
        --account-name $AZURE_STORAGE_ACCOUNT \
        --account-key $AZURE_STORAGE_KEY
    
  2. Execute os seguintes comandos no Cloud Shell para blobs com dados de exemplo:

    cd ManageStorageTiers
    az storage blob upload --file testdata.txt --container-name blobcontainer --name blob1
    az storage blob upload --file testdata.txt --container-name blobcontainer --name blob2
    az storage blob upload --file testdata.txt --container-name blobcontainer --name blob3
    

Definir a camada de cada blob

Neste passo, irá definir a camada de acesso de cada blob.

  1. Execute o seguinte comando no Cloud Shell para definir o blob1 como Archive (Arquivo):

    az storage blob set-tier \
        --container-name blobcontainer \
        --name blob1 \
        --tier Archive
    
  2. Execute o seguinte comando no Cloud Shell para definir o blob2 como Cool (Acesso Esporádico):

    az storage blob set-tier \
        --container-name blobcontainer \
        --name blob2 \
        --tier Cool
    
  3. Execute o seguinte comando no Cloud Shell para definir o blob3 como Hot (Acesso Frequente):

    az storage blob set-tier \
        --container-name blobcontainer \
        --name blob3 \
        --tier Hot
    

Gerir camadas de armazenamento no código

Agora, está pronto para implementar e testar alguns códigos. Primeiro, você definirá as variáveis de ambiente que o aplicativo de exemplo requer. Em seguida, irá criar e executar a aplicação de exemplo (ignore os avisos sobre o pacote Microsoft.Azure.KeyVault.Core).

  1. Execute os seguintes comandos no Cloud Shell para armazenar as variáveis de ambiente usadas pelo aplicativo:

    export STORAGE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP -n $AZURE_STORAGE_ACCOUNT --output tsv`
    export CONTAINER_NAME=blobcontainer
    
  2. Execute o seguinte comando no Cloud Shell para compilar e executar a aplicação ManageStorageTiers:

    cd ManageStorageTiers
    dotnet build
    dotnet run
    
  3. O aplicativo ManageStorageTiers agora se conecta ao seu armazenamento de blob e consulta os três blobs chamados blob1, blob2 e blob3. Em seguida, ele altera a camada de armazenamento de todos os três blobs e consulta a camada de armazenamento de cada blob novamente para verificar a alteração. A camada Arquivo não terá sido alterada devido à latência de reidratação.

Rever o código da aplicação

Neste passo final, irá analisar o código utilizado pela aplicação ManageStorageTiers para gerir e alterar as camadas de acesso.

  1. No Cloud Shell, digite code ., e use o editor para abrir ManageStorageTiers\Program.cs.

  2. Esse código exibe as camadas de armazenamento para todos os blobs em um contêiner:

    private static async Task DisplayBlobTiers(BlobContainerClient blobContainerClient)
    {
        AsyncPageable<BlobItem> blobItems = blobContainerClient.GetBlobsAsync();
    
        await foreach (var blobItem in blobItems)
        {
            Console.WriteLine($"  Blob name {blobItem.Name}:   Tier {blobItem.Properties.AccessTier}");
        }
    }
    
  3. Os seguintes métodos trabalham juntos para atualizar a camada de armazenamento para um conjunto de blobs em um contêiner:

    private static async Task UpdateBlobTiers(BlobContainerClient blobContainerClient)
    {
        AsyncPageable<BlobItem> blobItems = blobContainerClient.GetBlobsAsync();
    
        await foreach (var blobItem in blobItems)
        {
            string blobName = blobItem.Name;
            AccessTier? currentAccessTier = blobItem.Properties.AccessTier;
            AccessTier newAccessTier = GetNewAccessTier(currentAccessTier);
    
            Console.WriteLine($"  Blob name: {blobItem.Name}   Current tier: {currentAccessTier}   New tier: {newAccessTier}");
    
            BlobClient blobClient = blobContainerClient.GetBlobClient(blobItem.Name);
            blobClient.SetAccessTier(newAccessTier);
        }
    }
    
    private static AccessTier GetNewAccessTier(AccessTier? accessTier)
    {
        if (accessTier == AccessTier.Hot)
            return AccessTier.Cool;
        else if (accessTier == AccessTier.Cool)
            return AccessTier.Archive;
        else
            return AccessTier.Hot;
    }