Esercizio - Gestire l'archiviazione a livelli tramite app ASP.NET Core

Completato

In questa unità si testerà del codice .NET di esempio per recuperare e modificare il livello di archiviazione per alcuni BLOB di esempio di Archiviazione di Azure. Si creerà un nuovo account BlobStorage e si imposterà l'account sul livello di accesso sporadico. Successivamente, si caricheranno dei dati e si userà l'app per modificare i livelli di archiviazione.

Scaricare il codice e i dati di esempio

In questo primo passaggio si scaricheranno il codice sorgente e i dati di esempio nello spazio di archiviazione Cloud Shell.

  1. Eseguire i comandi seguenti in Cloud Shell per scaricare i dati di esempio e il codice sorgente nella cartella storageapp dello spazio di archiviazione Cloud Shell:

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

Usare l'interfaccia della riga di comando per creare un nuovo account di archiviazione BLOB

Si creerà ora un nuovo account BlobStorage e si recupererà la chiave di archiviazione dell'account.

  1. Eseguire i comandi seguenti in Cloud Shell per creare un nuovo account BlobStorage impostato sul livello di accesso sporadico. Sostituire <random string> nel codice seguente con una stringa di lettere o numeri:

    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. Eseguire il comando seguente in Cloud Shell per recuperare la chiave di archiviazione per l'account e archiviarla in una variabile:

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

Creare un contenitore e caricare i dati

In questo passaggio si creeranno un contenitore BLOB e tre BLOB, ognuno dei quali contenente dati di esempio.

  1. Eseguire il comando seguente in Cloud Shell per creare un nuovo contenitore:

    az storage container create \
        --name blobcontainer \
        --account-name $AZURE_STORAGE_ACCOUNT \
        --account-key $AZURE_STORAGE_KEY
    
  2. Eseguire i comandi seguenti in Cloud Shell per caricare i dati di esempio nei BLOB:

    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
    

Impostare il livello per ogni BLOB

In questo passaggio si imposterà il livello di accesso per ogni BLOB.

  1. Eseguire i comandi seguenti in Cloud Shell per impostare blob1 sul livello di accesso archivio:

    az storage blob set-tier \
        --container-name blobcontainer \
        --name blob1 \
        --tier Archive
    
  2. Eseguire i comandi seguenti in Cloud Shell per impostare blob2 sul livello di accesso sporadico:

    az storage blob set-tier \
        --container-name blobcontainer \
        --name blob2 \
        --tier Cool
    
  3. Eseguire i comandi seguenti in Cloud Shell per impostare blob3 sul livello di accesso frequente:

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

Gestire i livelli di archiviazione nel codice

A questo punto si è pronti per distribuire e testare il codice. Innanzitutto si imposteranno le variabili di ambiente necessarie per l'app di esempio. Successivamente, si creerà ed eseguirà l'app di esempio. Ignorare gli avvisi sul pacchetto Microsoft.Azure.KeyVault.Core.

  1. Eseguire i comandi seguenti in Cloud Shell per archiviare le variabili di ambiente usate dall'app:

    export STORAGE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP -n $AZURE_STORAGE_ACCOUNT --output tsv`
    export CONTAINER_NAME=blobcontainer
    
  2. Eseguire il comando seguente in Cloud Shell per compilare ed eseguire l'app ManageStorageTiers:

    cd ManageStorageTiers
    dotnet build
    dotnet run
    
  3. L'app ManageStorageTiers si connette al servizio di archiviazione BLOB ed esegue query sui tre BLOB denominati blob1, blob2 e blob3. Modifica quindi il livello di archiviazione di tutti e tre i BLOB ed ripete le query in ogni livello di archiviazione del BLOB per verificare la modifica. Il livello di accesso archivio sarà rimasto invariato, a causa della latenza di riattivazione.

Esaminare il codice dell'app

In quest'ultimo passaggio si esaminerà il codice usato dall'app ManageStorageTiers per gestire e modificare i livelli di accesso.

  1. In Cloud Shell, immettere code ., quindi usare l'editor per aprire ManageStorageTiers\Program.cs.

  2. Questo codice visualizza i livelli di archiviazione per tutti i BLOB in un contenitore:

    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. I metodi seguenti interagiscono per aggiornare il livello di archiviazione per un set di BLOB in un contenitore:

    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;
    }