的 C++ 教學課程 AWS Cloud9 - AWS Cloud9

AWS Cloud9 不再提供給新客戶。的現有客戶 AWS Cloud9 可以繼續正常使用服務。進一步了解

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

的 C++ 教學課程 AWS Cloud9

本教學課程可讓您在 AWS Cloud9 開發環境中執行 C++ 程式碼。程式碼也會使用 AWS SDK for C++ 提供的資源,這是一種模組化的跨平台開源程式庫,您可以使用它來連線到 Amazon Web Services。

遵循本教學課程並建立此範例可能會導致 AWS 您的帳戶產生費用。這包括 Amazon EC2和 Amazon S3 等服務的可能費用。如需詳細資訊,請參閱 Amazon EC2 PricingAmazon S3 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) 提供的 C++ 編譯器。

您還需要新增 libcurllibopenssllibuuidzlib 的標題檔案 (-dev 套件),以及支援 Amazon Polly 的 libpulse (選用)。

視您使用的是 Amazon Linux/Amazon Linux 2 執行個體或 Ubuntu 執行個體,安裝開發工具的過程會略有不同。

Amazon Linux-based systems

您可以在 AWS Cloud9 終端機中執行下列命令來檢查是否已gcc安裝 :

g++ --version

如果尚未安裝 g++,您可以輕鬆地安裝套件群組中名為「開發工具」的部分。您可以使用 yum groupinstall 命令將這些工具新增至執行個體:

sudo yum groupinstall "Development Tools"

再次執行 g++ --version 確認編譯器已安裝。

接著使用系統的套件管理員安裝所需程式庫的套件:

sudo yum install libcurl-devel openssl-devel libuuid-devel pulseaudio-libs-devel
Ubuntu-based systems

您可以在 AWS Cloud9 終端機中執行下列命令來檢查是否已gcc安裝 :

g++ --version

如果沒有安裝 gcc,您可以執行以下命令,藉此安裝在以 Ubuntu 為基礎的系統上:

sudo apt update sudo apt install build-essential sudo apt-get install manpages-dev

再次執行 g++ --version 確認編譯器已安裝。

接著使用系統的套件管理員安裝所需程式庫的套件:

sudo apt-get install libcurl4-openssl-dev libssl-dev uuid-dev zlib1g-dev libpulse-dev

步驟 2:安裝 CMake

您需要安裝 cmake 工具,它可以將從來源碼建置可執行檔的過程自動化。

  1. 在IDE終端機視窗中,執行下列命令以取得所需的封存:

    wget https://cmake.org/files/v3.18/cmake-3.18.0.tar.gz
  2. 從封存檔中解壓縮檔案,並導覽至包含解壓縮檔案的目錄:

    tar xzf cmake-3.18.0.tar.gz cd cmake-3.18.0
  3. 接下來,執行 Bootstrap 指令碼並執行下列命令來安裝 cmake

    ./bootstrap make sudo make install
  4. 執行下列命令來確認您已安裝此工具:

    cmake --version

步驟 3:取得並建置適用於 C++ SDK的

若要設定適用於 C++ 的 AWS SDK,您可以直接從來源建置 SDK ,或使用套件管理員下載程式庫。您可以在 AWS SDK for C++ 開發人員指南 中的使用 AWS SDK for C++ 入門中找到可用選項的詳細資訊。

此範例示範使用 git 來複製SDK原始程式碼cmake,以及建置適用於 C++ SDK的 。

  1. 在終端機中執行下列命令,即可為 AWS Cloud9 環境複製遠端儲存庫並以遞迴方式取得所有 Git 子模組來:

    git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp
  2. 導覽至新aws-sdk-cpp目錄,建立子目錄以建置適用於 C++ 的 AWS SDK,然後導覽至該目錄:

    cd aws-sdk-cpp mkdir sdk_build cd sdk_build
  3. 注意

    為了節省時間,此步驟僅會建置 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
  4. 現在請執行 make install命令,以便SDK存取建置的 :

    sudo make install cd ..

步驟 4:建立 C++ 和CMakeLists檔案

在此步驟中,您會建立 C++ 檔案,藉此允許專案的使用者與 Amazon S3 儲存貯體互動。

您也可以建立 CMakeLists.txt 檔案,來提供 cmake 建置 C++ 程式庫時使用的指示。

  1. 在 中 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 &region) { 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
  2. 再另外建立含有以下內容的檔案,然後儲存檔案到您環境的根目錄 (/) 並命名為 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++ 程式碼

  1. 在您儲存 s3-demo.cppCMakeLists.txt 的環境根目錄中,執行 cmake 來建置您的專案:

    cmake . make
  2. 您至此已可以從命令列執行程式。在下列命令中,將 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 中的環境」。