

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

# 部署至 Amazon EC2 Container Service
<a name="deployment-ecs"></a>

**重要**  
新的 **發佈至 AWS** 功能旨在簡化您發佈 .NET 應用程式的方式 AWS。在選擇發佈**容器 AWS**之後，系統可能會詢問您是否要切換到此發佈體驗。如需詳細資訊，請參閱[在 Visual Studio AWS 中使用 發佈至](publish-experience.md)。

Amazon Elastic Container Service 是高度可擴展的高效能容器管理服務，支援 Docker 容器，並可讓您輕鬆地在 Amazon EC2 執行個體的受管叢集上執行應用程式。

若要在 Amazon Elastic Container Service 上部署應用程式，您的應用程式元件必須開發為在 Docker 容器中執行。Docker 容器是軟體開發的標準化單元，包含軟體應用程式需要執行的所有一切：程式碼、執行時間、系統工具和系統程式庫等等。

Toolkit for Visual Studio 提供精靈，可簡化透過 Amazon ECS 發佈應用程式。以下各節會說明此精靈。

如需 Amazon ECS 的詳細資訊，請參閱 [Elastic Container Service 文件](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)。它包含 [Docker 基本概念](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html)和[建立叢集](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html)的概觀。

**Topics**
+ [指定 AWS 登入資料](deployment-ecs-specify-credentials.md)
+ [部署 ASP.NET Core 2.0 應用程式 （遠） （舊版）](deployment-ecs-aspnetcore-fargate.md)
+ [部署 ASP.NET Core 2.0 應用程式 (EC2)](deployment-ecs-aspnetcore-ec2.md)

# 為您的 ASP.NET Core 2 應用程式指定 AWS 登入資料
<a name="deployment-ecs-specify-credentials"></a>

當您將應用程式部署到 Docker 容器時，有兩種類型的登入資料：部署登入資料和執行個體登入資料。

部署登入資料由發佈容器用於 AWS 精靈，以在 Amazon ECS 中建立環境。這包括任務、服務、IAM 角色、Docker 容器儲存庫，以及負載平衡器等項目。

執行個體 （包括您的應用程式） 會使用執行個體登入資料來存取不同的 AWS 服務。例如，如果您的 ASP.NET Core 2.0 應用程式讀取和寫入 Amazon S3 物件，則需要適當的許可。您可以根據環境使用不同的方法來提供不同的登入資料。例如，您的 ASP.NET Core 2 應用程式可能以*開發*和*生產*環境為目標。您可以使用本機 Docker 執行個體和登入資料進行開發，以及在生產環境中定義的角色。

## 指定部署登入資料
<a name="tkv-ecs-deploy-creds"></a>

您在將**容器發佈至 AWS**精靈中指定的 AWS 帳戶是精靈將用來部署至 Amazon ECS AWS 的帳戶。帳戶設定檔必須具有 Amazon Elastic Compute Cloud、Amazon Elastic Container Service 和 的許可 AWS Identity and Access Management。

如果您注意到下拉式清單中缺少選項，可能是因為您缺乏許可。例如，如果您為應用程式建立叢集，但未在將**容器發佈至 AWS**精靈叢集頁面上看到叢集。如果發生這種情況，請新增缺少的許可，然後再試一次精靈。

## 指定開發執行個體登入資料
<a name="tkv-ecs-dev-creds"></a>

對於非生產環境，您可以在 appsettings.<environment>.json 檔案中設定您的登入資料。例如，若要在 Visual Studio 2017 的 appsettings.Development.json 檔案中設定您的登入資料：

1. 將 AWSSDK.Extensions.NETCore.Setup NuGet 套件新增至您的專案。

1. 將 AWS 設定新增至 appsettings.Development.json。以下組態會設定 `Profile`和 `Region`。

   ```
   {
       "AWS": {
           "Profile": "local-test-profile",
           "Region": "us-west-2"
       }
   }
   ```

## 指定生產執行個體登入資料
<a name="id1"></a>

對於生產執行個體，我們建議您使用 IAM 角色來控制應用程式 （和服務） 可存取的內容。例如，若要將具有 Amazon ECS 的 IAM 角色設定為具有 Amazon Simple Storage Service 和 Amazon DynamoDB 許可的服務主體 AWS 管理主控台：

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在 IAM 主控台的導覽窗格中，選擇角色，然後選擇建立角色。

1. 選擇**AWS 服務**角色類型，然後選擇 **EC2 Container Service**。

1. 選擇 **EC2 Container Service 任務**使用案例。服務會定義使用案例，以包含服務所需的信任政策。然後選擇 **Next: Permissions** (下一步：許可)。

