Oefening: de clientbibliotheek configureren en initialiseren

Voltooid

De typische werkstroom voor apps die gebruikmaken van Azure Blob Storage is als volgt:

  1. Configuratie ophalen: laad bij het opstarten de configuratie van het opslagaccount, meestal een opslagaccount verbindingsreeks.

  2. Client initialiseren: gebruik de verbindingsreeks om de Azure Storage-clientbibliotheek te initialiseren. Met deze initialisatie worden de objecten gemaakt die de app gebruikt om te werken met de Blob Storage-API.

  3. Gebruik: Als u wilt werken op containers en blobs, voert u API-aanroepen uit met behulp van de clientbibliotheek.

De verbindingsreeks configureren

Voordat u uw app uitvoert, haalt u de verbindingsreeks op voor het opslagaccount dat u gebruikt. U kunt elke Azure-beheerinterface gebruiken om deze te verkrijgen, waaronder Azure Portal, De Azure CLI en Azure PowerShell. Wanneer u de web-app instelt om uw code aan het einde van deze module uit te voeren, gebruikt u de Azure CLI om de verbindingsreeks op te halen voor het opslagaccount dat u eerder hebt gemaakt.

Verbindingsreeksen voor opslagaccounts bevatten de accountsleutel. Houd rekening met de accountsleutel een geheim en sla het altijd veilig op. Hier slaat u de verbindingsreeks op in een App Service-app-instelling. App Service-app-instellingen zijn een veilige plek voor app-geheimen. Dit ontwerp biedt geen ondersteuning voor lokale ontwikkeling en is geen robuuste end-to-end oplossing.

Belangrijk

In dit codevoorbeeld wordt een verbindingsreeks gebruikt om toegang tot uw opslagaccount te autoriseren. Deze configuratie is bijvoorbeeld bedoeld. Verbindingsreeksen en toegangssleutels voor accounts moeten met voorzichtigheid worden gebruikt in de toepassingscode. Als uw accounttoegangssleutel verloren gaat of per ongeluk op een onveilige locatie is geplaatst, kan uw service kwetsbaar worden. Iedereen met de toegangssleutel kan aanvragen voor het opslagaccount autoriseren en heeft effectief toegang tot alle gegevens.

Voor optimale beveiliging raadt Microsoft aan om Microsoft Entra ID met beheerde identiteiten te gebruiken om aanvragen te autoriseren voor blob-, wachtrij- en tabelgegevens, indien mogelijk. Zie Toegang tot blobs autoriseren met behulp van Microsoft Entra-id voor meer informatie.

Het Blob Storage-objectmodel initialiseren

In de Azure Storage SDK voor .NET is het standaardpatroon voor het gebruik van Blob Storage als volgt:

  1. Instantieer een nieuw BlobServiceClient object en geef de verbindingsreeks op voor uw opslagaccount.

  2. Als u een BlobContainerClient, roept u de BlobServiceClient aan met GetBlobContainerClient de naam van de container waarmee u wilt communiceren of maken.

In code zien deze stappen er als volgt uit.

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

Niets uit deze initialisatiecode maakt aanroepen via het netwerk. Dit betekent dat sommige uitzonderingen die optreden vanwege onjuiste informatie pas later worden gegenereerd. Als er bijvoorbeeld een onjuist opgemaakte verbindingsreeks wordt opgegeven aan de constructor van de BlobServiceClient klasse, wordt er onmiddellijk een uitzondering gegenereerd. Als de verbindingsreeks echter verwijst naar een opslagaccount dat niet bestaat, wordt er geen uitzondering gegenereerd totdat u een bewerking probeert uit te voeren op het opslagaccount.

In de Azure Storage SDK voor Java bestaat het standaardpatroon voor het gebruik van Blob Storage uit de volgende stappen:

  1. Bouw een BlobServiceClient door een nieuw BlobServiceClientBuilder object te instantiëren met behulp van de verbindingsreeks voor uw opslagaccount.

  2. Haal een BlobContainerClient op door de getBlobContainerClient methode aan te roepen op de BlobServiceClientnaam van de container waarmee u wilt communiceren of maken.

In code zien deze stappen er als volgt uit.

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

