

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

# 使用 AWS CDK 設定 Amazon ECS Anywhere 來管理內部部署容器應用程式
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk"></a>

*Rahul Sharad Gaikwad 醫生，Amazon Web Services*

## 總結
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk-summary"></a>

[Amazon ECS Anywhere](https://aws.amazon.com/ecs/anywhere/) 是 Amazon Elastic Container Service (Amazon ECS) 的延伸。您可以使用 ECS Anywhere 在內部部署或客戶受管環境中部署原生 Amazon ECS 任務。此功能有助於降低成本，並減少複雜的本機容器協同運作和操作。您可以使用 ECS Anywhere 在內部部署和雲端環境中部署和執行容器應用程式。它消除了您的團隊學習多個網域和技能集，或自行管理複雜軟體的需求。

此模式示範使用 [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk/) 堆疊設定 ECS Anywhere 的步驟。

## 先決條件和限制
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk-prereqs"></a>

**先決條件**
+ 作用中的 AWS 帳戶
+ 安裝並設定 AWS Command Line Interface (AWS CLI)。（請參閱 [AWS CLI 文件中的安裝、更新和解除安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) AWS CLI。) 
+ AWS CDK Toolkit，已安裝並設定。（請參閱 [AWS CDK 文件](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)中的 AWS CDK Toolkit，並依照指示在全球安裝第 2 版。)
+ 節點套件管理員 (npm)，已安裝並設定 TypeScript 中的 AWS CDK。（請參閱 [npm 文件中的下載和安裝 Node.js 和](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) npm。)

**限制**
+ 如需限制和考量，請參閱 [Amazon ECS Anywhere)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-anywhere.html#ecs-anywhere-considerations)。

**產品版本**
+ AWS CDK Toolkit 第 2 版
+ npm 7.20.3 版或更新版本
+ Node.js 16.6.1 版或更新版本

## Architecture
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk-architecture"></a>

**目標技術堆疊**
+ AWS CloudFormation
+ AWS CDK
+ Amazon ECS Anywhere
+ AWS Identity and Access Management (IAM)

**目標架構**

下圖說明使用 AWS CDK 搭配 TypeScript 的 ECS Anywhere 設定的高階系統架構，如此模式所實作。

1. 當您部署 AWS CDK 堆疊時，它會在 AWS 上建立 CloudFormation 堆疊。

1. CloudFormation 堆疊會佈建 Amazon ECS 叢集和相關的 AWS 資源。

1. 若要向 Amazon ECS 叢集註冊外部執行個體，您必須在虛擬機器 (VM) 上安裝 AWS Systems Manager Agent (SSM Agent)，並將 VM 註冊為 AWS Systems Manager 受管執行個體。 

1. 您還必須在 VM 上安裝 Amazon ECS 容器代理程式和 Docker，以將其註冊為 Amazon ECS 叢集的外部執行個體。

1. 使用 Amazon ECS 叢集註冊和設定外部執行個體時，它可以在您的 VM 上執行多個容器，其已註冊為外部執行個體。

