Cvičení – konfigurace a inicializace knihovny klienta

Dokončeno

Typický pracovní postup pro aplikace, které používají službu Azure Blob Storage, je následující:

  1. Načtení konfigurace: Při spuštění načtěte konfiguraci účtu úložiště, obvykle účet úložiště připojovací řetězec.

  2. Inicializace klienta: K inicializaci klientské knihovny Azure Storage použijte připojovací řetězec. Tato inicializace vytvoří objekty, které aplikace používá pro práci s rozhraním API služby Blob Storage.

  3. Použití: Pokud chcete pracovat s kontejnery a objekty blob, proveďte volání rozhraní API pomocí klientské knihovny.

Konfigurace připojovacího řetězce

Než spustíte aplikaci, získejte připojovací řetězec pro účet úložiště, který používáte. K jeho získání můžete použít libovolné rozhraní pro správu Azure, včetně webu Azure Portal, Azure CLI a Azure PowerShellu. Když nastavíte webovou aplikaci tak, aby spouštěla váš kód na konci tohoto modulu, pomocí Azure CLI získejte připojovací řetězec pro účet úložiště, který jste vytvořili dříve.

Připojovací řetězec účtu úložiště zahrnuje klíč účtu. Vezměte v úvahu klíč účtu jako tajný klíč. Bezpečně ho uložte. Tady uložíte připojovací řetězec v nastavení aplikace app Service. Nastavení aplikace App Service je bezpečné místo pro tajné kódy aplikací. Tento návrh nepodporuje místní vývoj a není robustním uceleným řešením.

Upozorňující

Neumísťujte klíče účtu úložiště do kódu ani do nechráněných konfiguračních souborů. Klíče účtu úložiště umožňují plný přístup k vašemu účtu úložiště. Prozrazení klíče může vést k nenapravitelným škodám a vysokým fakturám. Pokyny k úložišti a rady o tom, jak se zotavit z nevraceného klíče, najdete v části Další čtení na konci tohoto modulu.

Inicializace objektového modelu úložiště objektů blob

V sadě Azure Storage SDK pro .NET je standardní vzor pro použití úložiště objektů blob následující:

  1. Vytvořte instanci nového BlobServiceClient objektu a poskytněte připojovací řetězec vašemu účtu úložiště.

  2. Pokud chcete získat BlobContainerClient, zavolejte GetBlobContainerClientBlobServiceClient na název kontejneru, se kterým chcete pracovat nebo vytvořit.

V kódu tento postup vypadá takto.

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

Tento inicializační kód neprovádí žádná volání přes síť. Tato skutečnost znamená, že některé výjimky, ke kterým dochází kvůli nesprávným informacím, nejsou vyvolány až později. Pokud je například nesprávně formátovaná připojovací řetězec zadána konstruktoru BlobServiceClient třídy, je vyvolána výjimka okamžitě. Pokud ale připojovací řetězec odkazuje na účet úložiště, který neexistuje, nevyvolá se žádná výjimka, dokud se nepokusíte o operaci s účtem úložiště.

V sadě Azure Storage SDK pro Javu se standardní vzor pro použití služby Blob Storage skládá z následujících kroků:

  1. BlobServiceClient Vytvořte instanci nového BlobServiceClientBuilder objektu pomocí připojovací řetězec k vašemu účtu úložiště.

  2. BlobContainerClient Získejte metodu getBlobContainerClient voláním metody BlobServiceClients názvem kontejneru, se kterým chcete pracovat nebo vytvořit.

V kódu tento postup vypadá takto.

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

Tento inicializační kód neprovádí žádná volání přes síť. Tato skutečnost znamená, že některé výjimky, ke kterým dochází kvůli nesprávným informacím, nejsou vyvolány až později. Pokud je například nesprávně formátovaná připojovací řetězec zadána , BlobServiceClientBuilderje vyvolána výjimka okamžitě. Pokud ale připojovací řetězec odkazuje na účet úložiště, který neexistuje, nevyvolá se žádná výjimka, dokud se nepokusíte o operaci s účtem úložiště.

Vytvoření kontejnerů při spuštění

Pokud chcete vytvořit kontejner při spuštění aplikace nebo když se aplikace poprvé pokusí použít kontejner, zavolejte CreateIfNotExistsAsync na BlobContainerClient.

CreateIfNotExistsAsync nevyvolá výjimku, pokud kontejner již existuje, ale provede síťové volání do služby Azure Blob Storage. Volání proveďte jednou během inicializace, neprovádějte ho při každém pokusu o použití kontejneru.

Pokud chcete vytvořit kontejner při spuštění aplikace nebo při prvním pokusu o jeho použití, zavolejte exists a BlobContainerClient zkontrolujte, jestli už kontejner existuje. Pokud neexistuje, zavolejte create. Volání proveďte jednou během inicializace, neprovádějte ho při každém pokusu o použití kontejneru.

Cvičení

Klonování a prozkoumání nedokončené aplikace

  1. Nejprve naklonujte úvodní aplikaci z GitHubu. Pokud chcete získat kopii zdrojového kódu a otevřít ji v editoru, spusťte v Azure Shell CLI následující příkazy:

    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. V editoru otevřete soubory Controllers/FilesController.cs. Tady není žádná práce, ale rychle se podívejte, co aplikace dělá.

    Tento kontroler implementuje rozhraní API se třemi akcemi:

    • Index: (GET /api/Files) vrátí seznam adres URL, jeden pro každý nahraný soubor. Front-end aplikace volá tuto metodu za účelem vypsání seznamu hypertextových odkazů na nahrané soubory.
    • Nahrání: (POST /api/Files) přijme nahraný soubor a uloží ho.
    • Stáhnout: (GET /api/Files/{filename}) stáhne jednotlivé soubory podle názvu.

    Každá metoda k této práci používá instanci IStorage s názvem storage. V souboru Models/BlobStorage.cs je neúplná implementace IStorage, která se má vyplnit.