Niets uit deze initialisatiecode maakt aanroepen via het netwerk. Dit betekent dat sommige uitzonderingen die optreden vanwege onjuiste informatie pas later worden gegenereerd. Als er bijvoorbeeld een onjuist opgemaakte verbindingsreeks wordt opgegevenBlobServiceClientBuilder, wordt er onmiddellijk een uitzondering gegenereerd. Als de verbindingsreeks echter verwijst naar een opslagaccount dat niet bestaat, wordt er geen uitzondering gegenereerd totdat u een bewerking probeert uit te voeren op het opslagaccount.

Containers maken bij het opstarten

Als u een container wilt maken wanneer uw app wordt gestart of wanneer de app voor het eerst probeert een container te gebruiken, roept u een BlobContainerClientaanroep CreateIfNotExistsAsync uit.

CreateIfNotExistsAsync genereert geen uitzondering als de container al bestaat, maar wel een netwerkaanroep naar Azure Blob Storage. Roep deze eenmalig aan tijdens de initialisatie, niet telkens wanneer u een container probeert te gebruiken.

Als u een container wilt maken wanneer uw app wordt gestart of wanneer deze voor het eerst probeert te gebruiken, roept u een BlobContainerClient aan om exists te controleren of er al een container bestaat. Als deze niet bestaat, roept createu het aan. Roep deze eenmalig aan tijdens de initialisatie, niet telkens wanneer u een container probeert te gebruiken.

Oefening

Kloon en verken de niet-voltooide app

  1. Kloon eerst de starter-app vanuit GitHub. Als u een kopie van de broncode wilt ophalen en deze wilt openen in de editor, voert u de volgende opdrachten uit in 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. Open in de editor de bestandscontrollers /FilesController.cs. Er is hier geen werk te doen, maar bekijk wat de app doet.

    Met deze controller implementeert u een API met drie acties:

    • Index: (GET /api/Files) retourneert een lijst met URL's, één voor elk bestand dat is geüpload. De front-end van de app roept deze methode aan om een lijst met hyperlinks naar de geüploade bestanden te maken.
    • Uploaden: (POST /api/Files) ontvangt een geüpload bestand en slaat het op.
    • Downloaden: (GET /api/Files/{filename}) downloadt een afzonderlijk bestand op naam.

    Elke methode maakt gebruik van een IStorage-instantie met de naam storage om zijn werk te doen. Er is een onvolledige implementatie van IStorage modellen/BlobStorage.cs om in te vullen.

Het NuGet-pakket toevoegen

  • Voeg een verwijzing toe naar de Azure Storage SDK. Voer de volgende opdrachten uit in Azure Shell CLI:

    dotnet add package Azure.Storage.Blobs
    dotnet restore
    

    Met deze opdracht zorgt u ervoor dat u de nieuwste versie van de Blob Storage-clientbibliotheek gebruikt.

Configureren

De configuratiewaarden die u nodig hebt, zijn het opslagaccount verbindingsreeks en de naam van de container die de app gebruikt om bestanden op te slaan. In deze module gaat u de app alleen uitvoeren in Azure-app Service. Volg de best practice voor App Service en sla de waarden op in app-instellingen van App Service. U doet dit wanneer u het App Service-exemplaar maakt. Er is niets wat u op dit moment hoeft te doen.

Als het gaat om het gebruik van de configuratie, bevat de starter-app de sanitair die u nodig hebt. De IOptions<AzureStorageConfig> constructorparameter in BlobStorage heeft twee eigenschappen: het opslagaccount verbindingsreeks en de naam van de container die uw app gebruikt om blobs op te slaan. Er is code in de methode waarmee Startup.cs de waarden uit de ConfigureServices configuratie worden geladen wanneer de app wordt gestart.

Initialiseren

  1. Open Modellen/BlobStorage.cs in de editor. Voeg boven aan het bestand de volgende using instructies toe om deze voor te bereiden op de code die u gaat toevoegen.

    using Azure;
    using Azure.Storage.Blobs;
    using Azure.Storage.Blobs.Models;
    
  2. Zoek de methode Initialize. Uw app roept deze methode aan wanneer deze voor het eerst wordt gebruikt BlobStorage . Als u nieuwsgierig bent, kunt u in Startup.cs kijken ConfigureServices hoe de oproep wordt uitgevoerd.

    Initialize is het punt waarop u uw container wilt maken als deze nog niet bestaat. Vervang de huidige implementatie door Initialize de volgende code en sla uw werk op met Ctrl+S.

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

