

 AWS Cloud9 不再提供給新客戶。 AWS Cloud9 的現有客戶可以繼續正常使用該服務。[進一步了解](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

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

# 的 C\$1\$1 教學課程 AWS Cloud9
<a name="sample-cplusplus"></a>

本教學課程可讓您在 AWS Cloud9 開發環境中執行 C\$1\$1 程式碼。程式碼也會使用 [適用於 C\$1\$1 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/welcome.html) 提供的資源，這是一種模組化的跨平台開源程式庫，您可以使用它來連線到 Amazon Web Services。

遵循本教學課程並建立此範例可能會導致 AWS 您的帳戶產生費用。其中包括 Amazon EC2 和 Amazon S3 這類服務可能的費用。如需詳細資訊，請參閱 [Amazon EC2 定價](https://aws.amazon.com/ec2/pricing/)和 [Amazon S3 定價](https://aws.amazon.com/s3/pricing/)。

**Topics**
+ [先決條件](#sample-cplusplus-prereqs)
+ [步驟 1：安裝 g \$1\$1 和所需的開發套件](#sample-cplusplus-install)
+ [步驟 2：安裝 CMake](#install-cmake)
+ [步驟 3：取得並建置適用於 C\$1\$1 的 SDK](#install-cmake)
+ [步驟 4：建立 C \$1\$1 和 CMakeLists 檔案](#sample-cplusplus-sdk-code)
+ [步驟 5：建置並執行 C\$1\$1 程式碼](#build-and-run-cpp)
+ [步驟 6：清除](#sample-cplusplus-clean-up)

## 先決條件
<a name="sample-cplusplus-prereqs"></a>

在您使用此範例前，請務必確認您的設定符合下列要求：
+ **您必須擁有現有的 AWS Cloud9 EC2 開發環境。**本範例假設您已具備 EC2 環境，且該環境已連線到執行 Amazon Linux 或 Ubuntu Server 的 Amazon EC2 執行個體。如果您有不同類型的環境或作業系統，您可能需要依照此範例的說明來設定相關工具。如需詳細資訊，請參閱[在 中建立環境 AWS Cloud9](create-environment.md)。
+ **您已開啟現有環境的 AWS Cloud9 IDE。**當您開啟環境時，請在 Web 瀏覽器中 AWS Cloud9 開啟該環境的 IDE。如需詳細資訊，請參閱[在 中開啟環境 AWS Cloud9](open-environment.md)。

## 步驟 1：安裝 g \$1\$1 和所需的開發套件
<a name="sample-cplusplus-install"></a>

要建置和執行 C\$1\$1 應用程式，你需要 `g++` 這類應用程式，它是由 [GNU 編譯器集合 (GCC)](https://gcc.gnu.org/) 所提供的 C\$1\$1 編譯器。

您還需要新增 `libcurl`、`libopenssl`、`libuuid`、`zlib` 的標題檔案 (`-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
<a name="install-cmake"></a>

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

1. 在 IDE 終端機視窗中，執行下列命令來取得必要的封存檔：

   ```
   wget https://cmake.org/files/v3.18/cmake-3.18.0.tar.gz
   ```

1. 從封存檔中解壓縮檔案，並導覽至包含解壓縮檔案的目錄：

   ```
   tar xzf cmake-3.18.0.tar.gz
   cd cmake-3.18.0
   ```

1. 接下來，執行 Bootstrap 指令碼並執行下列命令來安裝 `cmake`：

   ```
   ./bootstrap
   make
   sudo make install
   ```

1. 執行下列命令來確認您已安裝此工具：

   ```
   cmake --version
   ```

## 步驟 3：取得並建置適用於 C\$1\$1 的 SDK
<a name="install-cmake"></a>

若要設定適用於 C\$1\$1 的 AWS SDK，您可以直接從來源自行建置 SDK，或使用套件管理員下載程式庫。您可以在《 *適用於 C\$1\$1 的 AWS SDK 開發人員指南*》中的[使用適用於 C\$1\$1 的 AWS SDK 入門](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/getting-started.html)中找到可用選項的詳細資訊。

此範例將示範如何使用 `git` 來複製 SDK 來源碼，以及使用 `cmake` 來建置 C\$1\$1 的 SDK。

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

   ```
   git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp
   ```

1. 導覽至新`aws-sdk-cpp`目錄，建立子目錄以建置適用於 C\$1\$1 的 AWS SDK，然後導覽至該目錄：

   ```
   cd aws-sdk-cpp
   mkdir sdk_build
   cd sdk_build
   ```

1. 
**注意**  
為了節省時間，此步驟僅會建置 適用於 C\$1\$1 的 AWS SDK的 Amazon S3 部分。如果您想要建置完整的 SDK，請刪減 `cmake` 命令中的 `-DBUILD_ONLY=s3`。  
為 C\$1\$1 建置完整 SDK 可能需要一個多小時才會完成，具體時間視您的 Amazon EC2 執行個體或自有伺服器中的可用運算資源而定。

   執行下列命令，藉此使用 `cmake` 在 `sdk_build` 目錄中建置 C\$1\$1 SDK 的 Amazon S3 部分：

   ```
   cmake .. -DBUILD_ONLY=s3
   ```

1. 接著請執行 `make install` 命令，以便使建置的 SDK 可供存取：

   ```
   sudo make install
   cd ..
   ```

## 步驟 4：建立 C \$1\$1 和 CMakeLists 檔案
<a name="sample-cplusplus-sdk-code"></a>

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

您也可以建立 `CMakeLists.txt` 檔案，來提供 `cmake` 建置 C\$1\$1 程式庫時使用的指示。

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
   ```

1. 再另外建立含有以下內容的檔案，然後儲存檔案到您環境的根目錄 (`/`) 並命名為 `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\$1 程式碼
<a name="build-and-run-cpp"></a>

1. 在您儲存 `s3-demo.cpp` 和 `CMakeLists.txt` 的環境根目錄中，執行 `cmake` 來建置您的專案：

   ```
   cmake . 
   make
   ```

1. 您至此已可以從命令列執行程式。在下列命令中，將 `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：清除
<a name="sample-cplusplus-clean-up"></a>

若要避免在您完成此範例後持續向您的 AWS 帳戶收取費用，請刪除環境。如需說明，請參閱[在 中刪除環境 AWS Cloud9](delete-environment.md)。