Inicio rápido: Biblioteca cliente de Azure Blob Storage para C++
Introducción a la biblioteca cliente de Azure Blob Storage para C++. Azure Blob Storage es la solución de almacenamiento de objetos de Microsoft para la nube. Siga estos pasos para instalar el paquete y probar el código de ejemplo para realizar tareas básicas.
| Documentación de referencia | Código fuente de la biblioteca | Ejemplo de código |
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- Una cuenta de Azure Storage: cree una cuenta de almacenamiento
- Compilador de C++
- CMake
- Vcpkg: administrador de paquetes de C y C++
Instalación
En esta sección se explica cómo preparar un proyecto para que funcione con la biblioteca de cliente de Azure Blob Storage para C++. La manera más fácil de adquirir Azure SDK para C++ es usar el vcpkg
administrador de paquetes.
Instalación de los paquetes
Use el comando vcpkg install
para instalar la biblioteca de Azure Blob Storage para C++ y las dependencias necesarias:
vcpkg.exe install azure-storage-blobs-cpp
La biblioteca Azure.Identity es necesaria para las conexiones sin contraseña a los servicios de Azure:
vcpkg.exe install azure-identity-cpp
Para más información sobre la configuración del proyecto y cómo trabajar con Azure SDK para C++, consulte el archivo Léame de Azure SDK para C++.
Creación del proyecto
En Visual Studio, cree una nueva aplicación de consola de C++ para Windows llamada BlobQuickstart.
Modelo de objetos
Azure Blob Storage está optimizado para el almacenamiento de cantidades masivas de datos no estructurados. Los datos no estructurados son datos que no se ciñen a ningún un modelo de datos o definición concretos, como texto o datos binarios. Blob Storage ofrece tres tipos de recursos:
- La cuenta de almacenamiento
- Un contenedor en la cuenta de almacenamiento
- Un blob en el contenedor
En el siguiente diagrama se muestra la relación entre estos recursos.
Use estas clases de C++ para interactuar con estos recursos:
- BlobServiceClient: La clase
BlobServiceClient
permite manipular recursos de Azure Storage y contenedores de blobs. - BlobContainerClient: La clase
BlobContainerClient
permite manipular contenedores de Azure Storage y sus blobs. - BlobClient: La clase
BlobClient
permite manipular los blobs de Azure Storage. Es la clase base para todas las clases de blob especializadas. - BlockBlobClient: La clase
BlockBlobClient
permite manipular los blobs en bloques de Azure Storage.
Ejemplos de código
Estos fragmentos de código de ejemplo muestran cómo realizar las siguientes tareas con la biblioteca cliente de Azure Blob Storage para C++:
- Adición de archivos de inclusión
- Autenticación en Azure y autorización del acceso a datos de blobs
- Creación de un contenedor
- Carga de los blobs en un contenedor
- Enumeración de los blobs de un contenedor
- Descarga de los blobs
- Eliminación de un contenedor
Adición de archivos de inclusión
Desde el directorio del proyecto:
- Abra el archivo de soluciones BlobQuickstart.sln en Visual Studio
- En Visual Studio, abra el archivo de origen BlobQuickstart.cpp
- Quite todo el código incluido en
main
que se haya generado automáticamente - Agregue las Instrucciones
#include
yusing 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;
Autenticación en Azure y autorización del acceso a datos de blobs
Las solicitudes de aplicación a Azure Blob Storage deben estar autorizadas. El uso de la clase DefaultAzureCredential
que proporciona la biblioteca cliente de Azure.Identity es el enfoque recomendado para implementar conexiones sin contraseña a los servicios de Azure en el código, incluido Blob Storage.
También puede autorizar las solicitudes a Azure Blob Storage mediante la clave de acceso de la cuenta. Sin embargo, este enfoque debe usarse con precaución. Los desarrolladores deben ser diligentes para no exponer nunca las claves de acceso en una ubicación que no sea segura. Cualquier persona que tenga la clave de acceso puede autorizar las solicitudes en la cuenta de almacenamiento y tiene acceso eficaz a todos los datos. DefaultAzureCredential
ofrece ventajas de seguridad y administración mejoradas con respecto la clave de cuenta para permitir la autenticación sin contraseña. Ambas opciones se muestran en el ejemplo siguiente.
La biblioteca de identidades de Azure proporciona asistencia con la autenticación de tokens de Microsoft Entra a través de Azure SDK. Proporciona un conjunto de implementaciones de TokenCredential
que se pueden usar para construir clientes del SDK de Azure que admitan la autenticación de tokens de Microsoft Entra. DefaultAzureCredential
admite varios métodos de autenticación y determina el que se debe usar en tiempo de ejecución.
Asignación de roles a la cuenta de usuario de Microsoft Entra
Al desarrollar localmente, asegúrese de que la cuenta de usuario que accede a los datos de blob tenga los permisos correctos. Necesitará el Colaborador de datos de blobs de almacenamiento para leer y escribir datos de blob. Para asignarse este rol a sí mismo, necesitará que se le asigne el rol Administrador de acceso de usuario u otro rol que incluya la acción Microsoft.Authorization/roleAssignments/write. Puede asignar roles RBAC de Azure a un usuario mediante Azure Portal, la CLI de Azure o Azure PowerShell. Puede obtener más información sobre los ámbitos disponibles para las asignaciones de roles en la página de información general del ámbito.
En este escenario, asignará permisos a la cuenta de usuario, cuyo ámbito es la cuenta de almacenamiento, a fin de seguir el principio de privilegios mínimos. Esta práctica solo proporciona a los usuarios los permisos mínimos necesarios y crea entornos de producción más seguros.
En el ejemplo siguiente se asignará el rol Colaborador de datos de blobs de almacenamiento a la cuenta de usuario, que proporciona acceso de lectura y escritura a los datos de blobs de la cuenta de almacenamiento.
Importante
En la mayoría de los casos, la asignación de roles tardará un minuto o dos en propagarse en Azure, pero en casos excepcionales puede tardar hasta ocho minutos. Si recibe errores de autenticación al ejecutar por primera vez el código, espere unos instantes e inténtelo de nuevo.
En Azure Portal, busque la cuenta de almacenamiento mediante la barra de búsqueda principal o el panel de navegación de la izquierda.
En la página de información general de la cuenta de almacenamiento, seleccione Control de acceso (IAM) en el menú de la izquierda.
En la página Control de acceso (IAM), seleccione la pestaña Asignación de roles.
Seleccione + Agregar en el menú superior y, a continuación, Agregar asignación de roles en el menú desplegable resultante.
Puede usar el cuadro de búsqueda para filtrar los resultados por el rol deseado. En este ejemplo, busque Colaborador de datos de blobs de almacenamiento y seleccione el resultado coincidente y, a continuación, elija Siguiente.
En la pestaña Asignar acceso a, seleccione Usuario, grupo o entidad de servicio y, a continuación, elija + Seleccionar miembros.
En el cuadro de diálogo, busque el nombre de usuario de Microsoft Entra (normalmente su dirección de correo electrónico de user@domain) y, a continuación, elija Seleccionar en la parte inferior del cuadro de diálogo.
Seleccione Revisar y asignar para ir a la página final y, a continuación, de nuevo Revisar y asignar para completar el proceso.
Inicio de sesión y conexión del código de la aplicación a Azure mediante DefaultAzureCredential
Puede autorizar el acceso a los datos de la cuenta de almacenamiento mediante los siguientes pasos:
Asegúrese de que esté autenticado con la misma cuenta de Microsoft Entra a la que asignó el rol en la cuenta almacenamiento. Puede autenticarse a través de la CLI de Azure. Inicie sesión en Azure a través de la CLI de Azure mediante el siguiente comando:
az login
Para usar
DefaultAzureCredential
, asegúrese de que el paquete azure-identity-cpp está instalado#include
y se agrega lo siguiente:#include <azure/identity/default_azure_credential.hpp>
Agregue este código al final de
main()
. Cuando el código se ejecuta en su estación de trabajo local,DefaultAzureCredential
usa las credenciales de desarrollador para Azure CLI para autenticarse en 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);
Asegúrese de actualizar el nombre de la cuenta de almacenamiento en el URI del objeto
BlobServiceClient
. El nombre de la cuenta de almacenamiento se puede encontrar en la página de información general de Azure Portal.Nota:
Al usar el SDK de C++ en un entorno de producción, se recomienda que solo habilite las credenciales que sabe que usarán la aplicación. En lugar de usar
DefaultAzureCredential
, debe autorizar el uso de un tipo de credencial específico o mediante el uso deChainedTokenCredential
con las credenciales admitidas.
Crear un contenedor
Decida un nombre para el nuevo contenedor. A continuación, cree una instancia de BlobContainerClient
y cree el contenedor.
Importante
Los nombres de contenedor deben estar en minúsculas. Para más información acerca de los contenedores de nomenclatura y los blobs, consulte Naming and Referencing Containers, Blobs, and Metadata (Asignación de nombres y realización de referencias a contenedores, blobs y metadatos).
Agregue este código al final de 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();
Carga de los blobs en un contenedor
El siguiente fragmento de código:
- Declara una cadena que contiene "Hello Azure!"
- Obtiene una referencia a un objeto BlockBlobClient llamando al contenedor GetBlockBlobClient de la sección Crear un contenedor.
- Carga la cadena en el blob mediante la llamada a la función UploadFrom. Esta función crea el blob, en caso de que no exista, o lo actualiza si existe.
Agregue este código al final de 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));
Enumeración de los blobs de un contenedor
Enumere los blobs en el contenedor llamando a la función ListBlobs. Se ha agregado un solo blob al contenedor, por lo que la operación devuelve simplemente dicho blob.
Agregue este código al final de main()
:
std::cout << "Listing blobs..." << std::endl;
auto listBlobsResponse = containerClient.ListBlobs();
for (auto blobItem : listBlobsResponse.Blobs)
{
std::cout << "Blob name: " << blobItem.Name << std::endl;
}
Descargar blobs
Obtenga las propiedades del blob cargado. Luego, declare y cambie el tamaño de un nuevo objeto std::vector<uint8_t>
mediante las propiedades del blob cargado. Descargue el blob que ha creado anteriormente en el objeto std::vector<uint8_t>
nuevo, para lo que debe llamar a la función DownloadTo en la clase base BlobClient. Por último, muestre los datos del blob descargado.
Agregue este código al final de 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;
Eliminación de un blob
El código siguiente elimina el blob del contenedor de Azure Blob Storage, para lo que llama a la función BlobClient.Delete.
std::cout << "Deleting blob: " << blobName << std::endl;
blobClient.Delete();
Eliminación de un contenedor
El código siguiente limpia los recursos que creó la aplicación; para ello, elimina todo el contenedor mediante BlobContainerClient.Delete.
Agregue este código al final de main()
:
std::cout << "Deleting container: " << containerName << std::endl;
containerClient.Delete();
Ejecución del código
Esta aplicación crea un contenedor y carga un archivo de texto en Azure Blob Storage. Luego, en el ejemplo se enumeran los blobs del contenedor, se descarga el archivo y se muestra su contenido. Por último, la aplicación elimina tanto el blob como el contenedor.
La salida de la aplicación es similar a la del ejemplo siguiente:
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
Pasos siguientes
En este inicio rápido, ha aprendido a cargar, descargar y enumerar blobs mediante C++. También ha aprendido a crear y eliminar un contenedor de Azure Blob Storage.
Para ver un ejemplo de Blob Storage para C++, siga estos pasos: