Поделиться через


Быстрый старт: клиентская библиотека хранилища BLOB-объектов Azure для C++

Начало работы с клиентской библиотекой хранилища BLOB-объектов Azure для C++. Хранилище BLOB-объектов Azure — это решение корпорации Майкрософт для хранения объектов в облаке. Выполните приведенные здесь действия, чтобы установить пакет и протестировать пример кода для выполнения базовых задач.

| Справочная документация по | APIИсходный код | библиотекиОбразцы |

Предпосылки

Настройка

В этом разделе описывается подготовка проекта для работы с клиентской библиотекой хранилища BLOB-объектов Azure для C++. Самый простой способ получить пакет SDK Azure для C++ — использовать vcpkg диспетчер пакетов.

Установка пакетов

Используйте команду vcpkg install для установки библиотеки Azure Blob Storage для C++ и необходимых зависимостей.

vcpkg.exe install azure-storage-blobs-cpp

Библиотека удостоверений Azure необходима для безпарольных подключений к службам Azure.

vcpkg.exe install azure-identity-cpp

Дополнительные сведения о настройке проекта и работе с пакетом Azure SDK для C++ см. в файле README для Azure SDK для C++.

Создание проекта

В Visual Studio создайте консольное приложение C++ для Windows под названием BlobQuickstart.

Диалоговое окно Visual Studio для настройки нового консольного приложения C++ для Windows

Объектная модель

Хранилище BLOB-объектов Azure оптимизировано для хранения больших объемов неструктурированных данных. Неструктурированные данные — это данные, которые не соответствуют определенной модели данных или определению, например текстовым или двоичным данным. Хранилище BLOB обеспечивает три типа ресурсов:

  • учетная запись хранения;
  • контейнер в аккаунте хранилища
  • BLOB в контейнере.

На следующей схеме показана связь между этими ресурсами.

Схема архитектуры хранилища BLOB-объектов

Используйте эти классы C++ для взаимодействия с этими ресурсами:

  • BlobServiceClient: класс BlobServiceClient позволяет управлять ресурсами службы хранилища Azure и контейнерами BLOB-объектов.
  • BlobContainerClient: класс BlobContainerClient позволяет управлять контейнерами Azure Storage и их блобами.
  • BlobClient: класс BlobClient позволяет управлять BLOB-объектами службы хранилища Azure. Это базовый класс для всех специализированных BLOB-классов.
  • BlockBlobClient: BlockBlobClient класс позволяет управлять блочными объектами BLOB хранилища Azure.

Примеры кода

В этих примерах фрагментов кода показано, как выполнять следующие задачи с клиентской библиотекой хранилища BLOB-объектов Azure для C++:

Добавление файлов включения

Из каталога проекта:

  1. Откройте файл решения BlobQuickstart.sln в Visual Studio
  2. В Visual Studio откройте исходный файл BlobQuickstart.cpp
  3. Удалите любой код внутри main , который был создан автоматически
  4. Добавьте #include и using namespace оператор
#include <iostream>
#include <azure/core.hpp>
#include <azure/identity/default_azure_credential.hpp>
#include <azure/storage/blobs.hpp>

using namespace Azure::Identity;
using namespace Azure::Storage::Blobs;

Аутентификация в Azure и авторизация доступа к объектам BLOB

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

Вы также можете авторизовать запросы к Хранилищу BLOB-объектов Azure с помощью ключа доступа к учетной записи. Однако этот подход следует использовать с осторожностью. Разработчики должны тщательно следить за тем, чтобы не раскрыть ключи доступа в незащищенном расположении. Любой пользователь, имеющий ключ доступа, может авторизовать запросы к учетной записи хранения и эффективно иметь доступ ко всем данным. DefaultAzureCredential предлагает улучшенные преимущества управления и безопасности по сравнению с ключом учетной записи, чтобы разрешить проверку подлинности без пароля. Оба варианта показаны в следующем примере.

Библиотека идентификации Azure обеспечивает поддержку аутентификации токенов Microsoft Entra в Azure SDK. Он предоставляет набор реализаций TokenCredential , которые можно использовать для создания клиентов пакета SDK Azure, которые поддерживают проверку подлинности маркера Microsoft Entra. DefaultAzureCredential поддерживает несколько способов проверки подлинности и определяет, какой из них следует использовать в среде выполнения.

Назначение ролей учетной записи пользователя Microsoft Entra

Если вы выполняете разработку локально, убедитесь, что учетная запись пользователя, через которую осуществляется доступ к данным BLOB-объектов, имеет правильные разрешения. Вам потребуется роль Storage Blob Data Contributor для чтения и записи данных BLOB-объектов. Чтобы назначить себе эту роль, вам потребуется, чтобы вам назначили роль администратора доступа пользователей или другую роль, включающую действие Microsoft.Authorization/roleAssignments/write. Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Дополнительные сведения о доступных областях назначения ролей можно узнать на странице обзора области.

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

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

Это важно

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

  1. На портале Azure найдите свою учетную запись хранения, воспользовавшись основной панелью поиска или областью навигации слева.

  2. На странице обзора учетной записи хранения выберите Контроль доступа (IAM) в меню слева.

  3. На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.

  4. Выберите + Добавить в верхнем меню, а затем выберите Добавить назначение роли в появившемся раскрывающемся меню.

    Снимок экрана, на котором продемонстрировано назначение роли.

  5. Используйте поле поиска, чтобы отфильтровать результаты для отображения нужной роли. В этом примере найдите Storage Blob Data Contributor и выберите соответствующий результат, а затем нажмите Далее.

  6. В разделе Назначение доступа выберите Пользователь, группа или сервисный принципал, а затем нажмите + Выбрать участников.

  7. В диалоговом окне найдите имя пользователя Microsoft Entra (обычно это ваш адрес электронной почты user@domain), а затем выберите пункт Select в нижней части диалогового окна.

  8. Нажмите кнопку Проверить и назначить, чтобы перейти на последнюю страницу, а затем еще раз Проверить и назначить, чтобы завершить процесс.

Войдите и подключите код приложения к Azure с помощью DefaultAzureCredential

Чтобы авторизовать доступ к данным в учетной записи хранения, выполните следующие действия:

  1. Убедитесь, что вы аутентифицированы с той же учетной записью Microsoft Entra, которой вы назначили роль в учетной записи хранения. Вы можете пройти проверку подлинности с помощью Azure CLI. Войдите в Azure с помощью Azure CLI с помощью следующей команды:

    az login
    
  2. Чтобы использоватьDefaultAzureCredential, убедитесь, что установлен пакет azure-identity-cpp и добавляется следующее#include:

    #include <azure/identity/default_azure_credential.hpp>
    
  3. Добавьте этот код в конец main(). Когда код выполняется на локальной рабочей станции, DefaultAzureCredential использует учетные данные разработчика для Azure CLI для проверки подлинности в Azure.

    // Initialize an instance of DefaultAzureCredential
     auto defaultAzureCredential = std::make_shared<DefaultAzureCredential>();
    
     auto accountURL = "https://<storage-account-name>.blob.core.windows.net";
     BlobServiceClient blobServiceClient(accountURL, defaultAzureCredential);
    
  4. Обязательно обновите имя учетной записи хранения в URI объекта BlobServiceClient . Имя учетной записи хранения можно найти на странице обзора портала Azure.

    Снимок экрана: как найти имя учетной записи хранения.

    Примечание.

    При использовании пакета SDK C++ в рабочей среде рекомендуется включить только учетные данные, которые вы знаете, что приложение будет использовать. Вместо использования DefaultAzureCredentialследует авторизовать использование определенного типа учетных данных или использовать ChainedTokenCredential с поддерживаемыми учетными данными.

Создание контейнера

Определите имя нового контейнера. Затем создайте экземпляр BlobContainerClient и создайте контейнер.

Это важно

