Trabajo con S3 y almacenamiento en la nube en C++: biblioteca AWS SDK para C++

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con S3 y almacenamiento en la nube en C++ con AWS SDK para C++



En el desarrollo moderno de aplicaciones, cada vez se requiere más la integración con almacenamiento en la nube. Amazon S3 (Simple Storage Service) es el estándar de facto para el almacenamiento de objetos en la nube. Para el lenguaje C++, la solución más potente y con soporte es la biblioteca oficial AWS SDK para C++ (aws-sdk-cpp). Proporciona un conjunto completo de herramientas para trabajar no solo con S3, sino también con MinIO, DigitalOcean Spaces, Yandex Object Storage y cualquier otro almacenamiento compatible con S3.



Características y ventajas

  • API completa — la biblioteca cubre todas las operaciones de S3: creación/eliminación de buckets, carga/descarga de objetos, gestión de versiones, carga multiproceso de archivos grandes.
  • Multiplataforma — funciona en Linux, macOS, Windows, así como en plataformas móviles (iOS, Android).
  • Asincronía — soporte integrado para async/await mediante futures, lo que permite escribir código no bloqueante eficiente.
  • Compatibilidad con alternativas a S3 — basta con cambiar el endpoint y las credenciales para cambiar de AWS S3 a MinIO o Yandex Object Storage.
  • Soporte de flujos — carga/descarga de datos directamente a través de std::iostream sin almacenar todo el archivo en memoria.


Instalación y configuración

La biblioteca se distribuye a través de vcpkg, Conan o se compila desde el código fuente. La forma recomendada es mediante vcpkg:

# Instalación de vcpkg (si aún no está instalado)git clone https://github.com/Microsoft/vcpkg.gitcd vcpkg./bootstrap-vcpkg.sh  # o bootstrap-vcpkg.bat para Windows

# Instalación del SDK para S3./vcpkg install aws-sdk-cpp[s3]


En CMakeLists.txt basta con añadir:

find_package(AWSSDK REQUIRED COMPONENTS s3)target_link_libraries(your_target PRIVATE ${AWSSDK_LINK_LIBRARIES})


Ejemplo básico: cargar un objeto en S3

Antes de comenzar, es necesario configurar las credenciales. La forma más segura es usar el archivo ~/.aws/credentials o las variables de entorno AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY.

#include <aws/core/Aws.h>#include <aws/s3/S3Client.h>#include <aws/s3/model/PutObjectRequest.h>#include <fstream>

int main() { Aws::SDKOptions options; Aws::InitAPI(options); { Aws::S3::S3Client s3_client;

const Aws::String bucket_name = "my-bucket"; const Aws::String object_key = "example.txt";

// Preparación de la solicitud Aws::S3::Model::PutObjectRequest request; request.SetBucket(bucket_name); request.SetKey(object_key);

// Lectura del archivo auto input_data = Aws::MakeShared<Aws::FStream>("tag", "local_file.txt", std::ios::in | std::ios::binary); request.SetBody(input_data);

// Ejecución de la solicitud auto outcome = s3_client.PutObject(request); if (outcome.IsSuccess()) { std::cout << "¡Archivo cargado exitosamente!" << std::endl; } else { std::cerr << "Error: " << outcome.GetError().GetMessage() << std::endl; return 1; } } Aws::ShutdownAPI(options); return 0;}


Trabajo con MinIO (almacenamiento S3 local)

Para desarrollo y pruebas es conveniente usar MinIO. Para que el SDK funcione con MinIO, es necesario cambiar el endpoint y deshabilitar la verificación SSL (si no está configurado HTTPS):

#include <aws/core/Aws.h>#include <aws/s3/S3Client.h>

int main() { Aws::SDKOptions options; Aws::InitAPI(options); { // Configuración del cliente para MinIO Aws::Client::ClientConfigura

Recommendations