Travailler avec S3 et les stockages cloud en C++ : la bibliothèque AWS SDK pour C++

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

Travailler avec S3 et les stockages cloud en C++ à l'aide d'AWS SDK pour C++

\n\n

Dans le développement d'applications moderne, l'intégration avec les stockages cloud est de plus en plus courante. Amazon S3 (Simple Storage Service) est le standard de facto pour le stockage d'objets dans le cloud. Pour le langage C++, la solution la plus puissante et la mieux prise en charge est la bibliothèque officielle AWS SDK pour C++ (aws-sdk-cpp). Elle fournit un ensemble complet d'outils pour travailler non seulement avec S3, mais aussi avec MinIO, DigitalOcean Spaces, Yandex Object Storage et tout autre stockage compatible S3.

\n\n

Caractéristiques et avantages

\n
    \n
  • API complète — la bibliothèque couvre toutes les opérations S3 : création/suppression de buckets, téléchargement/téléchargement d'objets, gestion des versions, téléchargement multi-thread de gros fichiers.
  • \n
  • Multiplateforme — fonctionne sur Linux, macOS, Windows, ainsi que sur les plateformes mobiles (iOS, Android).
  • \n
  • Asynchrone — prise en charge intégrée d'async/await via des futures, permettant d'écrire du code non bloquant efficace.
  • \n
  • Compatibilité avec les alternatives S3 — il suffit de modifier l'endpoint et les credentials pour passer d'AWS S3 à MinIO ou Yandex Object Storage.
  • \n
  • Prise en charge des flux — téléchargement/téléchargement de données directement via std::iostream sans stocker l'intégralité du fichier en mémoire.
  • \n
\n\n

Installation et connexion

\n

La bibliothèque est distribuée via vcpkg, Conan ou compilée à partir des sources. La méthode recommandée est via vcpkg :

\n
# Installation de vcpkg (si pas déjà installé)\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh  # ou bootstrap-vcpkg.bat pour Windows\n\n# Installation du SDK pour S3\n./vcpkg install aws-sdk-cpp[s3]
\n\n

Dans CMakeLists.txt, il suffit d'ajouter :

\n
find_package(AWSSDK REQUIRED COMPONENTS s3)\ntarget_link_libraries(your_target PRIVATE ${AWSSDK_LINK_LIBRARIES})
\n\n

Exemple de base : téléchargement d'un objet dans S3

\n

Avant de commencer, il est nécessaire de configurer les identifiants. La méthode la plus sûre est d'utiliser le fichier ~/.aws/credentials ou les variables d'environnement AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY.

\n
#include <aws/core/Aws.h>\n#include <aws/s3/S3Client.h>\n#include <aws/s3/model/PutObjectRequest.h>\n#include <fstream>\n\nint main() {\n    Aws::SDKOptions options;\n    Aws::InitAPI(options);\n    {\n        Aws::S3::S3Client s3_client;\n\n        const Aws::String bucket_name = "my-bucket";\n        const Aws::String object_key = "example.txt";\n\n        // Préparation de la requête\n        Aws::S3::Model::PutObjectRequest request;\n        request.SetBucket(bucket_name);\n        request.SetKey(object_key);\n\n        // Lecture du fichier\n        auto input_data = Aws::MakeShared<Aws::FStream>("tag",\n            "local_file.txt", std::ios::in | std::ios::binary);\n        request.SetBody(input_data);\n\n        // Exécution de la requête\n        auto outcome = s3_client.PutObject(request);\n        if (outcome.IsSuccess()) {\n            std::cout << "Fichier téléchargé avec succès !" << std::endl;\n        } else {\n            std::cerr << "Erreur : " << outcome.GetError().GetMessage() << std::endl;\n            return 1;\n        }\n    }\n    Aws::ShutdownAPI(options);\n    return 0;\n}
\n\n

Travailler avec MinIO (stockage S3 local)

\n

Pour le développement et les tests, il est pratique d'utiliser MinIO. Pour que le SDK fonctionne avec MinIO, il faut modifier l'endpoint et désactiver la vérification SSL (si HTTPS n'est pas configuré) :

\n
#include <aws/core/Aws.h>\n#include <aws/s3/S3Client.h>\n\nint main() {\n    Aws::SDKOptions options;\n    Aws::InitAPI(options);\n    {\n        // Configuration du client pour MinIO\n        Aws::Client::ClientConfigura                    

Recommendations