Kloon en verken de niet-voltooide app

  1. Kloon eerst de starter-app vanuit GitHub. Als u een kopie van de broncode wilt ophalen en deze wilt openen in de editor, voert u de volgende opdrachten uit in 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. Open in de editor het bestand src/main/java/com/microsoft/azure/samples/jsf/IndexBean.java. Er is hier geen werk te doen, maar bekijk wat de app doet.

    Deze aanvraag scoped bean implementeert drie acties die worden gebruikt door src/main/webapp/index.xhtml Java Server Faces (JSF) pagina:

    • listFileNames: retourneert een lijst met bestandsnamen, één voor elk bestand dat is geüpload. De pagina index.xhtml roept deze methode aan om een lijst met hyperlinks naar de geüploade bestanden te maken.
    • uploaden: ontvangt een geüpload bestand en slaat het op. De bestandsinhoud en metagegevens worden door het JSF-framework in de uploadedFile eigenschap opgenomen.
    • download: downloadt een afzonderlijk bestand op naam.

    Om het werk te doen, gebruikt elke methode een exemplaar met de Storage naam storage. Er is een onvolledige implementatie van Storage src/main/java/com/microsoft/azure/samples/service/BlobStorage.java om in te vullen.

De Naslaginformatie over de Azure Storage-SDK voor Java toevoegen

U wordt aangeraden de Azure BOM te gebruiken om Azure-clientbibliotheken toe te voegen aan het project. Het biedt een eenvoudige en elegante manier om te organiseren met behulp van meerdere Azure-clientbibliotheken en tegelijkertijd minimale afhankelijkheidsconflicten te garanderen.

  1. Open het bestand in de editor pom.xml.

  2. Als u Azure BOM wilt toevoegen aan het project, voegt u de volgende dependencyManagement sectie toe onder de project XML-tag.

    <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. Als u Azure Storage SDK voor Java wilt toevoegen, voegt u het volgende dependency toe aan de project/dependencies xml-sectie.

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

Configureren

De configuratiewaarden die u nodig hebt, zijn het opslagaccount verbindingsreeks en de naam van de container die de app gebruikt om bestanden op te slaan. In deze module gaat u de app alleen uitvoeren in Azure-app Service. Volg de best practice voor App Service en sla de waarden op in app-instellingen van App Service. Dit doet u wanneer we het App Service-exemplaar maken. Er is niets wat u op dit moment hoeft te doen.

Als het gaat om het gebruik van de configuratie, worden de App Service-app-instellingen als omgevingsvariabelen doorgegeven aan de app-code. U leest ze in de initialisatiecode.

Initialiseren

  1. Open in de editor src/main/java/com/microsoft/azure/samples/service/BlobStorage.java. Voeg boven aan het bestand de volgende import instructies toe om deze voor te bereiden op de code die u gaat toevoegen.

    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. Voeg een klasse-eigenschap toe aan de BlobStorage klasse om de BlobContainerClient verwijzing vast te houden.

    private BlobContainerClient blobContainerClient;
    

    Tip

    Azure-clients zijn staatloos en thread-veilig. Het wordt aanbevolen om waar van toepassing hun exemplaren in de cache op te cachen. De app waaraan u werkt, maakt bijvoorbeeld gebruik van één container met een constante naam. Daarom kunt u de app het beste opslaan in het bereik van de levensduur van de app. BlobStorage@Singleton wordt daarom aanbevolen om de verwijzing in het BlobContainerClient veld op te slaan.

  3. Zoek de init methode met @PostConstruct aantekening. Uw app roept deze methode aan nadat het BlobStorage exemplaar is gemaakt en voordat deze voor het eerst wordt gebruikt.

    init is waar u uw container maakt als deze nog niet bestaat. Vervang de huidige implementatie van init door de volgende code en sla uw werk op.

    @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();
        }
    }