Упражнение. Настройка и инициализация клиентской библиотеки

Завершено

Ниже представлен типичный рабочий процесс для приложений, использующих хранилище BLOB-объектов Azure:

  1. Извлечение конфигурации. При запуске загрузите конфигурацию учетной записи хранения, обычно это строк подключения к учетной записи хранения.

  2. Инициализация клиента: для инициализации клиентской библиотеки служба хранилища Azure используйте строка подключения. Эта инициализация создает объекты, используемые приложением для работы с API хранилища BLOB-объектов.

  3. Использование. Для работы с контейнерами и большими двоичными объектами выполните вызовы API с помощью клиентской библиотеки.

Настройка строки подключения

Перед запуском приложения получите строка подключения для используемой учетной записи хранения. Вы можете использовать любой интерфейс управления Azure, чтобы получить его, включая портал Azure, Azure CLI и Azure PowerShell. При настройке веб-приложения для запуска кода в конце этого модуля используйте Azure CLI, чтобы получить строка подключения для созданной ранее учетной записи хранения.

Строки подключения к учетной записи хранения содержат ключ учетной записи. Рассмотрим ключ учетной записи секретом. Безопасно храните его. Здесь вы сохраняете строка подключения в параметре приложения Служба приложений. Служба приложений параметры приложения — это безопасное место для секретов приложений. Эта конструкция не поддерживает локальную разработку и не является надежным комплексным решением.

Предупреждение

Не включайте ключи учетных записей хранения в код или незащищенные файлы конфигурации. Ключ учетной записи предоставляет полный доступ к учетной записи хранения. Его утечка может привести к неустранимым повреждениям и финансовым потерям. Рекомендации по хранению ключей и действиям в случае их утечки см. в разделе Дополнительные ресурсы в конце этого модуля.

Инициализация объектной модели хранилища BLOB-объектов

В SDK службы хранилища Azure для .NET стандартная схема использования хранилища BLOB-объектов выглядит следующим образом:

  1. Создайте экземпляр нового объекта BlobServiceClient и укажите строку подключения к своей учетной записи хранения.

  2. Чтобы получить BlobContainerClient, вызовите GetBlobContainerClient в BlobServiceClient с именем контейнера, с которым вы хотите взаимодействовать или который хотите создать.

В коде эти действия выглядят следующим образом.

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

В этом коде инициализации вызовы по сети не совершаются. Это означает, что некоторые исключения, возникающие из-за неправильной информации, не создаются до конца. Например, если в конструктор класса BlobServiceClient передается неправильно отформатированная строка подключения, немедленно выдается исключение. Однако если строка подключения указывает на учетную запись хранения, которая не существует, исключение не возникает, пока не попытается выполнить операцию с учетной записью хранения.

В SDK службы хранилища Azure для Java стандартная схема использования Хранилища BLOB-объектов состоит из перечисленных ниже шагов.

  1. Создайте BlobServiceClient, создав новый BlobServiceClientBuilder объект, используя строку подключения к своей учетной записи хранения.

  2. Получите BlobContainerClient, вызвав getBlobContainerClient в BlobServiceClient с именем контейнера, с которым вы хотите взаимодействовать или который хотите создать.

В коде эти действия выглядят следующим образом.

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

В этом коде инициализации вызовы по сети не совершаются. Это означает, что некоторые исключения, возникающие из-за неправильной информации, не создаются до конца. Например, если в BlobServiceClientBuilder передается неправильно отформатированная строка подключения, немедленно выдается исключение. Однако если строка подключения указывает на учетную запись хранения, которая не существует, исключение не возникает, пока не попытается выполнить операцию с учетной записью хранения.

Создание контейнеров при запуске

Для создания контейнера при запуске приложения или при первой попытке его использования вызовите метод CreateIfNotExistsAsync класса BlobContainerClient.

CreateIfNotExistsAsyncне вызывает исключение, если контейнер уже существует, но он выполняет сетевой вызов к Хранилище BLOB-объектов Azure. Вызовите его только один раз во время инициализации, а не каждый раз при попытке использовать контейнер.

Чтобы создать контейнер при запуске приложения или при первом попытке использовать его, вызовите existsBlobContainerClient проверка, существует ли контейнер. Если он не существует, вызовите create. Вызовите его только один раз во время инициализации, а не каждый раз при попытке использовать контейнер.

Упражнения

Клонирование и изучение незавершенного приложения

  1. Сначала клонируйте начальную копию приложения из GitHub. Чтобы получить копию исходного кода и открыть ее в редакторе, выполните следующие команды в 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. В редакторе откройте файл Controllers/FilesController.cs. Здесь нет работы, но у вас есть быстрый взгляд на то, что делает приложение.

    Этот контроллер реализует интерфейс API с тремя действиями:

    • Индекс: (GET /api/Files) возвращает список URL-адресов, по одному для каждого отправленного файла. Интерфейсная часть приложения вызывает этот метод для формирования списка гиперссылок на отправленные файлы.
    • Отправка: (POST /api/Files) получает отправленный файл и сохраняет его.
    • Скачать: (GET /api/Files/{filename}) скачивает отдельный файл по его имени.

    Чтобы выполнить свою работу, каждый метод вызывает экземпляр IStorage с именем storage. Существует неполная реализация IStorage в models/Blob служба хранилища.cs для заполнения.

