Exercice : Gérer le stockage à plusieurs niveaux avec des applications ASP.NET Core

Effectué

Vous allez maintenant tester quelques exemples de code .NET pour récupérer et modifier les niveaux de quelques exemples d’objets blob du service Stockage Azure. Vous allez créer un compte BlobStorage et définir le compte sur Sporadique. Puis, vous allez charger des données et utiliser l’application pour modifier les niveaux de stockage.

Télécharger le code et les exemples de données

Lors de cette première étape, vous allez télécharger le code source et les exemples de données à partir de votre stockage Cloud Shell.

  1. Exécutez les commandes suivantes dans Cloud Shell pour télécharger le code source et les exemples de données dans le dossier storageapp de votre stockage Cloud Shell :

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

Utiliser CLI pour créer un compte de stockage d’objets blob

Vous allez maintenant créer un compte BlobStorage et récupérer la clé de compte de stockage.

  1. Exécutez les commandes suivantes dans Cloud Shell pour créer un compte de stockage BlobStorage défini sur Sporadique. Remplacez <random string> dans le code suivant par une chaîne de lettres ou de chiffres :

    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. Exécutez la commande suivante dans Cloud Shell pour récupérer la clé de stockage du compte et stockez-la dans une variable :

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

Créer un conteneur et charger des données

Lors de cette étape, vous allez créer un conteneur d’objets blob et trois objets blob, chacun contenant des exemples de données.

  1. Exécutez la commande suivante dans Cloud Shell pour créer un conteneur :

    az storage container create \
        --name blobcontainer \
        --account-name $AZURE_STORAGE_ACCOUNT \
        --account-key $AZURE_STORAGE_KEY
    
  2. Exécutez les commandes suivantes dans Cloud Shell pour créer des objets blob avec des exemples de données :

    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
    

Définir le niveau de chaque objet blob

Lors de cette étape, vous allez définir le niveau d’accès de chaque objet blob.

  1. Exécutez la commande suivante dans Cloud Shell pour définir blob1 sur le niveau Archive :

    az storage blob set-tier \
        --container-name blobcontainer \
        --name blob1 \
        --tier Archive
    
  2. Exécutez la commande suivante dans Cloud Shell pour définir blob2 sur le niveau Froid :

    az storage blob set-tier \
        --container-name blobcontainer \
        --name blob2 \
        --tier Cool
    
  3. Exécutez la commande suivante dans Cloud Shell pour définir blob3 sur le niveau Chaud :

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

Gérer les niveaux de stockage dans le code

Vous êtes maintenant prêt à déployer et tester du code. Tout d’abord, vous allez définir les variables d’environnement dont l’exemple d’application a besoin. Vous allez ensuite générer et exécuter l’exemple d’application (ignorez les avertissements concernant le package Microsoft.Azure.KeyVault.Core).

  1. Exécutez les commandes suivantes dans Cloud Shell pour stocker les variables d’environnement que l’application utilise :

    export STORAGE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP -n $AZURE_STORAGE_ACCOUNT --output tsv`
    export CONTAINER_NAME=blobcontainer
    
  2. Exécutez la commande suivante dans Cloud Shell pour générer et exécuter l’application ManageStorageTiers :

    cd ManageStorageTiers
    dotnet build
    dotnet run
    
  3. L’application ManageStorageTiers se connecte maintenant à votre stockage d’objets blob et interroge les trois objets blob nommés blob1, blob2 et blob3. Elle modifie ensuite le niveau de stockage de ces trois objets blob et interroge à nouveau le niveau de stockage de chaque objet blob pour vérifier les modifications apportées. Le niveau Archive n’aura pas été modifié en raison de la latence de réhydratation.

Examiner le code d’application

Lors de cette dernière étape, vous allez examiner le code utilisé par l’application ManageStorageTiers pour gérer et modifier les niveaux d’accès.

  1. Dans Cloud Shell, entrez code ., puis utilisez l’éditeur pour ouvrir ManageStorageTiers\Program.cs.

  2. Ce code affiche les niveaux de stockage de tous les objets blob d’un conteneur :

    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. Les méthodes suivantes fonctionnent ensemble pour mettre à jour le niveau de stockage d’un ensemble d’objets blob présents dans un conteneur :

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