介紹如何安裝與使用 C++ 的 AWS 開發套件,開發 AWS 服務相關的 C++ 應用程式。
C++ 的 AWS 開發套件(SDK)可讓開發者在 C++ 語言中使用 AWS 的各種服務,開發整合式的 C++ 應用程式。本篇測試環境為 Ubuntu Linux 18.04。
安裝一些編譯所需的必要套件:
# 安裝必要套件
sudo apt-get install libssl-dev zlib1g-dev libcurl4-openssl-dev
從 AWS SDK for C++ 的 GitHub 網站下載原始碼:
# 下載 AWS SDK for C++
git clone https://github.com/aws/aws-sdk-cpp.git
以 CMake 編譯 AWS SDK for C++:
# 編譯 AWS SDK for C++ mkdir build cd build cmake ../aws-sdk-cpp/ -DCMAKE_BUILD_TYPE=Debug make -j48
編譯完成後,安裝 AWS SDK for C++:
# 安裝 AWS SDK for C++
sudo make install
以下是一個 AWS S3 檔案上傳與下載的簡單範例:
#include <aws/s3/S3Client.h> #include <aws/s3/model/PutObjectRequest.h> #include <aws/s3/model/GetObjectRequest.h> #include <aws/core/Aws.h> #include <aws/core/auth/AWSCredentialsProvider.h> #include <iostream> int main() { Aws::SDKOptions options; Aws::InitAPI(options); { // 自訂 S3 End Point const Aws::String endPoint = "YOUR.END.POINT"; // S3 Bucket 名稱 const Aws::String bucketName = "YOUR_BUCKET"; // 檔案名稱與內容 const Aws::String objectName = "hello.txt"; const std::string objectContent = "Hello, world."; // 認證資訊 const Aws::String accessKey = "ASFHDGN345JGS436FG53"; const Aws::String secretKey = "45G54d4cbGDF56bnFsfdgh489dfGHDdfgDFGHs4e"; // 建立 S3 Client Aws::Client::ClientConfiguration config; config.verifySSL = false; Aws::S3::S3Client s3Client(Aws::Auth::AWSCredentials(accessKey, secretKey), config); // 設定 S3 End Point s3Client.OverrideEndpoint(endPoint); // 建立上傳 Object 至 S3 的請求 Aws::S3::Model::PutObjectRequest putObjectRequest; putObjectRequest.SetBucket(bucketName); putObjectRequest.SetKey(objectName); // 建立資料輸入串流,可為任何串流,例如 fstream、stringstream 等 const std::shared_ptr<Aws::IOStream> inputStream = Aws::MakeShared<Aws::StringStream>(""); *inputStream << objectContent.c_str(); // 設定上傳至 S3 的資料輸入串流 putObjectRequest.SetBody(inputStream); // 將 Object 上傳至 S3 Aws::S3::Model::PutObjectOutcome putObjectOutcome = s3Client.PutObject(putObjectRequest); if(putObjectOutcome.IsSuccess()) { std::cout << "上傳成功" << std::endl; } else { std::cout << "上傳失敗:" << putObjectOutcome.GetError().GetExceptionName() << " " << putObjectOutcome.GetError().GetMessage() << std::endl; } // 建立從 S3 下載 Object 的請求 Aws::S3::Model::GetObjectRequest getObjectRequest; getObjectRequest.SetBucket(bucketName); getObjectRequest.SetKey(objectName); // 從 S3 下載 Object Aws::S3::Model::GetObjectOutcome getObjectOutcome = s3Client.GetObject(getObjectRequest); if(getObjectOutcome.IsSuccess()) { std::cout << "下載成功,資料內容:" << std::endl; std::cout << getObjectOutcome.GetResult().GetBody().rdbuf() << std::endl; } else { std::cout << "下載失敗:" << getObjectOutcome.GetError().GetExceptionName() << " " << getObjectOutcome.GetError().GetMessage() << std::endl; } } Aws::ShutdownAPI(options); return 0; }
編譯時需要搭配以下這一個 CMakeLists.txt
設定檔:
cmake_minimum_required(VERSION 3.8) # 使用 Shared 的 AWS C++ SDK 函式庫(預設狀況) option(BUILD_SHARED_LIBS "Build shared libraries" ON) # 設定專案名稱 project(Hello) # 尋找並引入 AWS SDK for C++ 函式庫 S3 套件 find_package(AWSSDK REQUIRED COMPONENTS s3) # 增加一個執行檔 add_executable(hello hello.cpp) # 以 C++11 標準編譯 target_compile_features(hello PUBLIC cxx_std_11) # 定義執行檔連結方式 target_link_libraries(hello ${AWSSDK_LINK_LIBRARIES})
關於 AWS SDK for C++ 的其他範例可參考 AWS SDK for C++ Code Examples 的網頁。
參考資料:AWS Developer Blog、AWS SDK for C++ Developer Guide、AWS SDK for C++ Developer Guide