Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начало работы с клиентской библиотекой хранилища BLOB-объектов Azure для C++. Хранилище BLOB-объектов Azure — это решение корпорации Майкрософт для хранения объектов в облаке. Выполните приведенные здесь действия, чтобы установить пакет и протестировать пример кода для выполнения базовых задач.
| Справочная документация по | APIИсходный код | библиотекиОбразцы |
Предпосылки
- Подписка Azure — создайте бесплатную учетную запись.
- Учетная запись хранения Azure — создайте такую учетную запись.
- Компилятор C++
- CMake
- vcpkg — диспетчер пакетов C и C++
Настройка
В этом разделе описывается подготовка проекта для работы с клиентской библиотекой хранилища 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.
Объектная модель
Хранилище BLOB-объектов Azure оптимизировано для хранения больших объемов неструктурированных данных. Неструктурированные данные — это данные, которые не соответствуют определенной модели данных или определению, например текстовым или двоичным данным. Хранилище BLOB обеспечивает три типа ресурсов:
- учетная запись хранения;
- контейнер в аккаунте хранилища
- BLOB в контейнере.
На следующей схеме показана связь между этими ресурсами.
Используйте эти классы C++ для взаимодействия с этими ресурсами:
-
BlobServiceClient: класс
BlobServiceClient
позволяет управлять ресурсами службы хранилища Azure и контейнерами BLOB-объектов. -
BlobContainerClient: класс
BlobContainerClient
позволяет управлять контейнерами Azure Storage и их блобами. -
BlobClient: класс
BlobClient
позволяет управлять BLOB-объектами службы хранилища Azure. Это базовый класс для всех специализированных BLOB-классов. -
BlockBlobClient:
BlockBlobClient
класс позволяет управлять блочными объектами BLOB хранилища Azure.
Примеры кода
В этих примерах фрагментов кода показано, как выполнять следующие задачи с клиентской библиотекой хранилища BLOB-объектов Azure для C++:
- Добавление файлов включения
- Аутентификация в Azure и авторизация доступа к данным Blob-объектов
- Создание контейнера
- Загрузка объектов в контейнер
- Список BLOBов в контейнере
- скачивание больших двоичных объектов;
- Удаление контейнера
Добавление файлов включения
Из каталога проекта:
- Откройте файл решения BlobQuickstart.sln в Visual Studio
- В Visual Studio откройте исходный файл BlobQuickstart.cpp
- Удалите любой код внутри
main
, который был создан автоматически - Добавьте
#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 потребуется минута или две, но в редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
На портале Azure найдите свою учетную запись хранения, воспользовавшись основной панелью поиска или областью навигации слева.
На странице обзора учетной записи хранения выберите Контроль доступа (IAM) в меню слева.
На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.
Выберите + Добавить в верхнем меню, а затем выберите Добавить назначение роли в появившемся раскрывающемся меню.
Используйте поле поиска, чтобы отфильтровать результаты для отображения нужной роли. В этом примере найдите Storage Blob Data Contributor и выберите соответствующий результат, а затем нажмите Далее.
В разделе Назначение доступа выберите Пользователь, группа или сервисный принципал, а затем нажмите + Выбрать участников.
В диалоговом окне найдите имя пользователя Microsoft Entra (обычно это ваш адрес электронной почты user@domain), а затем выберите пункт Select в нижней части диалогового окна.
Нажмите кнопку Проверить и назначить, чтобы перейти на последнюю страницу, а затем еще раз Проверить и назначить, чтобы завершить процесс.
Войдите и подключите код приложения к Azure с помощью DefaultAzureCredential
Чтобы авторизовать доступ к данным в учетной записи хранения, выполните следующие действия:
Убедитесь, что вы аутентифицированы с той же учетной записью Microsoft Entra, которой вы назначили роль в учетной записи хранения. Вы можете пройти проверку подлинности с помощью Azure CLI. Войдите в Azure с помощью Azure CLI с помощью следующей команды:
az login
Чтобы использовать
DefaultAzureCredential
, убедитесь, что установлен пакет azure-identity-cpp и добавляется следующее#include
:#include <azure/identity/default_azure_credential.hpp>
Добавьте этот код в конец
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);
Обязательно обновите имя учетной записи хранения в 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();
Загрузить блобы в контейнер
Следующий фрагмент кода:
- Объявляет строку, содержащую "Привет Azure!"
- Возвращает ссылку на объект BlockBlobClient путем вызова GetBlockBlobClient в контейнере из раздела "Создание контейнера".
- Загружает строку в 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++, перейдите к следующему: