AWS Cloud9 不再提供給新客戶。的現有客戶 AWS Cloud9 可以繼續正常使用服務。進一步了解
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
的 C++ 教學課程 AWS Cloud9
本教學課程可讓您在 AWS Cloud9 開發環境中執行 C++ 程式碼。程式碼也會使用 AWS SDK for C++ 提供的資源,這是一種模組化的跨平台開源程式庫,您可以使用它來連線到 Amazon Web Services。
遵循本教學課程並建立此範例可能會導致 AWS 您的帳戶產生費用。這包括 Amazon EC2和 Amazon S3 等服務的可能費用。如需詳細資訊,請參閱 Amazon EC2 Pricing
主題
必要條件
在您使用此範例前,請務必確認您的設定符合下列要求:
-
您必須具有現有的 AWS Cloud9 EC2開發環境。此範例假設您已有連線至執行 Amazon Linux 或 的 Amazon EC2執行個體EC2的環境 Ubuntu 伺服器。如果您有不同類型的環境或作業系統,您可能需要依照此範例的說明來設定相關工具。如需詳細資訊,請參閱在 中建立環境 AWS Cloud9。
-
您已經開啟現有環境的 AWS Cloud9 IDE。當您開啟環境時,請在 Web 瀏覽器中 AWS Cloud9 開啟該環境IDE的 。如需詳細資訊,請參閱在 AWS Cloud9 中開啟環境。
步驟 1:安裝 g ++ 和所需的開發套件
若要建置和執行 C++ 應用程式,您需要公用程式,例如 g++
,這是 GNU Complier Collection (GCC)
您還需要新增 libcurl
、libopenssl
、libuuid
、zlib
的標題檔案 (-dev
套件),以及支援 Amazon Polly 的 libpulse
(選用)。
視您使用的是 Amazon Linux/Amazon Linux 2 執行個體或 Ubuntu 執行個體,安裝開發工具的過程會略有不同。
步驟 2:安裝 CMake
您需要安裝 cmake
工具,它可以將從來源碼建置可執行檔的過程自動化。
-
在IDE終端機視窗中,執行下列命令以取得所需的封存:
wget https://cmake.org/files/v3.18/cmake-3.18.0.tar.gz
-
從封存檔中解壓縮檔案,並導覽至包含解壓縮檔案的目錄:
tar xzf cmake-3.18.0.tar.gz cd cmake-3.18.0
-
接下來,執行 Bootstrap 指令碼並執行下列命令來安裝
cmake
:./bootstrap make sudo make install
-
執行下列命令來確認您已安裝此工具:
cmake --version
步驟 3:取得並建置適用於 C++ SDK的
若要設定適用於 C++ 的 AWS SDK,您可以直接從來源建置 SDK ,或使用套件管理員下載程式庫。您可以在 AWS SDK for C++ 開發人員指南 中的使用 AWS SDK for C++ 入門中找到可用選項的詳細資訊。
此範例示範使用 git
來複製SDK原始程式碼cmake
,以及建置適用於 C++ SDK的 。
-
在終端機中執行下列命令,即可為 AWS Cloud9 環境複製遠端儲存庫並以遞迴方式取得所有 Git 子模組來:
git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp
-
導覽至新
aws-sdk-cpp
目錄,建立子目錄以建置適用於 C++ 的 AWS SDK,然後導覽至該目錄:cd aws-sdk-cpp mkdir sdk_build cd sdk_build
-
注意
為了節省時間,此步驟僅會建置 AWS SDK for C++的 Amazon S3 部分。如果您想要建置完整的 SDK,
-DBUILD_ONLY=s3
請從cmake
命令省略 。根據您的 Amazon EC2執行個體或您自己的伺服器可用的運算資源,建置 C++ SDK的完整 可能需要一個多小時才能完成。
使用
cmake
執行下列命令,將 SDK for C++ 的 Amazon S3 部分建置到sdk_build
目錄中:cmake .. -DBUILD_ONLY=s3
-
現在請執行
make install
命令,以便SDK存取建置的 :sudo make install cd ..
步驟 4:建立 C++ 和CMakeLists檔案
在此步驟中,您會建立 C++
檔案,藉此允許專案的使用者與 Amazon S3 儲存貯體互動。
您也可以建立 CMakeLists.txt
檔案,來提供 cmake
建置 C++ 程式庫時使用的指示。
-
在 中 AWS Cloud9 IDE,使用此內容建立檔案,並將名稱為 的檔案儲存在環境的根
s3-demo.cpp
(/
)。#include <iostream> #include <aws/core/Aws.h> #include <aws/s3/S3Client.h> #include <aws/s3/model/Bucket.h> #include <aws/s3/model/CreateBucketConfiguration.h> #include <aws/s3/model/CreateBucketRequest.h> #include <aws/s3/model/DeleteBucketRequest.h> // Look for a bucket among all currently available Amazon S3 buckets. bool FindTheBucket(const Aws::S3::S3Client &s3Client, const Aws::String &bucketName) { Aws::S3::Model::ListBucketsOutcome outcome = s3Client.ListBuckets(); if (outcome.IsSuccess()) { std::cout << "Looking for a bucket named '" << bucketName << "'..." << std::endl << std::endl; Aws::Vector<Aws::S3::Model::Bucket> bucket_list = outcome.GetResult().GetBuckets(); for (Aws::S3::Model::Bucket const &bucket: bucket_list) { if (bucket.GetName() == bucketName) { std::cout << "Found the bucket." << std::endl << std::endl; return true; } } std::cout << "Could not find the bucket." << std::endl << std::endl; } else { std::cerr << "listBuckets error: " << outcome.GetError().GetMessage() << std::endl; } return outcome.IsSuccess(); } // Create an Amazon S3 bucket. bool CreateTheBucket(const Aws::S3::S3Client &s3Client, const Aws::String &bucketName, const Aws::String ®ion) { std::cout << "Creating a bucket named '" << bucketName << "'..." << std::endl << std::endl; Aws::S3::Model::CreateBucketRequest request; request.SetBucket(bucketName); if (region != "us-east-1") { Aws::S3::Model::CreateBucketConfiguration createBucketConfig; createBucketConfig.SetLocationConstraint( Aws::S3::Model::BucketLocationConstraintMapper::GetBucketLocationConstraintForName( region)); request.SetCreateBucketConfiguration(createBucketConfig); } Aws::S3::Model::CreateBucketOutcome outcome = s3Client.CreateBucket(request); if (outcome.IsSuccess()) { std::cout << "Bucket created." << std::endl << std::endl; } else { std::cerr << "createBucket error: " << outcome.GetError().GetMessage() << std::endl; } return outcome.IsSuccess(); } // Delete an existing Amazon S3 bucket. bool DeleteTheBucket(const Aws::S3::S3Client &s3Client, const Aws::String &bucketName) { std::cout << "Deleting the bucket named '" << bucketName << "'..." << std::endl << std::endl; Aws::S3::Model::DeleteBucketRequest request; request.SetBucket(bucketName); Aws::S3::Model::DeleteBucketOutcome outcome = s3Client.DeleteBucket(request); if (outcome.IsSuccess()) { std::cout << "Bucket deleted." << std::endl << std::endl; } else { std::cerr << "deleteBucket error: " << outcome.GetError().GetMessage() << std::endl; } return outcome.IsSuccess(); } #ifndef EXCLUDE_MAIN_FUNCTION // Create an S3 bucket and then delete it. // Before and after creating the bucket, and again after deleting the bucket, // try to determine whether that bucket still exists. int main(int argc, char *argv[]) { if (argc < 3) { std::cout << "Usage: s3-demo <bucket name> <AWS Region>" << std::endl << "Example: s3-demo my-bucket us-east-1" << std::endl; return 1; } Aws::SDKOptions options; Aws::InitAPI(options); { Aws::String bucketName = argv[1]; Aws::String region = argv[2]; Aws::Client::ClientConfiguration config; config.region = region; Aws::S3::S3Client s3Client(config); if (!FindTheBucket(s3Client, bucketName)) { return 1; } if (!CreateTheBucket(s3Client, bucketName, region)) { return 1; } if (!FindTheBucket(s3Client, bucketName)) { return 1; } if (!DeleteTheBucket(s3Client, bucketName)) { return 1; } if (!FindTheBucket(s3Client, bucketName)) { return 1; } } Aws::ShutdownAPI(options); return 0; } #endif // EXCLUDE_MAIN_FUNCTION
-
再另外建立含有以下內容的檔案,然後儲存檔案到您環境的根目錄 (
/
) 並命名為CMakeLists.txt
。此檔案讓您能夠將程式碼建置成可執行檔。# A minimal CMakeLists.txt file for the AWS SDK for C++. # The minimum version of CMake that will work. cmake_minimum_required(VERSION 2.8) # The project name. project(s3-demo) # Locate the AWS SDK for C++ package. set(AWSSDK_ROOT_DIR, "/usr/local/") set(BUILD_SHARED_LIBS ON) find_package(AWSSDK REQUIRED COMPONENTS s3) # The executable name and its source files. add_executable(s3-demo s3-demo.cpp) # The libraries used by your executable. target_link_libraries(s3-demo ${AWSSDK_LINK_LIBRARIES})
步驟 5:建置並執行 C++ 程式碼
-
在您儲存
s3-demo.cpp
和CMakeLists.txt
的環境根目錄中,執行cmake
來建置您的專案:cmake . make
-
您至此已可以從命令列執行程式。在下列命令中,將
my-unique-bucket-name
替換為 Amazon S3 儲存貯體的唯一名稱,如有必要,請將us-east-1
更換為您要建立儲存貯體的其他 AWS 區域的識別碼。./s3-demo my-unique-bucket-name us-east-1
如果程式成功執行,系統會傳回類似如下的輸出內容:
Looking for a bucket named 'my-unique-bucket-name'... Could not find the bucket. Creating a bucket named 'my-unique-bucket-name'... Bucket created. Looking for a bucket named 'my-unique-bucket-name'... Found the bucket. Deleting the bucket named 'my-unique-bucket-name'... Bucket deleted. Looking for a bucket named 'my-unique-bucket-name'... Could not find the bucket.
步驟 6:清除
若要避免在您完成此範例後持續向 AWS 您的帳戶收取費用,請刪除環境。如需說明,請參閱「刪除 AWS Cloud9 中的環境」。