C++ में AWS SDK के साथ S3 और क्लाउड स्टोरेज का उपयोग
आधुनिक एप्लिकेशन डेवलपमेंट में क्लाउड स्टोरेज के साथ इंटीग्रेशन तेज़ी से आम होता जा रहा है। Amazon S3 (Simple Storage Service) क्लाउड में ऑब्जेक्ट स्टोरेज के लिए डी-फैक्टो मानक है। C++ भाषा के लिए सबसे शक्तिशाली और समर्थित समाधान आधिकारिक AWS SDK for C++ (aws-sdk-cpp) लाइब्रेरी है। यह न केवल S3 बल्कि MinIO, DigitalOcean Spaces, Yandex Object Storage और किसी भी अन्य S3-संगत स्टोरेज के साथ काम करने के लिए पूर्ण टूलसेट प्रदान करती है।
विशेषताएँ और लाभ
- पूर्ण API — लाइब्रेरी सभी S3 ऑपरेशन को कवर करती है: बकेट बनाना/हटाना, ऑब्जेक्ट अपलोड/डाउनलोड, वर्जनिंग, बड़ी फ़ाइलों की मल्टीथ्रेडेड अपलोडिंग।
- क्रॉस-प्लेटफ़ॉर्म — Linux, macOS, Windows और मोबाइल प्लेटफ़ॉर्म (iOS, Android) पर काम करती है।
- एसिंक्रोनस सपोर्ट — futures के माध्यम से async/await का बिल्ट-इन सपोर्ट, जो कुशल नॉन-ब्लॉकिंग कोड लिखने में मदद करता है।
- S3-विकल्पों के साथ संगतता — AWS S3 से MinIO या Yandex Object Storage पर स्विच करने के लिए केवल endpoint और credentials बदलने की आवश्यकता है।
- स्ट्रीम सपोर्ट — पूरी फ़ाइल को मेमोरी में सेव किए बिना
std::iostreamके माध्यम से सीधे डेटा अपलोड/डाउनलोड।
इंस्टॉलेशन और कनेक्शन
लाइब्रेरी vcpkg, Conan के माध्यम से वितरित की जाती है या सोर्स से बनाई जा सकती है। अनुशंसित तरीका vcpkg का उपयोग करना है:
# vcpkg इंस्टॉल करें (यदि पहले से नहीं है)
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh # या Windows के लिए bootstrap-vcpkg.bat
# S3 के लिए SDK इंस्टॉल करें
./vcpkg install aws-sdk-cpp[s3]
CMakeLists.txt में बस यह जोड़ें:
find_package(AWSSDK REQUIRED COMPONENTS s3)
target_link_libraries(your_target PRIVATE ${AWSSDK_LINK_LIBRARIES})
बेसिक उदाहरण: S3 में ऑब्जेक्ट अपलोड करना
शुरू करने से पहले क्रेडेंशियल सेट करना आवश्यक है। सबसे सुरक्षित तरीका ~/.aws/credentials फ़ाइल या AWS_ACCESS_KEY_ID और 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";
// रिक्वेस्ट तैयार करें
Aws::S3::Model::PutObjectRequest request;
request.SetBucket(bucket_name);
request.SetKey(object_key);
// फ़ाइल पढ़ें
auto input_data = Aws::MakeShared<Aws::FStream>("tag",
"local_file.txt", std::ios::in | std::ios::binary);
request.SetBody(input_data);
// रिक्वेस्ट निष्पादित करें
auto outcome = s3_client.PutObject(request);
if (outcome.IsSuccess()) {
std::cout << "फ़ाइल सफलतापूर्वक अपलोड हुई!" << std::endl;
} else {
std::cerr << "त्रुटि: " << outcome.GetError().GetMessage() << std::endl;
return 1;
}
}
Aws::ShutdownAPI(options);
return 0;
}
MinIO के साथ काम करना (लोकल S3 स्टोरेज)
डेवलपमेंट और टेस्टिंग के लिए MinIO का उपयोग करना सुविधाजनक है। SDK को MinIO के साथ काम करने के लिए, endpoint बदलना और SSL जाँच बंद करना आवश्यक है (यदि HTTPS कॉन्फ़िगर नहीं है):
#include <aws/core/Aws.h>
#include <aws/s3/S3Client.h>
int main() {
Aws::SDKOptions options;
Aws::InitAPI(options);
{
// MinIO के लिए क्लाइंट कॉन्फ़िगरेशन
Aws::Client::ClientConfiguration config;
config.endpointOverride = "http://localhost:9000"; // MinIO सर्वर का पता
config.scheme = Aws::Http::Scheme::HTTP; // HTTPS बंद करें
config.verifySSL = false; // SSL प्रमाणीकरण अक्षम करें
Aws::S3::S3Client s3_client(config);
// ... बाकी कोड यहाँ
}
Aws::ShutdownAPI(options);
return 0;
}