Alıştırma - İstemci kitaplığını yapılandırma ve başlatma

Tamamlandı

Azure Blob depolama kullanan uygulamalar için tipik iş akışı aşağıdaki gibidir:

  1. Yapılandırmayı alma: Başlangıçta depolama hesabı yapılandırmasını ( genellikle bir depolama hesabı bağlantı dizesi) yükleyin.

  2. İstemciyi başlatma: Azure Depolama istemci kitaplığını başlatmak için bağlantı dizesi kullanın. Bu başlatma, uygulamanın Blob depolama API'siyle çalışmak için kullandığı nesneleri oluşturur.

  3. Kullanma: Kapsayıcılar ve bloblar üzerinde çalışmak için istemci kitaplığını kullanarak API çağrıları yapın.

Bağlantı dizenizi yapılandırma

Uygulamanızı çalıştırmadan önce kullandığınız depolama hesabının bağlantı dizesi alın. Azure portalı, Azure CLI ve Azure PowerShell dahil olmak üzere herhangi bir Azure yönetim arabirimini kullanabilirsiniz. Web uygulamasını kodunuzu bu modülün sonuna yakın bir noktada çalıştıracak şekilde ayarlarken, daha önce oluşturduğunuz depolama hesabının bağlantı dizesi almak için Azure CLI'yı kullanın.

Depolama hesabı bağlantı dizeleri hesap anahtarını içerir. Hesap anahtarını gizli dizi olarak düşünün. Güvenli bir şekilde depolayın. Burada, bağlantı dizesi bir App Service uygulama ayarında depolarsınız. App Service uygulama ayarları, uygulama gizli dizileri için güvenli bir yerdir. Bu tasarım yerel geliştirmeyi desteklemez ve tek başına sağlam, uçtan uca bir çözüm değildir.

Uyarı

Depolama hesabı anahtarlarını koda veya korumasız yapılandırma dosyalarına yerleştirmeyin. Depolama hesabı anahtarları, depolama hesabınıza tam erişim olanağı sağlar. Anahtarın sızdırılması kurtarılamaz bir zarara ve kabarık faturalara neden olabilir. Sızdırılan bir anahtardan kurtarma hakkında depolama yönergeleri ve öneriler için bu modülün sonundaki Daha Fazla Okuma bölümüne bakın.

Blob depolama nesne modelini başlatma

.NET için Azure Depolama SDK'sında Blob depolamayı kullanmaya yönelik standart desen aşağıdaki gibidir:

  1. Yeni BlobServiceClient bir nesne örneği oluşturun ve depolama hesabınıza bağlantı dizesi sağlayın.

  2. almak BlobContainerClientiçin, üzerinde etkileşim kurmak veya oluşturmak istediğiniz kapsayıcının adıyla çağrısında GetBlobContainerClientBlobServiceClient bulunur.

Kodda bu adımlar şöyle görünür.

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

Bu başlatma kodlarından hiçbiri ağ üzerinden çağrı yapmaz. Bu durum, yanlış bilgiler nedeniyle oluşan bazı özel durumların daha sonra oluşmadığı anlamına gelir. Örneğin, sınıfın oluşturucusunun BlobServiceClient yanlış biçimlendirilmiş bir bağlantı dizesi sağlanırsa, hemen bir özel durum oluşturulur. Ancak, bağlantı dizesi mevcut olmayan bir depolama hesabına işaret ederse, depolama hesabına karşı bir işlem denemeden hiçbir özel durum oluşturulur.

Java için Azure Depolama SDK'sında Blob Depolama kullanmaya yönelik standart desen aşağıdaki adımlardan oluşur:

  1. BlobServiceClient Depolama hesabınızdaki bağlantı dizesi kullanarak yeni BlobServiceClientBuilder bir nesne örneği oluşturarak bir oluşturun.

  2. BlobContainerClient ile etkileşim kurmak veya oluşturmak istediğiniz kapsayıcının adıyla yöntemini çağırarak getBlobContainerClientBlobServiceClientbir alın.

Kodda bu adımlar şöyle görünür.

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

Bu başlatma kodlarından hiçbiri ağ üzerinden çağrı yapmaz. Bu durum, yanlış bilgiler nedeniyle oluşan bazı özel durumların daha sonra oluşmadığı anlamına gelir. Örneğin, içine yanlış biçimlendirilmiş bir bağlantı dizesi sağlanırsaBlobServiceClientBuilder, hemen bir özel durum oluşturulur. Ancak, bağlantı dizesi mevcut olmayan bir depolama hesabına işaret ederse, depolama hesabına karşı bir işlem denemeden hiçbir özel durum oluşturulur.

