

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

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

# AWS CDK 的 教學課程 AWS Cloud9
<a name="sample-cdk"></a>

本教學課程說明如何 AWS Cloud Development Kit (AWS CDK) 在 AWS Cloud9 開發環境中使用 。 AWS CDK 是一組軟體工具和程式庫，開發人員可用來將 AWS 基礎設施元件建模為程式碼。

 AWS CDK 包含 AWS 建構程式庫，您可以用來快速解決許多任務 AWS。例如，您可以使用 `Fleet` 建構，完全且安全地部署程式碼到主機群。您可以建立自己的結構，為您的架構的各種元素建立模型，或與他人共享，或將它們發佈到社群。如需詳細資訊，請參閱 [AWS Cloud Development Kit 開發人員指南](https://docs.aws.amazon.com/cdk/v2/guide/home.html)。

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

**Topics**
+ [先決條件](#sample-cdk-prereqs)
+ [步驟 1：安裝必要工具](#sample-cdk-install)
+ [步驟 2：新增程式碼](#sample-cdk-code)
+ [步驟 3：執行程式碼](#sample-cdk-run)
+ [步驟 4：清理](#sample-cdk-clean-up)

## 先決條件
<a name="sample-cdk-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：安裝必要工具
<a name="sample-cdk-install"></a>

在此步驟中，您會在環境中安裝 AWS CDK 所需的所有工具，以執行以 TypeScript 程式設計語言撰寫的範例。

1.  [Node Version Manager](#sample-cdk-install-nvm) 或 ** `nvm` ** (用於稍後安裝 Node.js)。

1.  範例需要的 [Node.js](#sample-cdk-install-nodejs)，其中包含 Node Package Manager 或 ** `npm` **，您用來安裝 TypeScript 和 AWS CDK 更新版本。

1.  [TypeScript](#sample-cdk-install-typescript)，其為此範例所需。( AWS CDK 也支援數種其他程式設計語言。)

1. [AWS CDK](#sample-cdk-install-cdk)。

### 步驟 1.1：安裝 Node Version Manager (nvm)
<a name="sample-cdk-install-nvm"></a>

1. 在 IDE AWS Cloud9 的終端機工作階段中，確保已安裝最新的安全性更新和錯誤修正。若要這麼做，請執行 **`yum update`** 命令 (適用於 Amazon Linux) 或 **`apt update`** 命令 (適用於 Ubuntu Server)。(若要啟動新終端機工作階段，請在選單列上，選擇 **Window** (視窗)、**New Terminal** (新增終端機)。

   針對 Amazon Linux：

   ```
   sudo yum -y update
   ```

   針對 Ubuntu Server：

   ```
   sudo apt update
   ```

1. 確認是否已安裝 ** `nvm` **。若要這樣做，請執行 ** `nvm` ** 命令與 ** `--version` **選項。

   ```
   nvm --version
   ```

   如果成功，輸出內容會包含 **`nvm`** 版本編號，而您可以直接跳到 [步驟 1.2：安裝 Node.js](#sample-cdk-install-nodejs)。

1. 下載並安裝 ** `nvm` **。若要執行此操作，請執行安裝指令碼。這個範例已安裝 v0.33.0，但您可以[在此](https://github.com/nvm-sh/nvm#installing-and-updating)確認最新版本的 **`nvm`** 。

   ```
   curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
   ```

1. 開始使用 ** `nvm` **。您可以先關閉終端機工作階段，然後再重新啟動，或是援引 `~/.bashrc` 檔案，其中包含載入 ** `nvm` ** 的命令。

   ```
   . ~/.bashrc
   ```

### 步驟 1.2：安裝 Node.js
<a name="sample-cdk-install-nodejs"></a>

1. 確認您是否已安裝 Node.js，若已安裝，請確認安裝的版本為 16.17.0 或更高版本。**此範例已經用 Node.js 16.17.0 測試過。**若要確認終端機工作階段仍在 IDE 中開啟，請以 **`--version`** 選項執行 **`node`** 命令。

   ```
   node --version
   ```

   若已安裝 Node.js，輸出包含版本編號。如果版本編號為 v16.17.0，請直接跳到 [步驟 1.3：安裝 TypeScript](#sample-cdk-install-typescript)。

1. 透過使用 **`install`**動作執行 **`nvm`**命令來安裝 Node.js 16。
**注意**  
您也可以執行 **`nvm install node`**來安裝 Node.js. AWS Cloud9 support 的長期支援 (LTS) 版本，以追蹤 Node.js 的 LTS 版本。

   ```
   nvm install v16
   ```

1. 開始使用 Node.js 16。若要執行此操作，請執行 ** `nvm` ** 命令與 ** `alias` ** 動作、對應別名的版本編號，以及用於該別名的版本，如下所示。

   ```
   nvm alias default 16
   ```
**注意**  
上述命令會將 Node.js 16 設定為 Node.js 的預設版本。或者，您可以執行 ** `nvm` ** 命令與 ** `use` ** 動作，而不是 ** `alias` ** 動作 (例如，** `nvm use 16.17.0` **)。不過，** `use` ** 動作會使該 Node.js 版本僅在目前終端工作階段執行時執行。

1. 若要確認您使用的是 Node.js 16，請再次執行 **`node --version`**命令。如果安裝了正確的版本，輸出會包含 v16 版本。

### 步驟 1.3：安裝 TypeScript
<a name="sample-cdk-install-typescript"></a>

1. 確認您是否已安裝 TypeScript。若要執行此操作，請於終端機工作階段在 IDE 中仍開啟的狀態，使用 **`--version`** 選項執行命令列 TypeScript 編譯器。

   ```
   tsc --version
   ```

   若已安裝 TypeScript，輸出包含 TypeScript 版本編號。若已安裝 TypeScript，請直接跳到[步驟 1.4：安裝 AWS CDK](#sample-cdk-install-cdk)。

1. 安裝 TypeScript。若要執行此操作，請以 ** `install` ** 動作、** `-g` ** 選項，以及 TypeScript 套件的名稱執行 ** `npm` ** 命令。這個動作會在環境中將 TypeScript 安裝為全域套件。

   ```
   npm install -g typescript
   ```

1. 確認 TypeScript 已安裝。若要執行此操作，請執行命令列 TypeScript 編譯器及 ** `--version` ** 選項。

   ```
   tsc --version
   ```

   若已安裝 TypeScript，輸出包含 TypeScript 版本編號。

### 步驟 1.4：安裝 AWS CDK
<a name="sample-cdk-install-cdk"></a>

1. 確認您是否已 AWS CDK 安裝 。若要執行此操作，請於終端機工作階段在 IDE 中仍開啟的狀態，使用 **`--version`** 選項執行 **`cdk`** 命令。

   ```
   cdk --version
   ```

   如果已安裝 AWS CDK ，輸出會包含 AWS CDK 版本和建置號碼。直接跳到[步驟 2：新增程式碼](#sample-cdk-code)。

1.  AWS CDK 透過執行 **`npm`**命令以及 `install`動作、要安裝的 AWS CDK 套件名稱，以及在環境中全域安裝套件`-g`的選項來安裝 。

   ```
   npm install -g aws-cdk
   ```

1. 確認 AWS CDK 已安裝並正確參考。若要這樣做，請執行 ** `cdk` ** 命令與 ** `--version` **選項。

   ```
   cdk --version
   ```

   如果成功，則會顯示 AWS CDK 版本和建置編號。

## 步驟 2：新增程式碼
<a name="sample-cdk-code"></a>

在此步驟中，您會建立範例 TypeScript 專案，其中包含 AWS CDK 以程式設計方式部署 AWS CloudFormation 堆疊所需的所有原始程式碼。此堆疊會在您的帳戶中建立 Amazon SNS 主題和 Amazon SQS 佇列， AWS 然後訂閱該主題的佇列。

1. 在 IDE 仍開啟終端機工作階段的情況下，建立要存放專案原始碼的目錄，例如環境中的 `~/environment/hello-cdk` 目錄。然後，切換到該目錄。

   ```
   rm -rf ~/environment/hello-cdk # Remove this directory if it already exists.
   mkdir ~/environment/hello-cdk  # Create the directory.
   cd ~/environment/hello-cdk     # Switch to the directory.
   ```

1. 設定目錄做為 AWS CDK的 TypeScript 語言專案。若要執行此操作，請以 ** `init` ** 動作、** `sample-app` ** 範本與 ** `--language` ** 選項搭配程式設計語言的名稱來執行 ** `cdk` ** 命令。

   ```
   cdk init sample-app --language typescript
   ```

   此在目錄中建立下列檔案和子目錄。
   + 隱藏的 `.git` 子目錄和隱藏的 `.gitignore` 檔案，這讓專案相容於來源控制工具如 Git。
   + 包含 `hello-cdk-stack.ts` 檔案的 `lib` 子目錄。此檔案包含 AWS CDK 堆疊的程式碼。此程式碼描述於此程序的後續步驟。
   + 包含 `hello-cdk.ts` 檔案的 `bin` 子目錄。此檔案包含您 AWS CDK 應用程式的進入點。
   + `node_modules` 子目錄，其中包含支援的程式碼套件，其可供應用程式和堆疊視需來使用。
   + 隱藏的 `.npmignore` 檔案，其中列出當建置程式碼時 ** `npm` ** 不需要的子目錄和檔案類型。
   + `cdk.json` 檔案，其中包含可讓 ** `cdk` ** 命令更輕鬆地執行的資訊。
   + `package-lock.json` 檔案，其中包含 ** `npm` ** 可用於降低可能的建置和執行錯誤的相關資訊。
   + `package.json` 檔案，其中包含可讓 ** `npm` ** 命令更輕鬆地執行，且減少建置和執行錯誤的相關資訊。
   + `README.md` 檔案，列出您可以使用 **`npm`**和 執行的實用命令 AWS CDK。
   + `tsconfig.json` 檔案，其中包含可讓 ** `tsc` ** 命令更輕鬆地執行，且減少建置和執行錯誤的相關資訊。

1. 在 **Environment (環境)** 視窗中，開啟 `lib/hello-cdk-stack.ts` 檔案，並瀏覽該檔案中的以下程式碼。

   ```
   import sns = require('@aws-cdk/aws-sns');
   import sqs = require('@aws-cdk/aws-sqs');
   import cdk = require('@aws-cdk/cdk');
   
   export class HelloCdkStack extends cdk.Stack {
     constructor(parent: cdk.App, name: string, props?: cdk.StackProps) {
       super(parent, name, props);
   
       const queue = new sqs.Queue(this, 'HelloCdkQueue', {
         visibilityTimeoutSec: 300
       });
   
       const topic = new sns.Topic(this, 'HelloCdkTopic');
   
       topic.subscribeQueue(queue);
     }
   }
   ```
   + `Stack`、`App`、`Queue`、 `StackProps`和 `Topic`類別分別代表 CloudFormation 堆疊及其屬性、可執行程式、Amazon SQS 佇列和 Amazon SNS 主題。
   + `HelloCdkStack` 類別代表此應用程式的 CloudFormation 堆疊。此堆疊包含適用於此應用程式的新 Amazon SQS 佇列和 Amazon SNS 主題。

1. 在 **Environment (環境)** 視窗中，開啟 `bin/hello-cdk.ts` 檔案，並瀏覽該檔案中的以下程式碼。

   ```
   #!/usr/bin/env node
   import cdk = require('@aws-cdk/cdk');
   import { HelloCdkStack } from '../lib/hello-cdk-stack';
   
   const app = new cdk.App();
   new HelloCdkStack(app, 'HelloCdkStack');
   app.run();
   ```

   此程式碼會載入 `lib/hello-cdk-stack.ts` 檔案中的 `HelloCdkStack` 類別、建立其執行個體，然後執行它。

1. 使用 **`npm`**執行 TypeScript 編譯器來檢查編碼錯誤，然後啟用 AWS CDK 來執行專案`bin/hello-cdk.js`的檔案。若要執行此操作，請從專案的根目錄以 ** `run` ** 動作執行 ** `npm` ** 命令, 且需將 `package.json` 檔案中的 ** `build` ** 命令值指定如下。

   ```
   npm run build
   ```

   上述命令會執行 TypeScript 編譯器，這會新增對 `bin/hello-cdk.d.ts` 和 `lib/hello-cdk-stack.d.ts` 檔案的支援。這個編譯器也會將 `hello-cdk.ts` 和 `hello-cdk-stack.ts` 檔案轉換為 `hello-cdk.js` 和 `hello-cdk-stack.js` 檔案。

## 步驟 3：執行程式碼
<a name="sample-cdk-run"></a>

在此步驟中，您會指示 根據 `bin/hello-cdk.js` 檔案中的程式碼 AWS CDK 建立 CloudFormation 堆疊範本。然後 AWS CDK ，指示 部署堆疊，這會建立 Amazon SNS 主題和 Amazon SQS 佇列，然後訂閱該主題的佇列。然後，確認已成功部署主題和佇列，做法是從主題傳送訊息到佇列。

1. 讓 AWS CDK 建立 CloudFormation 堆疊範本。若要執行此操作，請在 IDE 仍開啟終端機工作階段的情況下，從專案的根目錄，以 **`synth`** 動作和堆疊的名稱執行 **`cdk`** 命令。

   ```
   cdk synth HelloCdkStack
   ```

   如果成功，輸出會顯示 CloudFormation 堆疊範本的 `Resources` 區段。

1. 第一次將 AWS CDK 應用程式部署到特定 AWS 帳戶和 AWS 區域組合的環境時，您必須安裝*引導堆疊*。此堆疊包含 完成其各種操作 AWS CDK 所需的各種資源。例如，此堆疊包含 Amazon S3 儲存貯體，用於在其部署程序期間 AWS CDK 存放範本和資產。若要安裝引導堆疊，請執行 ** `cdk` ** 命令，搭配 ** `bootstrap` **動作。

   ```
   cdk bootstrap
   ```
**注意**  
如果您在`cdk bootstrap`未指定任何選項的情況下執行 ，則會使用預設 AWS 帳戶和 AWS 區域。您也可以指定設定檔和帳戶/區域組合來引導特定環境。例如：  

   ```
   cdk bootstrap --profile test 123456789012/us-east-1
   ```

1. 讓 AWS CDK 執行 CloudFormation 堆疊範本以部署堆疊。若要執行此操作，請自專案的根目錄執行 ** `cdk` ** 命令與 ** `deploy` ** 動作，以及堆疊的名稱。

   ```
   cdk deploy HelloCdkStack
   ```

   如果成功，輸出會顯示 `HelloCdkStack` 堆疊已部署成功，沒有出現錯誤。
**注意**  
如果輸出顯示訊息，指出堆疊未定義環境，且無法從標準位置取得 AWS 登入資料或未設定區域，請確定您的 AWS 登入資料已在 IDE 中正確設定，然後再次執行 **`cdk deploy`**命令。如需詳細資訊，請參閱[AWS 服務 從 中的環境呼叫 AWS Cloud9](credentials.md)。

1. 要確認已成功部署 Amazon SNS 主題和 Amazon SQS 佇列，請將訊息傳送到主題，然後檢查收到訊息的佇列。若要這樣做，您可以使用 AWS Command Line Interface (AWS CLI) 或 等工具 AWS CloudShell。如需這些工具的詳細資訊，請參閱 [AWS CLI 的 和 aws-shell 教學課程 AWS Cloud9](sample-aws-cli.md)。

   例如，若要傳送訊息至主題，在 IDE 中仍開啟終端機工作階段的情況下，請使用 AWS CLI 執行 Amazon SNS** `publish` ** 命令、提供訊息的主旨和內文、主題 AWS 的區域，以及主題的 Amazon Resource Name (ARN)。

   ```
   aws sns publish --subject "Hello from the AWS CDK" --message "This is a message from the AWS CDK." --topic-arn arn:aws:sns:us-east-2:123456789012:HelloCdkStack-HelloCdkTopic1A234567-8BCD9EFGHIJ0K
   ```

   在上述命令中，`arn:aws:sns:us-east-2:123456789012:HelloCdkStack-HelloCdkTopic1A234567-8BCD9EFGHIJ0K`將 取代為 CloudFormation 指派給主題的 ARN。若要取得 ID，您可以執行 Amazon SNS **`list-topics`** 命令。

   ```
   aws sns list-topics --output table --query 'Topics[*].TopicArn'
   ```

   如果成功，** `publish` ** 命令的輸出會顯示已發佈訊息的 `MessageId` 值。

   若要檢查已接收訊息的佇列，請執行 Amazon SQS **`receive-message`** 命令，其中包括佇列的 URL。

   ```
   aws sqs receive-message --queue-url https://queue.amazonaws.com/123456789012/HelloCdkStack-HelloCdkQueue1A234567-8BCD9EFGHIJ0K
   ```

   在上述命令中，將 取代`https://queue.amazonaws.com/123456789012/HelloCdkStack-HelloCdkQueue1A234567-8BCD9EFGHIJ0K`為 CloudFormation 指派給佇列的 ARN。若要取得 URL，您可以執行 Amazon SQS **`list-queues`** 命令。

   ```
   aws sqs list-queues --output table --query 'QueueUrls[*]'
   ```

   如果成功，** `receive-message` ** 命令的輸出會顯示已接收訊息的相關資訊。

## 步驟 4：清理
<a name="sample-cdk-clean-up"></a>

為了避免在您完成使用此範例後持續向您的 AWS 帳戶收取費用，您應該刪除 CloudFormation 堆疊。這麼做會刪除 Amazon SNS 主題和 Amazon SQS 佇列。您也應該刪除環境。

### 步驟 4.1：刪除堆疊
<a name="step-4-1-delete-the-stack"></a>

在 IDE 仍開啟終端機工作階段的情況下，請以 **`destroy`** 動作和堆疊的名稱從專案的根目錄執行 **`cdk`** 命令。

```
cdk destroy HelloCdkStack
```

當系統提示您刪除堆疊時，請輸入 `y`，然後按下 `Enter`。

如果成功，輸出會顯示 `HelloCdkStack` 堆疊已刪除，沒有出現錯誤。

### 步驟 4.2：刪除環境
<a name="step-4-2-delete-the-envtitle"></a>

若要刪除環境，請參閱[在 中刪除環境 AWS Cloud9](delete-environment.md)。