1. 選擇 **AmazonS3FullAccess** 和 **AmazonDynamoDBFullAccess** 許可政策。勾選每個政策旁的方塊，然後選擇**下一步：檢閱**、

1. 針對**角色名稱**，輸入角色名稱或角色名稱尾碼，以協助您識別此角色的目的。角色名稱在您的 AWS 帳戶內必須是獨一無二的。它們無法透過大小寫進行區分。例如，您無法建立名為 `PRODROLE` 和 `prodrole` 的角色。因為有各種實體可能會參照角色，所以您無法在建立角色之後編輯角色名稱。

1. (選用) 針對 **Role description (角色說明)**，輸入新角色的說明。

1. 檢閱角色，然後選擇**建立角色**。

您可以在將**容器發佈至 AWS**精靈的 **ECS 任務定義**頁面上，使用此角色做為**任務角色**。

如需詳細資訊，請參閱[使用服務型角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)。

# 將 ASP.NET Core 2.0 應用程式部署至 Amazon ECS (Fargate) （舊版）
<a name="deployment-ecs-aspnetcore-fargate"></a>

**重要**  
本文件是指舊版服務和功能。如需更新的指南和內容，請參閱 [AWS .NET 部署工具](https://aws.github.io/aws-dotnet-deploy/)指南和更新的[部署至 AWS](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/deployment-chapt.html)目錄。

本節說明如何使用 Toolkit for Visual Studio 提供的**發佈容器精靈 AWS**，使用 Fargate 啟動類型透過 Amazon ECS 部署以 Linux 為目標的容器化 ASP.NET Core 2.0 應用程式。由於 Web 應用程式目標是要持續執行，它將部署為服務。

## 在您發佈容器之前
<a name="tkv-deploy-ecs-netcore-prerequisites"></a>

使用**發佈容器精靈 AWS**部署 ASP.NET Core 2.0 應用程式之前：
+  [指定您的 AWS 登入](deployment-ecs-specify-credentials.md)資料，並使用 [Amazon ECS 進行設定](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/get-set-up-for-amazon-ecs.html)。
+  [安裝 Docker](https://docs.docker.com/engine/installation)。您有一些不同的安裝選項，包括 [Docker for Windows](https://docs.docker.com/docker-for-windows/install/)。
+ 在 Visual Studio 中，為以 Linux 為目標的 ASP.NET Core 2.0 容器化應用程式建立 （或開啟） 專案。

## 存取要 AWS 精靈的發佈容器
<a name="tkv-deployment-ecs-netcore-accessing"></a>

若要部署以 Linux 為目標的 ASP.NET Core 2.0 容器化應用程式，請在 Solution Explorer 中的專案上按一下滑鼠右鍵，然後選取將**容器發佈至 AWS**。

![\[Context menu showing "Publish Container to AWS" option highlighted for deployment.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/wiz-ecspub-fargate-step0a.png)


您也可以在 Visual Studio Build 功能表中選取將**容器發佈至 AWS** 。

## 將容器發佈至 AWS 精靈
<a name="tkv-deploy-ecs-pubtoaws"></a>

![\[AWS Publish Container interface showing profile, Docker image, and deployment options for ECR.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/wiz-ecspub-fargate-step1.png)


 **要使用的帳戶設定檔** - 選取要使用的帳戶設定檔。

 **區域** - 選擇部署區域。設定檔和區域用於設定部署環境資源，以及選取預設 Docker 登錄檔。

 **組態** - 選取 Docker 映像建置組態。

 **Docker 儲存庫** - 選擇現有的 Docker 儲存庫，或輸入新儲存庫的名稱，然後建立該儲存庫。這是要推送建置容器的儲存庫。

 **標籤** - 選取現有標籤或輸入新標籤的名稱。標籤可以追蹤 Docker 容器的版本、選項或其他唯一組態元素等重要詳細資訊。

 **部署目標** - 選取 **ECS 叢集上的服務**。當您的應用程式需要長時間執行時 （例如 ASP.NET Web 應用程式），請使用此部署選項。

 **將設定儲存至 `aws-docker-tools-defaults.json`並設定專案以進行命令列部署** - 如果您想要從命令列部署的彈性，請勾選此選項。`dotnet ecs deploy` 從您的專案目錄使用 來部署 和 `dotnet ecs publish` 容器。

## 啟動組態頁面
<a name="tkv-deploy-ecs-launch-configuration"></a>

![\[AWS Launch Configuration interface for creating an empty ECS 叢集 with FARGATE launch type.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/wiz-ecspub-fargate-step2.png)


 **ECS 叢集** - 選擇將執行 Docker 映像的叢集。如果您選擇建立空叢集，請提供新叢集的名稱。

 **啟動類型** - 選擇 **FARGATE**。

 **CPU 上限 (vCPU)** - 選擇應用程式所需的運算容量上限。若要查看允許的 CPU 和記憶體值範圍，請參閱[任務大小](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html)。

 **記憶體上限 (GB)** - 選取應用程式可用的記憶體數量上限。

 **VPC 子網路** - 選擇單一 VPC 下的一或多個子網路。如果您選擇多個子網路，您的任務會分散到各個子網路。這可以改善可用性。如需詳細資訊，請參閱[預設 VPC 和預設子網路](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/default-vpc.html)。

 **安全群組** - 選擇安全群組。

安全群組可做為相關聯 Amazon EC2 執行個體的防火牆，在執行個體層級控制傳入和傳出流量。

 [預設安全群組](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html)設定為允許從指派給相同安全群組的執行個體和所有傳出 IPv4 流量傳入流量。您需要允許傳出，服務才能連線到容器儲存庫。

 **指派公有 IP 地址** - 勾選此選項，讓您的任務可從網際網路存取。

## 服務組態頁面
<a name="tkv-deploy-ecs-service"></a>

![\[AWS Service Configuration interface for deploying an application with customizable parameters.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/wiz-ecspub-fargate-step3.png)


 **服務** - 在下拉式清單中選取其中一個服務，將您的容器部署到現有的服務。或者，選擇**建立新**服務以建立新的服務。叢集中不得有相同的服務名稱，但一個區域內或多個區域間的多個叢集中可以有類似的服務名稱。

 **任務數量** - 在叢集上部署和持續執行的任務數量。每個任務都是您容器的一個執行個體。

 **最小良好百分比** - 部署期間必須保持 `RUNNING` 狀態的任務百分比，四捨五入至最接近的整數。

 **百分比上限** - 部署期間允許處於 `RUNNING`或 `PENDING` 狀態的任務百分比，四捨五入至最接近的整數。

## Application Load Balancer 頁面
<a name="tkv-deploy-ecs-app-load-balancer"></a>

![\[Application Load Balancer configuration interface for AWS with options for load balancer and target group settings.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/wiz-ecspub-fargate-step4.png)


 **設定 Application Load Balancer** - 檢查以設定應用程式負載平衡器。

 **Load Balancer** - 選取現有的負載平衡器，或選擇**建立新**負載平衡器，然後輸入新負載平衡器的名稱。

 **接聽程式連接埠** - 選取現有的接聽程式連接埠，或選擇**建立新**並輸入連接埠號碼。預設連接埠 `80`適用於大多數 Web 應用程式。

 **目標群組** - 選取 Amazon ECS 會將任務註冊到服務的目標群組。

 **路徑模式** - 負載平衡器將使用路徑型路由。接受預設值`/`或提供不同的模式。路徑模式區分大小寫，長度最多可達 128 個字元，並包含[一組選取的字元](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#path-conditions)。

 **運作狀態檢查路徑** - 運作狀態檢查目標上的目的地 ping 路徑。在預設情況下，大小上限為 `/`。視需要輸入不同的路徑。如果您輸入的路徑無效，運作狀態檢查將會失敗，而且會被視為運作狀態不佳。

如果您部署多個服務，而且每個服務都會部署到不同的路徑或位置，您將需要自訂檢查路徑。

## 任務定義頁面
<a name="tkv-deploy-ecs-task-definition"></a>

![\[AWS Task Definition interface for configuring Docker container parameters and permissions.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/wiz-ecspub-fargate-step5.png)


 **任務定義** - 選取現有的任務定義，或選擇**建立新**並輸入新的任務定義名稱。

 **容器** - 選取現有的容器，或選擇**建立新**容器，然後輸入新的容器名稱。

 **任務角色** - 選取具有應用程式存取 AWS 服務所需登入資料的 IAM 角色。這是將登入資料傳入應用程式的方式。[了解如何為您的應用程式指定 AWS 安全登入](deployment-ecs-specify-credentials.md)資料。

 **任務執行角色** - 選取具有提取私有映像和發佈日誌許可的角色。 AWS Fargate 將代表您使用它。

 **連接埠映射** - 選擇容器上繫結至自動指派主機連接埠的連接埠號碼。

 **環境變數** - 新增、修改或刪除容器的環境變數。您可以修改它以符合您的部署。

當您對組態感到滿意時，請按一下**發佈**以開始部署程序。

## 將容器發佈至 AWS
<a name="tkv-deploy-ecs-publishing"></a>

![\[AWS container publishing progress window showing steps for deploying to ECS and ECR.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/wiz-ecspub-fargate-step6.png)


事件會在部署期間顯示。成功完成時精靈會自動關閉。您可以取消核取方塊頁面底部的方塊來覆寫它。

您可以在 AWS Explorer 中找到新執行個體的 URL。展開 Amazon ECS 和叢集，然後按一下叢集。

# 將 ASP.NET Core 2.0 應用程式部署至 Amazon ECS (EC2)
<a name="deployment-ecs-aspnetcore-ec2"></a>

本節說明如何使用 Toolkit for Visual Studio 提供的**發佈容器精靈 AWS**，使用 EC2 啟動類型透過 Amazon ECS 部署以 Linux 為目標的容器化 ASP.NET Core 2.0 應用程式。 EC2 由於 Web 應用程式表示會持續執行，因此會部署為服務。

## 在您發佈容器之前
<a name="tkv-deploy-ecs-netcore-prerequisites"></a>

使用**發佈容器至 AWS** 部署 ASP.NET Core 2.0 應用程式之前：
+  [指定您的 AWS 登入](deployment-ecs-specify-credentials.md)資料，並使用 [Amazon ECS 進行設定](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/get-set-up-for-amazon-ecs.html)。
+  [安裝 Docker](https://docs.docker.com/engine/installation)。您有一些不同的安裝選項，包括 [Docker for Windows](https://docs.docker.com/docker-for-windows/install/)。
+  根據 Web 應用程式的需求[建立 Amazon ECS 叢集](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-cluster.html)。這只需要幾個步驟。
+ 在 Visual Studio 中，為以 Linux 為目標的 ASP.NET Core 2.0 容器化應用程式建立 （或開啟） 專案。

## 存取要 AWS 精靈的發佈容器
<a name="tkv-deployment-ecs-netcore-accessing"></a>

若要部署以 Linux 為目標的 ASP.NET Core 2.0 容器化應用程式，請在 Solution Explorer 中的專案上按一下滑鼠右鍵，然後選取將**容器發佈至 AWS**。

您也可以在 Visual Studio Build 功能表中選取將**容器發佈至 AWS** 。

## 將容器發佈至 AWS 精靈
<a name="tkv-deploy-ecs-pubtoaws"></a>

 **要使用的帳戶設定檔** - 選取要使用的帳戶設定檔。

 **區域** - 選擇部署區域。設定檔和區域用於設定部署環境資源，並選取預設 Docker 登錄檔。

 **組態** - 選取 Docker 映像建置組態。

 **Docker 儲存庫** - 選擇現有的 Docker 儲存庫，或輸入新儲存庫的名稱，然後建立該儲存庫。這是推送建置容器映像的儲存庫。

 **標籤** - 選取現有標籤或輸入新標籤的名稱。標籤可以追蹤 Docker 容器的版本、選項或其他唯一組態元素等重要詳細資訊。

 **部署** - 選取 **ECS 叢集上的服務**。當您的應用程式需要長時間執行時 （例如 ASP.NET Core 2.0 Web 應用程式），請使用此部署選項。

 **將設定儲存至 `aws-docker-tools-defaults.json`並設定專案以進行命令列部署** - 如果您想要從命令列部署的彈性，請勾選此選項。`dotnet ecs deploy` 從您的專案目錄使用 來部署 和 `dotnet ecs publish` 容器。

## 啟動組態頁面
<a name="tkv-deploy-ecs-launch-config"></a>

 **ECS 叢集** - 選擇將執行 Docker 映像的叢集。您可以使用 AWS 管理主控台[建立 ECS 叢集](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html)。

 **啟動類型** - 選擇 EC2。若要使用 Fargate 啟動類型，請參閱[將 ASP.NET Core 2.0 應用程式部署到 Amazon ECS (Fargate)](deployment-ecs-aspnetcore-fargate.md)。

## 服務組態頁面
<a name="tkv-deploy-ecs-service"></a>

 **服務** - 在下拉式清單中選取其中一個服務，將您的容器部署到現有的服務。或者，選擇**建立新**服務以建立新的服務。叢集中不得有相同的服務名稱，但一個區域內或多個區域間的多個叢集中可以有類似的服務名稱。

 **任務數量** - 在叢集上部署和持續執行的任務數量。每個任務都是您容器的一個執行個體。

 **最小良好百分比** - 部署期間必須保持 `RUNNING` 狀態的任務百分比，四捨五入至最接近的整數。

 **百分比上限** - 部署期間允許處於 `RUNNING`或 `PENDING` 狀態的任務百分比，四捨五入至最接近的整數。

 **置放範本** - 選取任務置放範本。

當您在叢集中啟動任務時，Amazon ECS 必須根據任務定義中指定的需求，例如 CPU 和記憶體，來決定將任務放置在何處。同樣地，當您縮減任務計數時，Amazon ECS 必須判斷要終止的任務。

置放範本會控制任務在叢集中啟動的方式：
+ AZ Balanced Spread (AZ 平衡分配) - 跨可用區域及跨可用區域中的容器執行個體分散任務。
+ AZ Balanced BinPack (AZ 平衡 BinPack) - 使用最低可用記憶體，跨可用區域及跨可用區域中的容器執行個體分散任務。
+ BinPack - 根據最低可用的 CPU 或記憶體數分散任務。
+ One Task Per Host (每一主機一個任務) - 在每個容器執行個體上最多放置一個來自服務的任務。

如需詳細資訊，請參閱 [Amazon ECS 任務置放](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement.html)。

## Application Load Balancer 頁面
<a name="tkv-deploy-ecs-app-load-balancer"></a>

 **設定 Application Load Balancer** - 檢查以設定應用程式負載平衡器。

 **選取服務的 IAM 角色** - 選取現有角色，或選擇**建立新**角色，然後建立新角色。

 **Load Balancer** - 選取現有的負載平衡器，或選擇**建立新**負載平衡器，然後輸入新負載平衡器的名稱。

 **接聽程式連接埠** - 選取現有的接聽程式連接埠，或選擇**建立新**並輸入連接埠號碼。預設連接埠 `80`適用於大多數 Web 應用程式。

 **目標群組** - 根據預設，負載平衡器會使用您為目標群組指定的連接埠和通訊協定，將請求傳送至已註冊的目標。在透過目標群組來註冊每個目標時，您可以覆寫此埠號。

 **路徑模式** - 負載平衡器將使用路徑型路由。接受預設值`/`或提供不同的模式。路徑模式區分大小寫，長度最多可達 128 個字元，並包含[一組選取的字元](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#path-conditions)。

 **運作狀態檢查路徑** - 運作狀態檢查目標上的目的地 ping 路徑。根據預設，它`/`適用於 Web 應用程式。視需要輸入不同的路徑。如果您輸入的路徑無效，運作狀態檢查將會失敗，而且會被視為運作狀態不佳。

如果您部署多個服務，而且每個服務都會部署到不同的路徑或位置，您可能需要自訂檢查路徑。

## ECS 任務定義頁面
<a name="tkv-deploy-ecs-task-definition"></a>

 **任務定義** - 選取現有的任務定義，或選擇**建立新**並輸入新的任務定義名稱。

 **容器** - 選取現有的容器，或選擇**建立新**容器，然後輸入新的容器名稱。

 **記憶體 (MiB)** - 提供**軟性限制**或**硬性限制**或兩者的值。

要預留給容器的記憶體*軟性限制* （以 MiB 為單位）。Docker 會嘗試將容器記憶體保持在軟性限制之下。容器可能會耗用更多記憶體，最高可達以記憶體參數 （如果適用） 指定的硬性限制，或容器執行個體上所有可用的記憶體，以先到者為準。

要呈現給容器的記憶體*硬性限制* （以 MiB 為單位）。如果您的容器嘗試使用超過此處指定的記憶體，容器便會終止。

 **任務角色** - 選取 IAM 角色的任務角色，允許容器代表您呼叫其相關聯政策中指定的 AWS APIs。這是將登入資料傳入應用程式的方式。[了解如何為您的應用程式指定 AWS 安全登入](deployment-ecs-specify-credentials.md)資料。

 **連接埠映射** - 新增、修改或刪除容器的連接埠映射。如果負載平衡器已開啟，主機連接埠預設為 0，而連接埠指派將為動態。

 **環境變數** - 新增、修改或刪除容器的環境變數。

當您對組態感到滿意時，請按一下**發佈**以開始部署程序。

## 將容器發佈至 AWS
<a name="tkv-deploy-ecs-publishing"></a>

事件會在部署期間顯示。成功完成時精靈會自動關閉。您可以取消核取方塊頁面底部的方塊來覆寫它。

您可以在 AWS Explorer 中找到新執行個體的 URL。展開 Amazon ECS 和叢集，然後按一下叢集。