Başlangıçta kapsayıcıları oluşturma

Uygulamanız başlatıldığında veya uygulama kapsayıcıyı ilk kez kullanmayı denediğinde kapsayıcı oluşturmak için üzerinde çağrısında CreateIfNotExistsAsync bulunur BlobContainerClient.

CreateIfNotExistsAsynckapsayıcı zaten varsa özel durum oluşturmaz, ancak Azure Blob Depolama için bir ağ çağrısı yapar. Kapsayıcıyı her kullanmayı denediğinizde değil, başlatma sırasında bir kez çağırın.

Uygulamanız başlatıldığında veya uygulamayı ilk kez kullanmaya çalıştığında kapsayıcı oluşturmak için, exists kapsayıcının BlobContainerClient zaten var olup olmadığını denetlemek için çağrısında bulunabilirsiniz. Yoksa çağrısı yapın create. Kapsayıcıyı her kullanmayı denediğinizde değil, başlatma sırasında bir kez çağırın.

Alıştırma

Bitmemiş uygulamayı kopyalama ve inceleme

  1. İlk olarak GitHub'dan başlangıç uygulamasını kopyalayın. Kaynak kodun bir kopyasını almak ve düzenleyicide açmak için Azure Shell CLI'de aşağıdaki komutları çalıştırın:

    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. Düzenleyicide Controllers/FilesController.cs dosyasını açın. Burada yapılacak bir iş yok, ancak uygulamanın ne yaptığına hızlıca göz atın.

    Bu denetleyici üç eylemli bir API uygular:

    • Dizin: (GET /api/Files) karşıya yüklenen her dosya için bir URL listesi döndürür. Uygulama ön ucu, karşıya yüklenen dosyalara ulaştıran köprülerin listesini oluşturmak için bu yöntemi çağırır.
    • Karşıya yükleme: (POST /api/Files) karşıya yüklenen bir dosyayı alır ve kaydeder.
    • İndir: (GET /api/Files/{filename}) tek bir dosyayı adına göre indirir.

    Her yöntem işini yapmak için storage adlı bir IStorage örneği kullanır. Doldurulacak Models/Blob Depolama.cs dosyasında tamamlanmamış bir uygulaması IStorage vardır.

NuGet paketini ekleyin

  • Azure Depolama SDK'sına başvuru ekleyin. Azure Shell CLI'de aşağıdaki komutları çalıştırın:

    dotnet add package Azure.Storage.Blobs
    dotnet restore
    

    Bu komut, Blob Depolama istemci kitaplığının en yeni sürümünü kullanmanızı sağlar.

Yapılandırma

İhtiyacınız olan yapılandırma değerleri depolama hesabı bağlantı dizesi ve uygulamanın dosyaları depolamak için kullandığı kapsayıcının adıdır. Bu modülde, uygulamayı yalnızca Azure Uygulaması Hizmeti'nde çalıştıracaksınız. App Service en iyi uygulamasını izleyin ve değerleri App Service uygulama ayarlarında depolayın. App Service örneğini oluştururken bunu yaparsınız. Şu anda yapman gereken bir şey yok.

Yapılandırmayı kullanmak söz konusu olduğunda, başlangıç uygulaması ihtiyacınız olan tesisatı içerir. içindeki BlobStorage oluşturucu parametresinin IOptions<AzureStorageConfig> iki özelliği vardır: depolama hesabı bağlantı dizesi ve uygulamanızın blobları depolamak için kullandığı kapsayıcının adı. yönteminde ConfigureServicesStartup.cs , uygulama başlatıldığında yapılandırmadaki değerleri yükleyen bir kod vardır.

Başlatma

  1. Düzenleyicide Models/Blob Depolama.cs dosyasını açın. Dosyanın en üstüne, ekleyeceğiniz koda hazırlamak için aşağıdaki using deyimleri ekleyin.

    using Azure;
    using Azure.Storage.Blobs;
    using Azure.Storage.Blobs.Models;
    
  2. Initialize yöntemini bulun. Uygulamanız ilk kez kullandığında BlobStorage bu yöntemi çağırır. Merak ediyorsanız, aramanın nasıl yapıldığını görmek için Startup.cs dosyasına bakabilirsiniz.ConfigureServices

    Henüz kapsayıcımız yoksa, Initialize kapsayıcıyı oluşturmak istediğiniz yerdir. geçerli uygulamasını Initialize aşağıdaki kodla değiştirin ve CTRL+S kullanarak çalışmanızı kaydedin.

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

