介紹如何安裝與使用 C++ 的 AWS 開發套件,開發 AWS 服務相關的 C++ 應用程式。
C++ 的 AWS 開發套件(SDK)可讓開發者在 C++ 語言中使用 AWS 的各種服務,開發整合式的 C++ 應用程式。本篇測試環境為 Ubuntu Linux 18.04。
安裝 AWS SDK for C++
安裝一些編譯所需的必要套件:
# 安裝必要套件
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 SDK for C++ 應用程式
以下是一個 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 的網頁。