Добавьте пакет NuGet

  • Добавьте ссылку на SDK службы хранилища Azure. Выполните следующие команды в Azure Shell CLI:

    dotnet add package Azure.Storage.Blobs
    dotnet restore
    

    Эта команда гарантирует, что вы используете последнюю версию клиентской библиотеки BLOB-объектов служба хранилища.

Конфигурирование

Необходимые значения конфигурации — это строка подключения учетной записи хранения и имя контейнера, который приложение использует для хранения файлов. В этом модуле вы будете запускать приложение только в службе приложение Azure. Следуйте рекомендациям Служба приложений и сохраните значения в параметрах приложения Служба приложений. Это делается при создании экземпляра Служба приложений. На данный момент ничего не нужно делать.

Когда дело доходит до использования конфигурации, начальная приложение включает в себя необходимый сантехнику. Параметр IOptions<AzureStorageConfig> конструктора имеет BlobStorage два свойства: строка подключения учетной записи хранения и имя контейнера, который приложение использует для хранения больших двоичных объектов. В методе ConfigureServices в файле Startup.cs есть код, загружающий значения из конфигурации при запуске приложения.

Инициализация

  1. В редакторе откройте файл Models/Blob служба хранилища.cs. В верхней части файла добавьте следующие using инструкции, чтобы подготовить его к добавлению кода.

    using Azure;
    using Azure.Storage.Blobs;
    using Azure.Storage.Blobs.Models;
    
  2. Найдите метод Initialize. Приложение вызывает этот метод при первом использовании BlobStorage . Если вам интересно, вы можете посмотреть ConfigureServices в Startup.cs , чтобы узнать, как выполняется вызов.

    Initialize — если контейнер еще не существует, он должен создаваться именно здесь. Замените текущую реализацию Initialize следующим кодом и сохраните работу с помощью CTRL+S.

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

Клонирование и изучение незавершенного приложения

  1. Сначала клонируйте начальную копию приложения из GitHub. Чтобы получить копию исходного кода и открыть ее в редакторе, выполните следующие команды в 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. В редакторе откройте файл src/main/java/com/microsoft/azure/samples/jsf/IndexBean.java. Здесь нет работы, но у вас есть быстрый взгляд на то, что делает приложение.

    Этот запрос область bean реализует три действия, которые используются на странице src/main/webapp/index.xhtml Java Server Face (JSF):

    • listFileNames. Возвращает список имен файлов, по одному для каждого отправленного файла. Страница index.xhtml вызывает этот метод для создания списка гиперссылок к загруженным файлам.
    • upload: получает отправленный файл и сохраняет его. Содержимое файла и метаданные вставляются в свойство uploadedFile платформой JSF.
    • download. Скачивает отдельный файл по его имени.

    Для выполнения работы каждый метод вызывает экземпляр Storage с именем storage. Существует неполная реализация Storage в src/main/java/com/microsoft/azure/samples/service/BLOB служба хранилища.java для заполнения.

Добавление ссылки на SDK службы хранилища Azure для Java.

Мы рекомендуем использовать Azure BOM для добавления клиентских библиотек Azure в проект. Она предоставляет простой и элегантный способ управления использованием нескольких клиентских библиотек Azure, обеспечивая минимальный уровень конфликтов зависимостей.

  1. В редакторе откройте файл pom.xml.

  2. Чтобы добавить Azure BOM в проект, добавьте следующий dependencyManagement раздел под тегом project XML.

    <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. Чтобы добавить пакет SDK служба хранилища Azure для Java, добавьте следующее dependencyproject/dependencies в xml-раздел.

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

Конфигурирование

Необходимые значения конфигурации — это учетная запись хранения строка подключения и имя контейнера, который приложение использует для хранения файлов. В этом модуле вы будете запускать приложение только в службе приложение Azure. Следуйте рекомендациям Служба приложений и сохраните значения в параметрах приложения Служба приложений. Это делается при создании экземпляра Служба приложений. На данный момент ничего не нужно делать.

Когда дело доходит до использования конфигурации, параметры приложения Службы приложений передаются в код приложения в виде переменных среды. Вы читаете их в коде инициализации.

Инициализация

  1. В редакторе откройте src/main/java/com/microsoft/azure/samples/service/BLOB служба хранилища.java. В верхней части файла добавьте следующие import инструкции, чтобы подготовить его к добавлению кода.

    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. Добавьте свойство класса в BlobStorage класс для хранения ссылки BlobContainerClient.

    private BlobContainerClient blobContainerClient;
    

    Совет

    Клиенты Azure не отслеживают состояние и являются потокобезопасными. Рекомендуется кэшировать их экземпляры там, где это применимо. Например, приложение, над которым вы работаете, использует один контейнер с постоянным именем, поэтому его лучше кэшировать в области времени существования приложения. BlobStorage аннотирован @Singleton, поэтому рекомендуется хранить ссылку BlobContainerClient в его поле.

  3. Найдите метод init с аннотацией @PostConstruct. Приложение вызывает этот метод после создания экземпляра BlobStorage и до первого использования.

    init — где создать контейнер, если он еще не существует. Замените текущую реализацию init следующим кодом и сохраните изменения.

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