Bitmemiş uygulamayı kopyalama ve inceleme

  1. İlk olarak GitHub'dan başlangıç uygulamasını kopyalayın. Kaynak kodun bir kopyasını almak ve düzenleyicide açmak için Azure Shell CLI'de aşağıdaki komutları çalıştırın:

    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. Düzenleyicide src/main/java/com/microsoft/azure/samples/jsf/IndexBean.java dosyasını açın. Burada yapılacak bir iş yok, ancak uygulamanın ne yaptığına hızlıca göz atın.

    Bu istek kapsamlı fasulye, src/main/webapp/index.xhtml Java Sunucusu Yüzleri (JSF) sayfası tarafından kullanılan üç eylem uygular:

    • listFileNames: Karşıya yüklenen her dosya için bir dosya adı listesi döndürür. index.xhtml sayfası, karşıya yüklenen dosyalara köprü listesi oluşturmak için bu yöntemi çağırır.
    • karşıya yükleme: Karşıya yüklenen bir dosyayı alır ve kaydeder. Dosya içeriği ve meta veriler JSF çerçevesi tarafından özelliğine eklenir uploadedFile .
    • download: Tek bir dosyayı adına göre indirir.

    Her yöntem, işini yapmak için adlı storagebir Storage örnek kullanır. Doldurulması gereken src/main/java/com/microsoft/azure/samples/service/Blob Depolama.java içinde tamamlanmamış bir uygulaması Storagevardır.

Java başvurusu için Azure Depolama SDK'sını ekleme

Projeye Azure istemci kitaplıkları eklemek için Azure BOM'u kullanmanızı öneririz. Çok az bağımlılık çakışması sağlarken birden çok Azure istemci kitaplığını kullanarak düzenlemenin basit ve zarif bir yolunu sağlar.

  1. Düzenleyicide pom.xml dosyasını açın.

  2. Azure BOM'u projeye eklemek için xml etiketinin project altına aşağıdaki dependencyManagement bölümü ekleyin.

    <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. Java için Azure Depolama SDK'sını eklemek için xml bölümüne aşağıdakileri dependencyproject/dependencies ekleyin.

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

Yapılandırma

İhtiyacınız olan yapılandırma değerleri, bağlantı dizesi depolama hesabı ve uygulamanın dosyaları depolamak için kullandığı kapsayıcının adıdır. Bu modülde, uygulamayı yalnızca Azure Uygulaması Hizmeti'nde çalıştıracaksınız. App Service en iyi uygulamasını izleyin ve değerleri App Service uygulama ayarlarında depolayın. App Service örneğini oluştururken bunu yaparsınız. Şu anda yapman gereken bir şey yok.

Yapılandırmayı kullanmak söz konusu olduğunda App Service uygulama ayarları, uygulama koduna ortam değişkenleri olarak geçirilir. Bunları başlatma kodunda okursunuz.

Başlatma

  1. Düzenleyicide src/main/java/com/microsoft/azure/samples/service/Blob Depolama.java dosyasını açın. Dosyanın en üstüne, ekleyeceğiniz koda hazırlamak için aşağıdaki import deyimleri ekleyin.

    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. Başvuruyu tutmak BlobContainerClient için sınıfına BlobStorage bir sınıf özelliği ekleyin.

    private BlobContainerClient blobContainerClient;
    

    Bahşiş

    Azure istemcileri durum bilgisi olmayan ve iş parçacığı açısından güvenlidir. Uygun olduğunda örneklerini önbelleğe almaları önerilir. Örneğin, üzerinde çalıştığınız uygulama sabit bir ada sahip tek bir kapsayıcı kullanır, bu nedenle bunu uygulama ömrü kapsamında önbelleğe almak en iyisidir. BlobStorage@Singleton bu nedenle, başvurunun BlobContainerClient alanında depolanması önerilir.

  3. ek açıklamalı init@PostConstruct yöntemini bulun. Uygulamanız, örnek oluşturulduktan sonra BlobStorage ve ilk kez kullanılmadan önce bu yöntemi çağırır.

    init kapsayıcınız yoksa, kapsayıcınızın oluşturulacağı yerdir. Geçerli init uygulamasını aşağıdaki kodla değiştirin ve çalışmanızı kaydedin.

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