Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 de API | Código fuente de la biblioteca | Ejemplos |
Prerrequisitos
- 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++
Configuración
En esta sección se explica cómo preparar un proyecto para trabajar con la biblioteca cliente de Azure Blob Storage para C++. La manera más fácil de adquirir el SDK de Azure para C++ es usar el administrador de vcpkg paquetes.
Instalación de los paquetes
Use el vcpkg install comando para instalar la biblioteca de Azure Blob Storage para C++ y las dependencias necesarias:
vcpkg.exe install azure-storage-blobs-cpp
La biblioteca de identidades de Azure 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 denominada 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 adhieren a un modelo o definición de datos 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
BlobServiceClientpermite manipular recursos de Azure Storage y contenedores de blobs. -
BlobContainerClient: la clase
BlobContainerClientpermite manipular contenedores de Azure Storage y sus blobs. -
BlobClient: la clase
BlobClientpermite manipular los blobs de Azure Storage. Es la clase base para todas las clases de blobs especializadas. -
BlockBlobClient: la
BlockBlobClientclase permite manipular 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++:
- Incluir archivos
- 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 solución BlobQuickstart.sln en Visual Studio.
- Dentro de Visual Studio, abra el archivo fuente BlobQuickstart.cpp
- Quitar cualquier código dentro de
mainque fue generado automáticamente - Agregue las Instrucciones
#includeyusing 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 Azure Identity ofrece compatibilidad con la autenticación de tokens de Microsoft Entra en el SDK de Azure. Proporciona un conjunto de TokenCredential implementaciones que se pueden usar para construir clientes del SDK de Azure que admiten 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. Para obtener más información sobre el rol, consulte Colaborador de datos de Storage Blob. Para obtener más información sobre los ámbitos disponibles para las asignaciones de roles, consulte Descripción del ámbito de RBAC de Azure.
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.
Inicie sesión y conecte el 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 comando siguiente:
az loginPara usar
DefaultAzureCredential, asegúrese de que el paquete azure-identity-cpp está instalado y se agrega lo siguiente#include:#include <azure/identity/default_azure_credential.hpp>Agregue este código al final de
main(). Cuando el código se ejecuta en la estación de trabajo local,DefaultAzureCredentialusa las credenciales de desarrollador de la CLI de Azure 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
BlobServiceClientobjeto. 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á la aplicación. En lugar de usar
DefaultAzureCredential, debe autorizar mediante un tipo de credencial específico o usandoChainedTokenCredentialcon las credenciales admitidas.
Creación de 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
Fragmento de código siguiente:
- Declara una cadena que contiene "Hello Azure!"
- Obtiene una referencia a un objeto BlockBlobClient llamando a GetBlockBlobClient en el contenedor desde la sección Crear un contenedor .
- Carga la cadena en el blob llamando a la función UploadFrom . Esta función crea el blob si aún no existe o lo actualiza si lo hace.
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));
Enumerar los blobs de un contenedor
Enumere los blobs del contenedor llamando a la función ListBlobs . Solo se ha agregado un blob al contenedor, por lo que la operación solo devuelve ese 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. A continuación, declare y cambie el tamaño de un nuevo std::vector<uint8_t> objeto mediante las propiedades del blob cargado. Descargue el blob creado anteriormente en el nuevo std::vector<uint8_t> objeto llamando a la función DownloadTo en la clase base BlobClient . Por último, muestre los datos de blobs descargados.
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 mediante una llamada 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 mediante la eliminación del contenedor completo mediante BlobContainerClient.Eliminar.
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. A continuación, en el ejemplo se enumeran los blobs del contenedor, se descarga el archivo y se muestra el contenido del archivo. Por último, la aplicación elimina el blob y 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 C++ Blob Storage, continúe: