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 tajný klíč účtu a vždy ho bezpečně 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.

Důležité

Tento příklad kódu používá připojovací řetězec k autorizaci přístupu k vašemu účtu úložiště. Tato konfigurace je určená například pro účely. Připojovací řetězce a přístupové klíče účtu by se měly používat s opatrností v kódu aplikace. Pokud dojde ke ztrátě nebo náhodnému umístění přístupového klíče k účtu do nezabezpečeného umístění, může být vaše služba zranitelná. Každý, kdo má přístupový klíč, může autorizovat požadavky na účet úložiště a efektivně má přístup ke všem datům.

Pro zajištění optimálního zabezpečení microsoft doporučuje Microsoft Entra ID se spravovanými identitami autorizovat požadavky na data objektů blob, fronty a tabulek, kdykoli je to možné. Další informace najdete v tématu Autorizace přístupu k objektům blob pomocí ID Microsoft Entra.

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 GetBlobContainerClient BlobServiceClient 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 kontrolery souborů /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 modelech/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.

Konfigurovat

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 Modely/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 v Startup.cs a podívat se, jak se hovor dokončil.

    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 k vyplnění existuje neúplná implementace.Storage

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>
    

Konfigurovat

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