Přidejte balíček NuGet .

  • Přidejte odkaz na sadu SDK služby Azure Storage. V Azure Shell CLI spusťte následující příkazy:

    dotnet add package Azure.Storage.Blobs
    dotnet restore
    

    Tento příkaz zajistí, že používáte nejnovější verzi klientské knihovny Blob Storage.

Konfigurace

Hodnoty konfigurace, které potřebujete, jsou připojovací řetězec účtu úložiště a název kontejneru, který aplikace používá k ukládání souborů. V tomto modulu spustíte aplikaci jenom ve službě Aplikace Azure Service. Postupujte podle osvědčených postupů služby App Service a uložte hodnoty v nastavení aplikace služby App Service. Uděláte to při vytváření instance služby App Service. V tuto chvíli nemusíte dělat nic.

Pokud jde o použití konfigurace, obsahuje úvodní aplikace potřebné instalatéry. Parametr IOptions<AzureStorageConfig>BlobStorage konstruktoru má dvě vlastnosti: účet úložiště připojovací řetězec a název kontejneru, který vaše aplikace používá k ukládání objektů blob. V metoděStartup.cs, která načítá hodnoty z konfigurace při spuštění aplikace, je kódConfigureServices.

Inicializace

  1. V editoru otevřete Models/BlobStorage.cs. V horní části souboru přidejte následující using příkazy, které ho připraví na kód, který chcete přidat.

    using Azure;
    using Azure.Storage.Blobs;
    using Azure.Storage.Blobs.Models;
    
  2. Vyhledejte metodu Initialize. Aplikace volá tuto metodu při prvním použití BlobStorage . Pokud vás zajímá, můžete se podívat ConfigureServices na startup.cs a podívat se, jak se volání provádí.

    Initialize – zde vytvoříte kontejner, pokud ještě neexistuje. Nahraďte aktuální implementaci Initialize následujícím kódem a uložte práci pomocí ctrl+S.

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

Klonování a prozkoumání nedokončené aplikace

  1. Nejprve naklonujte úvodní aplikaci z GitHubu. Pokud chcete získat kopii zdrojového kódu a otevřít ji v editoru, spusťte v Azure Shell CLI následující příkazy:

    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. V editoru otevřete soubor src/main/java/com/microsoft/azure/samples/jsf/IndexBean.java. Tady není žádná práce, ale rychle se podívejte, co aplikace dělá.

    Tato požadovaná bean implementuje tři akce, které používají stránky src/main/webapp/index.xhtml Java Server Faces (JSF):

    • listFileNames: vrátí seznam názvů souborů, jeden pro každý nahraný soubor. Stránka index.xhtml volá tuto metodu k vytvoření seznamu hypertextových odkazů na nahrané soubory.
    • upload: přijme nahraný soubor a uloží ho. Obsah souboru a metadata se vloží do uploadedFile vlastnosti rozhraní JSF.
    • download: stáhne jednotlivé soubory podle názvu.

    K provedení své práce, každá metoda používá Storage instanci s názvem storage. V souboru src/main/java/com/microsoft/azure/samples/service/BlobStorage.java je neúplná implementace Storage, která se má vyplnit.

Přidání referenčních informací k sadě Azure Storage SDK pro Javu

K přidání klientských knihoven Azure do projektu doporučujeme použít kusovník Azure. Poskytuje jednoduchý a elegantní způsob orchestrace pomocí více klientských knihoven Azure a zároveň zajišťuje minimální konflikty závislostí.

  1. V editoru otevřete soubor pom.xml.

  2. Pokud chcete do projektu přidat kusovník Azure, přidejte do značky project XML následující dependencyManagement část.

    <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. Pokud chcete přidat sadu Azure Storage SDK pro Javu, přidejte do project/dependencies části XML následující dependency kód.

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

Konfigurace

Hodnoty konfigurace, které potřebujete, jsou účet úložiště připojovací řetězec a název kontejneru, který aplikace používá k ukládání souborů. V tomto modulu spustíte aplikaci jenom ve službě Aplikace Azure Service. Postupujte podle osvědčených postupů služby App Service a uložte hodnoty v nastavení aplikace služby App Service. Uděláte to při vytváření instance služby App Service. V tuto chvíli nemusíte dělat nic.

Pokud jde o použití konfigurace, předají se nastavení aplikace App Service jako proměnné prostředí kódu aplikace. Čtete je v inicializačním kódu.

Inicializace

  1. V editoru otevřete soubor src/main/java/com/microsoft/azure/samples/service/BlobStorage.java. V horní části souboru přidejte následující import příkazy, které ho připraví na kód, který chcete přidat.

    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. Přidejte do BlobStorage třídy vlastnost třídy, která bude obsahovat BlobContainerClient odkaz.

    private BlobContainerClient blobContainerClient;
    

    Tip

    Klienti Azure jsou bezstavové a bezpečné pro přístup z více vláken. Pokud je to možné, doporučujeme ukládat jejich instance do mezipaměti. Například aplikace, na které pracujete, používá jeden kontejner s konstantním názvem, proto je nejlepší ji uložit do mezipaměti v rozsahu životnosti aplikace. BlobStorage@Singleton se proto doporučuje uložit BlobContainerClient odkaz do jeho pole.

  3. Vyhledejte metodu init s poznámkami @PostConstruct . Vaše aplikace volá tuto metodu BlobStorage po vytvoření instance a před jejím prvním využitím.

    init je místo, kde vytvořit kontejner, pokud ještě neexistuje. Aktuální implementaci init nahraďte následujícím kódem a uložte si práci.

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