Travailler avec S3 et les stockages cloud en C++ : la bibliothèque aws-sdk-cpp

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Bibliothèque aws-sdk-cpp : intégration de S3 et des stockages cloud en C++



Les applications C++ modernes nécessitent de plus en plus souvent une interaction avec les stockages cloud. Qu'il s'agisse de sauvegarde, de stockage de fichiers multimédias ou d'échange de données entre services, les stockages compatibles S3 (Amazon S3, MinIO, Yandex Object Storage, DigitalOcean Spaces) sont devenus le standard de facto. La bibliothèque officielle aws-sdk-cpp d'Amazon fournit une boîte à outils puissante et flexible pour travailler avec S3 directement depuis le code C++.



Dans cet article, nous allons voir comment connecter aws-sdk-cpp, configurer l'authentification, effectuer des opérations de base avec les objets et les buckets, et examiner les particularités du travail avec les stockages compatibles.



Qu'est-ce que aws-sdk-cpp ?



aws-sdk-cpp est le SDK officiel d'Amazon Web Services pour le langage C++. Il inclut des modules pour tous les principaux services AWS, notamment S3, DynamoDB, Lambda, EC2 et autres. Pour travailler avec les stockages cloud, on utilise le module S3, qui prend en charge :



  • La création, la suppression et l'énumération des buckets.
  • Le téléversement, le téléchargement, la copie et la suppression d'objets.
  • Le travail avec le téléversement multipart (multipart upload) pour les fichiers volumineux.
  • La gestion des métadonnées et des ACL (Access Control Lists).
  • La prise en charge du streaming de données et des opérations asynchrones.


Installation et connexion



La façon la plus simple d'installer le SDK est via le gestionnaire de paquets vcpkg :



vcpkg install aws-sdk-cpp[s3]


Pour une compilation manuelle à partir des sources, vous aurez besoin de CMake et d'un compilateur prenant en charge C++14 ou plus récent. Après l'installation, connectez la bibliothèque dans CMakeLists.txt :



find_package(aws-sdk-cpp REQUIRED COMPONENTS s3 s3-crt)target_link_libraries(your_project PRIVATE AWS::aws-cpp-sdk-s3 AWS::aws-cpp-sdk-s3-crt)


Notez que s3-crt est une implémentation alternative basée sur Common Runtime, qui offre de meilleures performances pour les opérations de streaming.



Configuration du client S3



Avant de commencer, vous devez créer un objet Aws::S3::S3Client. Pour accéder aux stockages compatibles (par exemple, MinIO ou Yandex Object Storage), vous devez spécifier un endpoint personnalisé :



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

Aws::SDKOptions options;Aws::InitAPI(options);{ Aws::Client::ClientConfiguration config; config.endpointOverride = "https://storage.yandexcloud.net"; // pour Yandex Object Storage config.region = "ru-central1"; config.scheme = Aws::Http::Scheme::HTTPS;

// Pour MinIO en local : config.endpointOverride = "http://localhost:9000"; // config.region = "us-east-1"; // MinIO utilise cette région par défaut

Aws::Auth::AWSCredentials credentials("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY"); Aws::S3::S3Client s3_client(credentials, config);

// Ensuite, travaillez avec le client}Aws::ShutdownAPI(options);


Exemple : téléversement d'un fichier vers S3



Examinons l'opération de base — le téléversement d'un fichier local vers un bucket :



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

bool UploadFile(const Aws::S3::S3Client& client, const std::string& bucket_name, const std::string& object_key, const std::string& file_path){ Aws::S3::Model::PutObjectRequest request; request.SetBucket(bucket_name); request.SetKey(object_key);

std::shared_ptr<Aws::IOStream> input_data = Aws::MakeShared<Aws::FStream>("UploadFile", file_path.c_str(), std::ios_base::in | std::ios_base::binary);

if (!input_data->good())\

Recommendations