![\[ECS Anywhere 設定搭配 TypeScript 使用 AWS CDK。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/3ed63c00-40e7-4831-bb9d-63049c3490aa/images/ff7dc774-830d-4b9f-8262-7314afe7a033.png)


 

**自動化和擴展**

此模式隨附的 [GitHub 儲存庫](https://github.com/aws-samples/amazon-ecs-anywhere-cdk-samples/)會使用 AWS CDK 做為基礎設施做為程式碼 (IaC) 工具，來建立此架構的組態。AWS CDK 可協助您協調資源並設定 ECS Anywhere。

## 工具
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk-tools"></a>
+ [AWS 雲端開發套件 (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) 是一種軟體開發架構，可協助您在程式碼中定義和佈建 AWS 雲端基礎設施。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一種開放原始碼工具，可協助您透過命令列 shell 中的命令與 AWS 服務互動。

**Code**

此模式的原始碼可在 GitHub 上的 [Amazon ECS Anywhere CDK 範例](https://github.com/aws-samples/amazon-ecs-anywhere-cdk-samples)儲存庫中取得。若要複製和使用儲存庫，請遵循下一節中的指示。

## 史詩
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk-epics"></a>

### 驗證 AWS CDK 組態
<a name="verify-aws-cdk-configuration"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 驗證 AWS CDK 版本。 | 執行下列命令來驗證 AWS CDK Toolkit 的版本：<pre>cdk --version</pre>此模式需要 AWS CDK 第 2 版。如果您有舊版的 AWS CDK，請遵循 [AWS CDK 文件](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)中的指示進行更新。 | DevOps 工程師 | 
| 設定 AWS 登入資料。 | 若要設定登入資料，請執行 `aws configure`命令並遵循提示：<pre>$aws configure<br />AWS Access Key ID [None]: <your-access-key-ID><br />AWS Secret Access Key [None]: <your-secret-access-key><br />Default region name [None]: <your-Region-name><br />Default output format [None]:</pre> | DevOps 工程師 | 

### 引導 AWS CDK 環境
<a name="bootstrap-the-aws-cdk-environment"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 複製 AWS CDK 程式碼儲存庫。 | 使用 命令複製此模式的 GitHub 程式碼儲存庫：<pre>git clone https://github.com/aws-samples/amazon-ecs-anywhere-cdk-samples.git</pre> | DevOps 工程師 | 
| 引導環境。 | 若要將 AWS CloudFormation 範本部署到您要使用的帳戶和 AWS 區域，請執行下列命令：<pre>cdk bootstrap <account-number>/<Region></pre>如需詳細資訊，請參閱 AWS CDK 文件中的[啟動](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)。 | DevOps 工程師 | 

### 建置和部署專案
<a name="build-and-deploy-the-project"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 安裝套件相依性並編譯 TypeScript 檔案。 | 安裝套件相依性，並執行下列命令編譯 TypeScript 檔案：<pre>$cd amazon-ecs-anywhere-cdk-samples<br />$npm install<br />$npm fund </pre>這些命令會從範例儲存庫安裝所有套件。 如果您收到有關遺失套件的任何錯誤，請使用下列其中一個命令：<pre>$npm ci   </pre>—或—<pre>$npm install -g @aws-cdk/<package_name></pre>如需詳細資訊，請參閱 [npm 文件中的 npm ci](https://docs.npmjs.com/cli/v7/commands/npm-ci) 和 [npm 安裝](https://docs.npmjs.com/cli/v7/commands/npm-install)。 | DevOps 工程師 | 
| 建置專案。 | 若要建置專案程式碼，請執行 命令：<pre>npm run build</pre>如需建置和部署專案的詳細資訊，請參閱 [AWS CDK 文件中的您的第一個 AWS CDK 應用程式](https://docs.aws.amazon.com/cdk/latest/guide/hello_world.html#:~:text=the%20third%20parameter.-,Synthesize%20an%20AWS%20CloudFormation%20template,-Synthesize%20an%20AWS)。 | DevOps 工程師 | 
| 部署專案。 | 若要部署專案程式碼，請執行 命令：<pre>cdk deploy</pre> | DevOps 工程師 | 
| 驗證堆疊建立和輸出。 | 開啟位於 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 的 AWS CloudFormation 主控台，****然後選擇`EcsAnywhereStack`堆疊。**Outputs** 索引標籤會顯示要在外部 VM 上執行的命令。 | DevOps 工程師 | 

### 設定內部部署機器
<a name="set-up-an-on-premises-machine"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 使用 Vagrant 設定您的 VM。 | 基於示範目的，您可以使用 [HashiCorp Vagrant](https://www.vagrantup.com/) 來建立 VM。Vagrant 是一種開放原始碼公用程式，用於建置和維護可攜式虛擬軟體開發環境。從放置 Vagrantfile 的根目錄執行`vagrant up`命令來建立 Vagrant VM。如需詳細資訊，請參閱 [Vagrant 文件](https://www.vagrantup.com/docs/cli/up)。 | DevOps 工程師 | 
| 將您的 VM 註冊為外部執行個體。 | 1. 使用`vagrant ssh` 命令登入 Vagrant VM。如需詳細資訊，請參閱 [Vagrant 文件](https://www.vagrantup.com/docs/cli/ssh)。2. 建立啟用代碼和 ID，供您用來向 AWS Systems Manager 註冊 VM，以及啟用外部執行個體。此命令的輸出包含`ActivationId` 和`ActivationCode` 值： <pre>aws ssm create-activation --iam-role EcsAnywhereInstanceRole | tee ssm-activation.json</pre>3. 匯出啟用 ID 和程式碼值：<pre>export ACTIVATION_ID=<activation-ID><br />export ACTIVATION_CODE=<activation-code></pre>4. 將安裝指令碼下載到您的現場部署伺服器或 VM：<pre>curl -o "ecs-anywhere-install.sh" "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh" && sudo chmod +x ecs-anywhere-install.sh</pre>5. 在內部部署伺服器或 VM 上執行安裝指令碼：<pre>sudo ./ecs-anywhere-install.sh \<br />    --cluster test-ecs-anywhere \<br />     --activation-id $ACTIVATION_ID \<br />     --activation-code $ACTIVATION_CODE \<br />    --region <Region></pre>如需設定和註冊 VM 的詳細資訊，請參閱 Amazon ECS 文件中的[將外部執行個體註冊至叢集](https://docs.amazonaws.cn/en_us/AmazonECS/latest/developerguide/ecs-anywhere-registration.html)。 | DevOps 工程師 | 
| 驗證 ECS Anywhere 和外部 VM 的狀態。 | 若要驗證您的虛擬盒是否已連線至 Amazon ECS 控制平面並執行，請使用下列命令：<pre>aws ssm describe-instance-information<br />aws ecs list-container-instances --cluster $CLUSTER_NAME</pre> | DevOps 工程師 | 

### 清除
<a name="clean-up"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 清除和刪除資源。 | 完成此模式之後，您應該移除您建立的資源，以避免產生任何進一步的費用。若要清除，請執行 命令：<pre>cdk destroy</pre> | DevOps 工程師 | 

## 相關資源
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk-resources"></a>
+ [Amazon ECS Anywhere 文件](https://aws.amazon.com/ecs/anywhere/) 
+ [Amazon ECS Anywhere 示範](https://www.youtube.com/watch?v=-eud6yUXsJM)
+ [Amazon ECS Anywhere 研討會範例](https://github.com/aws-samples/aws-ecs-anywhere-workshop-samples)