Exercice : Configurer et initialiser la bibliothèque de client

Effectué

Voici typiquement le workflow pour les applications qui utilisent le Stockage Blob Azure :

  1. Récupérer la configuration : Au démarrage, chargez la configuration du compte de stockage, généralement une chaîne de connexion de compte de stockage.

  2. Initialiser le client : Pour initialiser la bibliothèque de client Stockage Azure, utilisez la chaîne de connexion. Cette initialisation a pour effet de créer les objets que l’application utilise pour travailler avec l’API de stockage d’objets blob.

  3. Utiliser : Pour opérer sur des conteneurs et objets blob, effectuez des appels d’API en utilisant la bibliothèque de client.

Configurer votre chaîne de connexion

Avant d’exécuter votre application, obtenez la chaîne de connexion du compte de stockage à utiliser. Vous pouvez utiliser n’importe quelle interface de gestion Azure pour l’obtenir, notamment le portail Azure, Azure CLI et Azure PowerShell. Quand vous allez configurer l’application web pour exécuter votre code vers la fin de ce module, vous utilisez l’interface Azure CLI afin d’obtenir la chaîne de connexion du compte de stockage que vous avez créé.

Les chaînes de connexion de compte de stockage comprennent la clé de compte. Considérez la clé de compte comme secret. Stockez-le en toute sécurité. Ici, vous stockez la chaîne de connexion dans un paramètre d’application App Service. Les paramètres d’application App Service constituent un emplacement sécurisé pour les secrets d’application. Cette conception ne prend pas en charge le développement local et n’est pas une solution robuste de bout en bout.

Avertissement

Ne placez pas les clés de compte de stockage dans du code ou dans des fichiers de configuration non protégés. Les clés de compte de stockage permettent un accès complet à votre compte de stockage. Une fuite de clé peut entraîner des dommages irréversibles et alourdir les factures. Pour des conseils de stockage et de récupération suite à une fuite de clé, consultez la section Pour aller plus loin à la fin de ce module.

Initialiser le modèle objet de stockage d’objets blob

Dans le SDK Stockage Azure pour .NET, le modèle standard pour utiliser le Stockage Blob est le suivant :

  1. Instanciez un nouvel objet BlobServiceClient et fournissez la chaîne de connexion à votre compte de stockage.

  2. Pour obtenir un BlobContainerClient, appelez GetBlobContainerClient sur BlobServiceClient avec le nom du conteneur avec lequel vous souhaitez interagir ou que vous voulez créer.

Dans le code, ces étapes ressemblent à ceci.

BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName);

Ce code d’initialisation n’effectue aucun appel sur le réseau. Ce fait signifie que si des exceptions se produisent suite à des informations incorrectes, elles ne sont pas levées dans l’immédiat. Par exemple, si une chaîne de connexion incorrectement mise en forme est fournie au constructeur de la classe BlobServiceClient, une exception est immédiatement levée. En revanche, si la chaîne de connexion pointe vers un compte de stockage qui n’existe pas, aucune exception n’est levée tant que vous n’avez pas tenté une opération sur le compte de stockage.

Dans le SDK Stockage Azure pour Java, le modèle standard pour l’utilisation de Stockage Blob comprend les étapes suivantes :

  1. Générez un BlobServiceClient en instanciant un nouvel objet BlobServiceClientBuilder à l’aide de la chaîne de connexion à votre compte de stockage.

  2. Pour obtenir un BlobContainerClient, appelez la méthode getBlobContainerClient sur BlobServiceClientavec le nom du conteneur avec lequel vous souhaitez interagir ou que vous voulez créer.

Dans le code, ces étapes ressemblent à ceci.

BlobServiceClient blobServiceClient = BlobServiceClientBuilder()
    .connectionString(connectionString)
    .buildClient();
BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName);

Ce code d’initialisation n’effectue aucun appel sur le réseau. Ce fait signifie que si des exceptions se produisent suite à des informations incorrectes, elles ne sont pas levées dans l’immédiat. Par exemple, si une chaîne de connexion incorrectement mise en forme est fournie au BlobServiceClientBuilder, une exception est immédiatement levée. En revanche, si la chaîne de connexion pointe vers un compte de stockage qui n’existe pas, aucune exception n’est levée tant que vous n’avez pas tenté une opération sur le compte de stockage.

Créer des conteneurs au démarrage

Pour créer un conteneur quand votre application démarre ou quand elle tente d’utiliser un conteneur pour la première fois, appelez CreateIfNotExistsAsync sur un BlobContainerClient.

CreateIfNotExistsAsync ne lève pas d’exception si le conteneur existe déjà, mais effectue un appel réseau à Stockage Blob Azure. Appelez-le une seule fois pendant l’initialisation et non chaque fois que vous essayez d’utiliser un conteneur.

Pour créer un conteneur quand votre application démarre ou quand elle tente pour la première fois de l’utiliser, appelez exists sur un BlobContainerClient pour vérifier si le conteneur existe déjà. S’il n’existe pas, appelez create. Appelez-le une seule fois pendant l’initialisation et non chaque fois que vous essayez d’utiliser un conteneur.

Exercice

Cloner et explorer l’application inachevée

  1. Tout d’abord, cloner l’application de démarrage à partir de GitHub. Pour obtenir une copie du code source et l’ouvrir dans l’éditeur, exécutez les commandes suivante dans Azure Shell CLI :

    git clone https://github.com/MicrosoftDocs/mslearn-store-data-in-azure.git
    cd mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start
    code .
    
  2. Dans l’éditeur, ouvrez le fichier Controllers/FilesController.cs. Il n’y a rien à faire ici, mais nous observons ce que fait l’application.

    Ce contrôleur implémente une API avec trois actions :

    • Index: (GET /api/Files) renvoie une liste d’URL, une pour chaque fichier chargé. Le serveur frontal d’application appelle cette méthode pour générer une liste de liens hypertexte vers les fichiers téléchargés.
    • Chargement : (POST /api/Files) reçoit un fichier chargé et l’enregistre.
    • Téléchargement : (GET /api/Files/{filename}) télécharge un fichier individuel en fonction de son nom.

    Pour exécuter sa tâche, chaque méthode utilise une instance de IStorage nommée storage. Il existe une implémentation incomplète des IStoragemodèles/objets blob Stockage.cs à remplir.

Ajouter le package NuGet

  • Ajoutez une référence au SDK Stockage Azure. Exécutez les commandes suivantes dans Azure Shell CLI :

    dotnet add package Azure.Storage.Blobs
    dotnet restore
    

    C commande permet de vous assurer que vous utilisez la version la plus récente de la bibliothèque de client Stockage Blob.

Configurer

Les valeurs de configuration dont vous avez besoin sont la chaîne de connexion du compte de stockage et le nom du conteneur où l’application stocke les fichiers. Dans ce module, vous allez uniquement exécuter l’application dans Azure App Service. Suivez les bonnes pratiques App Service et stockez les valeurs dans les paramètres d’application App Service. Pour ce faire, lorsque vous créez l’instance App Service. Il n’y a rien à faire pour le moment.

Votre application de démarrage est paramétrée pour utiliser la configuration. Le paramètre du constructeur IOptions<AzureStorageConfig> dans BlobStorage a deux propriétés : la chaîne de connexion de compte de stockage et le nom du conteneur où l’application stocke les objets blob. Le code contenu dans la méthode ConfigureServices de Startup.cs charge les valeurs de la configuration au démarrage de l’application.

Initialiser

  1. Dans l’éditeur, ouvrez Models/Blob Stockage.cs. Ajoutez les instructions using suivantes au début du fichier afin de le préparer pour le code que vous allez ajouter.

    using Azure;
    using Azure.Storage.Blobs;
    using Azure.Storage.Blobs.Models;
    
  2. Localisez la méthode Initialize. Votre application appelle cette méthode lorsqu’elle utilise BlobStorage pour la première fois. Si vous êtes curieux, vous pouvez consulter ConfigureServices dans Startup.cs pour voir comment l’appel est effectué.

    Initialize est l’emplacement où vous souhaitez créer votre conteneur, s’il n’existe pas déjà. Remplacez l’implémentation actuelle de Initialize par le code suivant, puis enregistrez votre travail en utilisant CTRL+S.

    public Task Initialize()
    {
        BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString);
        BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName);
        return containerClient.CreateIfNotExistsAsync();
    }
    

Cloner et explorer l’application inachevée

  1. Tout d’abord, cloner l’application de démarrage à partir de GitHub. Pour obtenir une copie du code source et l’ouvrir dans l’éditeur, exécutez les commandes suivante dans Azure Shell CLI :

    git clone https://github.com/MicrosoftDocs/mslearn-store-data-in-azure.git
    cd mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start
    code .
    
  2. Dans l’éditeur, ouvrez le fichier src/main/java/com/microsoft/azure/samples/jsf/IndexBean.java. Il n’y a rien à faire ici, mais nous observons ce que fait l’application.

    Ce bean délimité à la requête implémente trois actions qui sont utilisées par la page src/main/webapp/index.xhtml JSF (Java Server Faces) :

    • listFileNames : retourne une liste de noms de fichier, un pour chaque fichier chargé. La page index.xhtml appelle cette méthode pour générer une liste des liens hypertexte vers les fichiers chargés.
    • chargement : reçoit un fichier chargé et l’enregistre. Le contenu et les métadonnées du fichier sont injectés dans la propriété uploadedFile par l’infrastructure JSF.
    • download : télécharge un fichier individuel en fonction de son nom.

    Pour faire ce travail, chaque méthode utilise une instance de Storage nommée storage. Il existe une implémentation incomplète de Storagesrc/main/java/com/microsoft/azure/samples/service/Blob Stockage.java à remplir.

Ajouter la référence du SDK Stockage Azure pour Java

Nous vous recommandons d’utiliser azure BOM pour ajouter des bibliothèques clientes Azure au projet. Il offre un moyen simple et élégant d’orchestrer l’utilisation de plusieurs bibliothèques clientes Azure tout en garantissant un nombre minimal de conflits de dépendance.

  1. Dans l’éditeur, ouvrez le fichier pom.xml.

  2. Pour ajouter Azure BOM au projet, ajoutez la section dependencyManagement suivante sous la balise XML project.

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure</groupId>
          <artifactId>azure-sdk-bom</artifactId>
          <version>1.0.6</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    
  3. Pour ajouter le kit de développement logiciel (SDK) Stockage Azure pour Java, ajoutez la section dependency suivante à la section XML project/dependencies.

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-blob</artifactId>
    </dependency>
    

Configurer

Les valeurs de configuration dont vous avez besoin sont la chaîne de connexion du compte de stockage et le nom du conteneur où l’application stocke les fichiers. Dans ce module, vous allez uniquement exécuter l’application dans Azure App Service. Suivez les bonnes pratiques App Service et stockez les valeurs dans les paramètres d’application App Service. Pour ce faire, lorsque nous créons l’instance App Service. Il n’y a rien à faire pour le moment.

En ce qui concerne l’utilisation de la configuration, les paramètres de l’application App Service sont passés en tant que variables d’environnement au code de l’application. Vous les lisez dans le code d’initialisation.

Initialize

  1. Dans l’éditeur, ouvrez src/main/java/com/microsoft/azure/samples/service/Blob Stockage.java. Ajoutez les instructions import suivantes au début du fichier afin de le préparer pour le code que vous allez ajouter.

    import java.util.stream.Collectors;
    
    import com.azure.storage.blob.BlobClient;
    import com.azure.storage.blob.BlobContainerClient;
    import com.azure.storage.blob.BlobServiceClient;
    import com.azure.storage.blob.BlobServiceClientBuilder;
    import com.azure.storage.blob.models.BlobItem;
    
  2. Ajoutez une propriété de classe dans la classe BlobStorage pour y placer la référence BlobContainerClient.

    private BlobContainerClient blobContainerClient;
    

    Conseil

    Les clients Azure sont sans état et thread-safe. Il est recommandé de mettre en cache leurs instances là où c’est applicable. Par exemple, l’application sur laquelle vous travaillez utilise un seul conteneur avec un nom de constante : il est donc préférable de le mettre en cache dans l’étendue de la durée de vie de l’application. BlobStorage est annoté avec @Singleton. Le stockage de la référence BlobContainerClient dans son champ est donc recommandé.

  3. Recherchez la méthode init avec l’annotation @PostConstruct. Votre application appelle cette méthode une fois que l’instance de BlobStorage a été créée et avant d’être utilisée pour la première fois.

    init est l’emplacement où créer votre conteneur, s’il n’existe pas déjà. Remplacez l’implémentation actuelle de init par le code suivant, puis enregistrez votre travail.

    @PostConstruct
    private void init() {
        String connectionString = System.getenv("STORAGE_CONNECTION_STRING");
        String containerName = System.getenv("STORAGE_CONTAINER_NAME");
        BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
            .connectionString(connectionString)
            .buildClient();
        blobContainerClient = blobServiceClient.getBlobContainerClient(containerName);
        if (!blobContainerClient.exists()) {
            blobContainerClient.create();
        }
    }