Arbeit mit S3 und Cloud-Speichern in C++: Die AWS SDK für C++ Bibliothek

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeit mit S3 und Cloud-Speichern in C++ mit Hilfe der AWS SDK für C++

\n\n

In der modernen Anwendungsentwicklung wird zunehmend eine Integration mit Cloud-Speichern benötigt. Amazon S3 (Simple Storage Service) ist der De-facto-Standard für die Objektspeicherung in der Cloud. Für die Sprache C++ ist die offizielle Bibliothek AWS SDK für C++ (aws-sdk-cpp) die leistungsstärkste und am besten unterstützte Lösung. Sie bietet einen vollständigen Satz von Werkzeugen für die Arbeit nicht nur mit S3, sondern auch mit MinIO, DigitalOcean Spaces, Yandex Object Storage und allen anderen S3-kompatiblen Speichern.

\n\n

Besonderheiten und Vorteile

\n
    \n
  • Vollständigkeit der API — Die Bibliothek deckt alle S3-Operationen ab: Erstellen/Löschen von Buckets, Hochladen/Herunterladen von Objekten, Versionsverwaltung, mehrfädiger Upload großer Dateien.
  • \n
  • Plattformunabhängigkeit — Funktioniert unter Linux, macOS, Windows sowie auf mobilen Plattformen (iOS, Android).
  • \n
  • Asynchronität — Integrierte Unterstützung für async/await über Futures, was das Schreiben von effizientem, nicht-blockierendem Code ermöglicht.
  • \n
  • Kompatibilität mit S3-Alternativen — Es genügt, den Endpunkt und die Anmeldeinformationen zu ändern, um von AWS S3 auf MinIO oder Yandex Object Storage umzusteigen.
  • \n
  • Stream-Unterstützung — Hochladen/Herunterladen von Daten direkt über std::iostream, ohne die gesamte Datei im Speicher zu halten.
  • \n
\n\n

Installation und Einbindung

\n

Die Bibliothek wird über vcpkg, Conan vertrieben oder aus den Quellen erstellt. Die empfohlene Methode ist über vcpkg:

\n
# Installation von vcpkg (falls noch nicht installiert)\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh  # oder bootstrap-vcpkg.bat für Windows\n\n# Installation des SDK für S3\n./vcpkg install aws-sdk-cpp[s3]
\n\n

In CMakeLists.txt muss lediglich hinzugefügt werden:

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

Basisbeispiel: Objekt in S3 hochladen

\n

Vor Arbeitsbeginn müssen die Anmeldeinformationen konfiguriert werden. Der sicherste Weg ist die Verwendung der Datei ~/.aws/credentials oder der Umgebungsvariablen AWS_ACCESS_KEY_ID und 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        // Vorbereitung der Anfrage\n        Aws::S3::Model::PutObjectRequest request;\n        request.SetBucket(bucket_name);\n        request.SetKey(object_key);\n\n        // Lesen der Datei\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        // Ausführen der Anfrage\n        auto outcome = s3_client.PutObject(request);\n        if (outcome.IsSuccess()) {\n            std::cout << "Datei erfolgreich hochgeladen!" << std::endl;\n        } else {\n            std::cerr << "Fehler: " << outcome.GetError().GetMessage() << std::endl;\n            return 1;\n        }\n    }\n    Aws::ShutdownAPI(options);\n    return 0;\n}
\n\n

Arbeit mit MinIO (lokaler S3-Speicher)

\n

Für die Entwicklung und das Testen ist die Verwendung von MinIO praktisch. Damit das SDK mit MinIO funktioniert, muss der Endpunkt geändert und die SSL-Überprüfung deaktiviert werden (falls HTTPS nicht eingerichtet ist):

\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        // Konfiguration des Clients für MinIO\n        Aws::Client::ClientConfigura                    

Empfehlungen