Exercice : Configurer et initialiser la bibliothèque de client
Voici typiquement le workflow pour les applications qui utilisent le Stockage Blob Azure :
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.
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.
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 un secret et stockez-la toujours en lieu sûr. 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.
Important
Cet exemple de code utilise une chaîne de connexion pour autoriser l’accès à votre compte de stockage. Cette configuration est utilisée à titre d’exemple. Les chaînes de connexion et les clés d’accès au compte doivent être utilisées avec précaution dans le code d’une application. Si votre clé d’accès de compte est perdue ou accidentellement placée dans un emplacement non sécurisé, votre service peut devenir vulnérable. Toute personne disposant de la clé d’accès est en mesure d’autoriser les demandes sur le compte de stockage et a accès efficacement à toutes les données.
Pour une sécurité optimale, Microsoft recommande d’utiliser quand c’est possible Microsoft Entra ID avec des identités managées pour autoriser les requêtes sur les données de blob, de file d’attente et de table. Pour plus d’informations, consultez Autoriser l’accès aux objets blob à l’aide de Microsoft Entra ID.
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 :
Instanciez un nouvel objet
BlobServiceClient
et fournissez la chaîne de connexion à votre compte de stockage.Pour obtenir un
BlobContainerClient
, appelezGetBlobContainerClient
surBlobServiceClient
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 :
Générez un
BlobServiceClient
en instanciant un nouvel objetBlobServiceClientBuilder
à l’aide de la chaîne de connexion à votre compte de stockage.Pour obtenir un
BlobContainerClient
, appelez la méthodegetBlobContainerClient
surBlobServiceClient
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 = 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
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 .
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éestorage
. Il existe une implémentation incomplète desIStorage
modèles/objets blob Stockage.cs à remplir.- Index: (
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
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;
Localisez la méthode
Initialize
. Votre application appelle cette méthode lorsqu’elle utiliseBlobStorage
pour la première fois. Si vous êtes curieux, vous pouvez consulterConfigureServices
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 deInitialize
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
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 .
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éestorage
. Il existe une implémentation incomplète deStorage
src/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.
Dans l’éditeur, ouvrez le fichier pom.xml.
Pour ajouter Azure BOM au projet, ajoutez la section
dependencyManagement
suivante sous la balise XMLproject
.<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>
Pour ajouter le kit de développement logiciel (SDK) Stockage Azure pour Java, ajoutez la section
dependency
suivante à la section XMLproject/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
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;
Ajoutez une propriété de classe dans la classe
BlobStorage
pour y placer la référenceBlobContainerClient
.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érenceBlobContainerClient
dans son champ est donc recommandé.Recherchez la méthode
init
avec l’annotation@PostConstruct
. Votre application appelle cette méthode une fois que l’instance deBlobStorage
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 deinit
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(); } }