Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начало работы с клиентской библиотекой хранилища 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 RBAC".
В этом сценарии вы назначите своей учетной записи пользователя разрешения, ограниченные учетной записью хранения, чтобы обеспечить соблюдение принципа минимальных привилегий. В рамках этой практики пользователям предоставляются только минимальные необходимые разрешения, что позволяет создавать более защищенные рабочие среды.
В следующем примере роль участника данных 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++, перейдите к следующему: