Arbeit mit S3 und Cloud-Speichern in C++ mit Hilfe der AWS SDK für C++
\n\nIn 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\nBesonderheiten 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
Installation und Einbindung
\nDie 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\nIn CMakeLists.txt muss lediglich hinzugefügt werden:
\nfind_package(AWSSDK REQUIRED COMPONENTS s3)\ntarget_link_libraries(your_target PRIVATE ${AWSSDK_LINK_LIBRARIES})\n\nBasisbeispiel: Objekt in S3 hochladen
\nVor 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.
#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\nArbeit mit MinIO (lokaler S3-Speicher)
\nFü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 Auch in der Bibliothek
Testen in C++: Überblick über Frameworks und Tools (Google Test, Catch2, doctest)
Aufgabenwarteschlangen in Kotlin: Coroutines, Flow und Bibliotheken für die Hintergrundverarbeitung
Testen in C++: Überblick über Frameworks und Tools (Google Test, Catch2, doctest)
C++ Standardbibliothek: vollständiger Überblick und Codebeispiele
Arbeiten mit ZIP/Archiven in Go (Golang) — vollständige Anleitung