Имена контейнеров должны состоять из знаков нижнего регистра. Дополнительные сведения об именовании контейнеров и больших двоичных объектов см. в статье Naming and Referencing Containers, Blobs, and Metadata (Именование контейнеров, больших двоичных объектов и метаданных и ссылка на них).

Добавьте этот код в конец main():

std::string containerName = "myblobcontainer";
auto containerClient = blobServiceClient.GetBlobContainerClient("myblobcontainer");

// Create the container if it does not exist
std::cout << "Creating container: " << containerName << std::endl;
containerClient.CreateIfNotExists();

Загрузить блобы в контейнер

Следующий фрагмент кода:

  1. Объявляет строку, содержащую "Привет Azure!"
  2. Возвращает ссылку на объект BlockBlobClient путем вызова GetBlockBlobClient в контейнере из раздела "Создание контейнера".
  3. Загружает строку в BLOB, вызвав функцию UploadFrom. Эта функция создает большой двоичный объект, если он еще не существует, или обновляет его, если он существует.

Добавьте этот код в конец main():

std::string blobName = "blob.txt";
uint8_t blobContent[] = "Hello Azure!";
// Create the block blob client
BlockBlobClient blobClient = containerClient.GetBlockBlobClient(blobName);

// Upload the blob
std::cout << "Uploading blob: " << blobName << std::endl;
blobClient.UploadFrom(blobContent, sizeof(blobContent));

Перечислите объекты BLOB в контейнере

Перечислите объекты blob в контейнере, вызвав функцию ListBlobs. В контейнер был добавлен только один объект, поэтому операция возвращает только его.

Добавьте этот код в конец main():

std::cout << "Listing blobs..." << std::endl;
auto listBlobsResponse = containerClient.ListBlobs();
for (auto blobItem : listBlobsResponse.Blobs)
{
    std::cout << "Blob name: " << blobItem.Name << std::endl;
}

Загрузка больших двоичных объектов

Получите свойства загруженного BLOB. Затем объявите и измените размер нового std::vector<uint8_t> объекта, используя свойства загруженного файла BLOB. Загрузите ранее созданный BLOB в новый объект std::vector<uint8_t>, вызвав функцию DownloadTo в базовом классе BlobClient. Наконец, отобразите скачанные данные объекта BLOB.

Добавьте этот код в конец main():

auto properties = blobClient.GetProperties().Value;
std::vector<uint8_t> downloadedBlob(properties.BlobSize);

blobClient.DownloadTo(downloadedBlob.data(), downloadedBlob.size());
std::cout << "Downloaded blob contents: " << std::string(downloadedBlob.begin(), downloadedBlob.end()) << std::endl;

Удаление BLOB

Следующий код удаляет BLOB-объект из контейнера хранилища BLOB-объектов Azure, используя функцию BlobClient.Delete.

std::cout << "Deleting blob: " << blobName << std::endl;
blobClient.Delete();

Удаление контейнера

Следующий код очищает ресурсы, созданные приложением, удалив весь контейнер с помощью BlobContainerClient.Удаление.

Добавьте этот код в конец main():

std::cout << "Deleting container: " << containerName << std::endl;
containerClient.Delete();

Выполнение кода

Это приложение создает контейнер и отправляет текстовый файл в хранилище BLOB-объектов Azure. Затем в примере перечисляются объекты данных в контейнере, загружается файл и отображается его содержимое. Наконец, приложение удаляет blob и контейнер.

Результат работы приложения будет похож на следующий пример.

Azure Blob Storage - C++ quickstart sample
Creating container: myblobcontainer
Uploading blob: blob.txt
Listing blobs...
Blob name: blob.txt
Downloaded blob contents: Hello Azure!
Deleting blob: blob.txt
Deleting container: myblobcontainer

Дальнейшие действия

Из этого краткого руководства вы узнали, как отправлять, скачивать и перечислять большие двоичные объекты с помощью C++. Вы также узнали, как создать и удалить контейнер хранилища BLOB-объектов Azure.

Чтобы просмотреть пример хранилища BLOB-объектов C++, перейдите к следующему: