

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

# 部署至 AWS
<a name="deployment-chapt"></a>

Toolkit for Visual Studio 支援將應用程式部署到 AWS Elastic Beanstalk 容器或 CloudFormation 堆疊。

**注意**  
如果您使用的是 Visual Studio Express Edition：  
您可以使用 [Docker CLI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.use-ecr.html) 將應用程式部署至 Amazon ECS 容器。
您可以使用 [AWS 管理主控台](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.deployment.newapp.html)將應用程式部署到 Elastic Beanstalk 容器。
對於 Elastic Beanstalk 部署，您必須先建立 Web 部署套件。如需詳細資訊，請參閱[如何：在 Visual Studio 中建立 Web 部署套件](http://msdn.microsoft.com/en-us/library/dd465323.aspx)。對於 Amazon ECS 部署，您必須擁有 Docker 映像。如需詳細資訊，請參閱 [Visual Studio Tools for Docker](http://docs.microsoft.com/en-us/aspnet/core/publishing/visual-studio-tools-for-docker)。

**Topics**
+ [發佈至 AWS](publish-experience.md)
+ [AWS Lambda](lambda-cli-publish.md)
+ [部署至 AWS Elastic Beanstalk](deployment-beanstalk.md)
+ [部署至 Amazon EC2 Container Service](deployment-ecs.md)

# 在 Visual Studio AWS 中使用 發佈至
<a name="publish-experience"></a>

**發佈至 AWS** 是一項互動式部署體驗，可協助您將 .NET 應用程式發佈至 AWS 部署目標，並支援以 .NET Core 3.1 及更新版本為目標的應用程式。使用 發佈，直接從您的 IDE 提供這些部署功能，以將工作流程 AWS 保留在 Visual Studio 內：
+ 只要按一下，即可部署您的應用程式。
+ 根據您的應用程式提供的部署建議。
+ 自動建立 Dockerfile，因為 部署目的地環境 （部署目標） 相關且必要。
+ 根據您的部署目標，最佳化應用程式建置和封裝的設定。

**注意**  
如需有關發佈 .NET Framework 應用程式的其他資訊，請參閱《[Elastic Beanstalk 上的建立和部署 .NET 應用程式](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_NET.html)》指南。  
您也可以 AWS 從 .NET CLI 存取 的發佈。如需詳細資訊，請參閱《 指南[》上的部署 .NET 應用程式 AWS](https://aws.github.io/aws-dotnet-deploy/)。

**Topics**
+ [先決條件](#publish-experience-prerequisities)
+ [支援的應用程式類型](#publish-experience-apptypes)
+ [將應用程式發佈至 AWS 目標](#publish-experience-deployment)

## 先決條件
<a name="publish-experience-prerequisities"></a>

若要將 .NET 應用程式成功發佈至 AWS 服務，請將下列安裝至本機裝置：
+ .NET Core 3.1\$1 （包括 .NET5 和 .NET6)：如需這些產品和下載資訊的其他資訊，請造訪 [Microsoft 下載網站](https://dotnet.microsoft.com/download)。
+ Node.js 14.x 或更新版本：需要 Node.js 才能執行 AWS Cloud Development Kit (AWS CDK)。若要下載或取得 Node.js 的詳細資訊，請造訪 [Node.js 下載網站](https://nodejs.org/en/download/)。
**注意**  
發佈 以 AWS 利用 AWS CDK 將應用程式及其所有部署基礎設施部署為單一專案。如需 的詳細資訊， AWS CDK 請參閱 [雲端開發套件](https://docs.aws.amazon.com/cdk/v1/guide/home.html)指南。
+ （選用） Docker 用於部署到容器型服務，例如 Amazon ECS。如需詳細資訊和下載 Docker，請參閱 [Docker 下載](https://docs.docker.com/get-docker/)網站。

## 支援的應用程式類型
<a name="publish-experience-apptypes"></a>

在發佈至新的或結束的目標之前，請先在 Visual Studio 中建立或開啟下列其中一個專案類型：
+ ASP.NET Core 應用程式
+ .NET 主控台應用程式
+ Blazor WebAssembly 應用程式

## 將應用程式發佈至 AWS 目標
<a name="publish-experience-deployment"></a>

發佈至新目標時，發佈至 AWS 將透過提出建議並使用常用設定來引導您完成程序。如果您需要發佈至先前設定的目標，您的偏好設定會儲存並可調整，或可立即用於一鍵式部署。

**注意**  
**工具組與 .NET CLI Server 整合：**  
發佈會在 localhost 上啟動 .NET 伺服器程序，以執行發佈程序。

### 發佈至新目標
<a name="publish-experience-deployment-newtarget"></a>

以下說明如何在發佈至新目標時設定發佈至 AWS 部署偏好設定。

1. 從 **AWS Explorer** 展開**登入**資料下拉式功能表，然後選擇與部署所需的區域 AWS 和服務對應的 AWS 設定檔。

1. 展開**區域**下拉式功能表，然後選擇 AWS 包含部署所需 AWS 服務的區域。

1. 從 Visual Studio **Solutions Explorer** 窗格中，開啟專案名稱的內容選單 （按一下滑鼠右鍵），然後選擇**發佈至 AWS**。這會開啟**發佈至 AWS**。

1. 從**發佈至 AWS**，選擇**發佈至新目標**以設定新的部署。
**注意**  
若要修改您的預設部署登入資料，請選擇或按一下**發佈至 AWS**中的**登入**資料區段旁的**編輯**連結。  
若要略過目標組態程序，請選擇**發佈至現有目標**，然後從先前部署目標的清單中選擇您偏好的組態。

1. 從**發佈目標**窗格中，選擇 AWS 服務來管理您的應用程式部署。

1. 當您對組態感到滿意時，請選擇**發佈**以開始部署程序。
**注意**  
啟動部署後，**發佈 AWS**以顯示下列狀態更新：  
在部署過程中，**發佈 以顯示 AWS**部署進度的相關資訊。
遵循部署程序，**發佈 以 AWS**指出部署成功或失敗。
成功部署後，**資源**面板會提供所建立資源的其他資訊。此資訊會根據應用程式和部署組態的類型而有所不同。

### 發佈至現有目標
<a name="publish-experience-deployment-existingtarget"></a>

以下說明如何將 .NET 應用程式重新發佈至現有 AWS 目標。

1. 從 **AWS Explorer** 展開**登入**資料下拉式功能表，然後選擇與部署所需的區域 AWS 和服務對應的 AWS 設定檔。

1. 展開**區域**下拉式功能表，然後選擇 AWS 包含部署所需 AWS 服務的區域。

1. 從 Visual Studio **Solutions Explorer** 窗格中，在專案的名稱上按一下滑鼠右鍵，然後選擇**發佈至 AWS**以開啟**發佈至 AWS**。

1. 從**發佈至 AWS**，選擇**發佈至現有目標**，從現有目標清單中選取您的部署環境。
**注意**  
如果您最近已將任何應用程式發佈至 AWS 雲端，這些應用程式會顯示在 發佈至 中 AWS。

1. 選取您要部署應用程式的發佈目標，然後按一下**發佈**以開始部署程序。

# 使用 .NET Core CLI 部署 AWS Lambda 專案
<a name="lambda-cli-publish"></a>

 AWS Toolkit for Visual Studio 包含 Visual Studio 的 AWS Lambda .NET Core 專案範本。您可以使用 .NET Core 命令列界面 (CLI) 部署 Visual Studio 中內建的 Lambda 函數。

**Topics**
+ [先決條件](#lambda-cli-prereqs)
+ [相關主題](#lambda-cli-related)
+ [列出透過 .NET Core CLI 可用的 Lambda 命令](#listing-the-lam-commands-available-through-the-cli)
+ [從 .NET Core CLI 發佈 .NET Core Lambda 專案](#publishing-a-net-core-lam-project-from-the-net-core-cli)

## 先決條件
<a name="lambda-cli-prereqs"></a>

使用 .NET Core CLI 部署 Lambda 函數之前，您必須符合下列先決條件：
+ 確定已安裝 Visual Studio 2015 Update 3。
+ 安裝適用於 [Windows 的 .NET Core](https://dotnet.microsoft.com/download#windowsvs2015)。
+ 設定 .NET Core CLI 以使用 Lambda。如需詳細資訊，請參閱《 *AWS Lambda 開發人員指南*》中的 .[NET Core CLI](https://docs.aws.amazon.com//lambda/latest/dg/csharp-package-cli.html)。
+ 安裝 Toolkit for Visual Studio。如需詳細資訊，請參閱[安裝 AWS Toolkit for Visual Studio](setup.md#install)。

## 相關主題
<a name="lambda-cli-related"></a>

當您使用 .NET Core CLI 部署 Lambda 函數時，下列相關主題會很有幫助：
+ 如需 Lambda 函數的詳細資訊，請參閱《 *AWS Lambda 開發人員指南*》中的[什麼是 AWS Lambda？](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)。
+ 如需在 Visual Studio 中建立 Lambda 函數的詳細資訊，請參閱 [AWS Lambda](lambda-index.md)。
+ 如需 Microsoft .NET Core 的詳細資訊，請參閱 Microsoft 線上文件中的 .[NET Core](https://docs.microsoft.com/en-us/dotnet/articles/core/)。

## 列出透過 .NET Core CLI 可用的 Lambda 命令
<a name="listing-the-lam-commands-available-through-the-cli"></a>

若要列出可透過 .NET Core CLI 取得的 Lambda 命令，請執行下列動作。

1. 開啟命令提示視窗，然後導覽至包含 Visual Studio .NET Core Lambda 專案的資料夾。

1. 輸入 `dotnet lambda --help`。

```
C:\Lambda\AWSLambda1\AWSLambda1>dotnet lambda --help AWS Lambda Tools for .NET Core functions
    Project Home: https://github.com/aws/aws-lambda-dotnet
    .
    Commands to deploy and manage Lambda functions:
    .
            deploy-function         Deploy the project to Lambda
            invoke-function         Invoke the function in Lambda with an optional input
            list-functions          List all of your Lambda functions
            delete-function         Delete a Lambda function
            get-function-config     Get the current runtime configuration for a Lambda function
            update-function-config  Update the runtime configuration for a Lambda function
    .
    Commands to deploy and manage AWS serverless applications using AWS CloudFormation:
    .
            deploy-serverless       Deploy an AWS serverless application
            list-serverless         List all of your AWS serverless applications
            delete-serverless       Delete an AWS serverless application
    .
    Other Commands:
    .
            package                 Package a Lambda project into a .zip file ready for deployment
    .
    To get help on individual commands, run the following:

            dotnet lambda help <command>
```

## 從 .NET Core CLI 發佈 .NET Core Lambda 專案
<a name="publishing-a-net-core-lam-project-from-the-net-core-cli"></a>

下列指示假設您已在 Visual Studio 中建立 AWS Lambda .NET Core 函數。

1. 開啟命令提示視窗，然後導覽至包含 Visual Studio .NET Core Lambda 專案的資料夾。

1. 輸入 `dotnet lambda deploy-function`。

1. 出現提示時，輸入要部署的函數名稱。它可以是新名稱或現有函數的名稱。

1. 出現提示時，輸入 AWS 區域 （將部署 Lambda 函數的區域）。

1. 出現提示時，選取或建立 Lambda 在執行函數時將擔任的 IAM 角色。

成功完成時，會顯示**建立的新 Lambda 函數**訊息。

```
C:\Lambda\AWSLambda1\AWSLambda1>dotnet lambda deploy-function
Executing publish command
... invoking 'dotnet publish', working folder 'C:\Lambda\AWSLambda1\AWSLambda1\bin\Release\netcoreapp1.0\publish'
... publish: Publishing AWSLambda1 for .NETCoreApp,Version=v1.0
... publish: Project AWSLambda1 (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
... publish: Compiling AWSLambda1 for .NETCoreApp,Version=v1.0
... publish: Compilation succeeded.
... publish:     0 Warning(s)
... publish:     0 Error(s)
... publish: Time elapsed 00:00:01.2479713
... publish:
... publish: publish: Published to C:\Lambda\AWSLambda1\AWSLambda1\bin\Release\netcoreapp1.0\publish
... publish: Published 1/1 projects successfully
Zipping publish folder C:\Lambda\AWSLambda1\AWSLambda1\bin\Release\netcoreapp1.0\publish to C:\Lambda\AWSLambda1\AWSLamb
da1\bin\Release\netcoreapp1.0\AWSLambda1.zip
Enter Function Name: (AWS Lambda function name)
DotNetCoreLambdaTest
Enter AWS Region: (The region to connect to AWS services)
us-west-2
Creating new Lambda function
Select IAM Role that Lambda will assume when executing function:
    1) lambda_exec_LambdaCoreFunction
    2) *** Create new IAM Role ***
1
New Lambda function created
```

如果您部署現有的 函數，則部署函數只會向 AWS 區域要求 。

```
C:\Lambda\AWSLambda1\AWSLambda1>dotnet lambda deploy-function
Executing publish command
Deleted previous publish folder
... invoking 'dotnet publish', working folder 'C:\Lambda\AWSLambda1\AWSLambda1\bin\Release\netcoreapp1.0\publish'
... publish: Publishing AWSLambda1 for .NETCoreApp,Version=v1.0
... publish: Project AWSLambda1 (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
... publish: publish: Published to C:\Lambda\AWSLambda1\AWSLambda1\bin\Release\netcoreapp1.0\publish
... publish: Published 1/1 projects successfully
Zipping publish folder C:\Lambda\AWSLambda1\AWSLambda1\bin\Release\netcoreapp1.0\publish to C:\Lambda\AWSLambda1\AWSLamb
da1\bin\Release\netcoreapp1.0\AWSLambda1.zip
Enter Function Name: (AWS Lambda function name)
DotNetCoreLambdaTest
Enter AWS Region: (The region to connect to AWS services)
us-west-2
Updating code for existing function
```

部署 Lambda 函數之後，即可開始使用。如需詳細資訊，請參閱[如何使用 AWS Lambda 的範例](https://docs.aws.amazon.com/lambda/latest/dg/use-cases.html)。

Lambda 會自動為您監控 Lambda 函數，並透過 Amazon CloudWatch 報告指標。若要監控和疑難排解 Lambda 函數，請參閱[使用 Amazon CloudWatch 疑難排解和監控 AWS Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html)。

# 使用 AWS Toolkit for Visual Studio 搭配 Amazon Q 在 Visual Studio AWS Elastic Beanstalk 中部署至
<a name="deployment-beanstalk"></a>

AWS Elastic Beanstalk 是一種服務，可簡化為您的應用程式佈建 AWS 資源的程序。Elastic Beanstalk 提供部署應用程式所需的所有 AWS 基礎設施。此基礎設施包括：
+ 託管應用程式可執行檔和內容的 Amazon EC2 執行個體。
+ Auto Scaling 群組可維護適當數量的 Amazon EC2 執行個體，以支援您的應用程式。
+ Elastic Load Balancing 負載平衡器，可將傳入流量路由至頻寬最高的 Amazon EC2 執行個體。

本使用者指南主題說明如何在 AWS Toolkit with Amazon Q 中使用 Elastic Beanstalk 精靈。如需 Elastic Beanstalk 特定的詳細資訊，請參閱 [AWS Elastic Beanstalk](https://docs.aws.amazon.com//elasticbeanstalk/latest/dg/Welcome.html)開發人員指南。下列主題章節說明 AWS Toolkit with Amazon Q 的 Elastic Beanstalk 精靈。

**Topics**
+ [部署 ASP.NET 應用程式 （傳統）](deployment-beanstalk-traditional.md)
+ [部署 ASP.NET 應用程式 (.NET Core) （舊版）](deployment-beanstalk-netcore.md)
+ [指定 AWS 登入資料](deployment-beanstalk-specify-credentials.md)
+ [重新發佈至 Elastic Beanstalk （舊版）](deployment-beanstalk-republish.md)
+ [自訂部署 （傳統）](deployment-beanstalk-custom.md)
+ [自訂部署 (.NET Core)](deployment-beanstalk-custom-netcore.md)
+ [多個應用程式支援](deployment-beanstalk-multiple-application.md)

# 將傳統 ASP.NET 應用程式部署至 Elastic Beanstalk
<a name="deployment-beanstalk-traditional"></a>

本節說明如何使用 Toolkit for Visual Studio 提供的 **Publish to Elastic Beanstalk** 精靈，透過 Elastic Beanstalk 部署應用程式。若要練習，您可以使用內建於 Visual Studio 的 Web 應用程式入門專案執行個體，也可以使用自己的專案。

**注意**  
精靈也支援部署 ASP.NET Core 應用程式。如需 ASP.NET Core 的詳細資訊，請參閱 [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)目錄。

**注意**  
您必須先下載並安裝 [Web Deploy](http://www.microsoft.com/en-us/download/details.aspx?id=39277)，才能使用 **Publish to Elastic Beanstalk** 精靈。精靈依賴 Web Deploy 將 Web 應用程式和網站部署到網際網路資訊服務 (IIS) Web 伺服器。

## 建立範例 Web 應用程式啟動者專案
<a name="to-create-a-sample-web-application-starter-project"></a>

1. 在 Visual Studio 中，從**檔案**功能表中，選擇**新增**，然後選擇**專案**。

1. 在 **New Project (新增專案)** 對話方塊的導覽窗格中，展開 **Installed (已安裝)**、展開 **Templates (範本)**，展開 **Visual C\$1**，然後選擇 **Web**。

1. 在 Web 專案範本的清單中，選擇其描述中包含文字 `Web` 和 `Application` 的任何範本。在此範例中，選擇 **ASP.NET Web Forms 應用程式**。  
![\[New Project window showing ASP.NET web application templates for Visual C# in .NET Framework 4.5.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-new-web-project-console.png)

1. 在 **Name (名稱)** 方塊中，輸入 `AEBWebAppDemo`。

1. 在**位置**方塊中，輸入開發機器上解決方案資料夾的路徑，或選擇**瀏覽**，然後瀏覽並選擇解決方案資料夾，然後選擇**選取資料夾**。

1. 確認已選取 **Create directory for solution (為方案建立目錄)** 方塊。在**解決方案**下拉式清單中，確認已選取**建立新解決方案**，然後選擇**確定**。Visual Studio 將根據 ASP.NET Web Forms 應用程式專案範本建立解決方案和專案。然後，Visual Studio 會顯示新解決方案和專案出現的位置。  
![\[Solution Explorer window showing project structure with folders and files for a web application.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-web-app-solution-explorer-console.png)

## 使用發佈至 Elastic Beanstalk 精靈部署應用程式
<a name="to-deploy-an-application-by-using-the-publish-to-elastic-beanstalk-wizard"></a>

1. 在解決方案總管中，開啟您在上一節中建立之專案的 **AEBWebAppDemo** 專案資料夾內容 （按一下滑鼠右鍵） 選單，或開啟您自己應用程式之專案資料夾的內容選單，然後選擇**發佈至 AWS Elastic Beanstalk**。  
![\[Solution Explorer context menu showing "Publish to AWS..." option for AEBWebAppDemo project.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-publish-to-aws-console.png)

   **Publish to Elastic Beanstalk (發佈至 Elastic Beanstalk)** 精靈隨即顯示。  
![\[Publish to AWS Elastic Beanstalk wizard interface for creating or redeploying an application environment.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-aeb-wizard-app-console.png)

1. 在**設定檔**中，從**用於部署的帳戶設定檔**下拉式清單中，選擇您要用於部署 AWS 的帳戶設定檔。

   或者，如果您有要使用 AWS 的帳戶，但尚未為其建立 AWS 帳戶設定檔，您可以選擇帶有加號 (`+`) 的按鈕來新增 AWS 帳戶設定檔。

1. 從**區域**下拉式清單中，選擇您希望 Elastic Beanstalk 部署應用程式的區域。

1. 在**部署目標**中，您可以選擇**建立新的應用程式環境**以執行應用程式的初始部署，或**重新部署至現有環境**以重新部署先前部署的應用程式。（先前的部署可能已使用精靈或已棄用的獨立部署工具來執行。) 如果您選擇**重新部署到現有環境**，精靈從目前正在執行的先前部署擷取資訊時，可能會有延遲。
**注意**  
如果您選擇**重新部署至現有環境**，請在清單中選擇環境，然後選擇**下一步**，精靈會直接帶您前往**應用程式選項**頁面。如果您前往此路由，請跳到本節稍後說明如何使用**應用程式選項**頁面的指示。

1. 選擇**下一步**。  
![\[Application Environment setup page for AWS with fields for name, environment, and URL.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-aeb-wizard-env-console.png)

1. 在**應用程式環境**頁面上，在**應用程式**區域中，**名稱**下拉式清單會提議應用程式的預設名稱。您可以從下拉式清單中選擇不同的名稱來變更預設名稱。

1. 在**環境**區域中的名稱****下拉式清單中，輸入 Elastic Beanstalk 環境的名稱。在這種情況下，*環境*一詞是指您應用程式的基礎設施 Elastic Beanstalk 佈建。在此下拉式清單中可能已建議預設名稱。如果尚未提議預設名稱，您可以在有任何其他名稱可用時，輸入一個名稱或從下拉式清單中選擇一個名稱。環境名稱不能超過 23 個字元。

1. 在 **URL** 區域中，方塊提議的預設子網域 `.elasticbeanstalk.com` 將是 Web 應用程式的 URL。您可以輸入新的子網域名稱來變更預設子網域。

1. 選擇**檢查可用性**，以確保您 Web 應用程式的 URL 尚未使用。

1. 如果 Web 應用程式的 URL 可以使用，請選擇**下一步**。

![\[AWS EC2 launch configuration settings for deploying an application to Amazon Web Services.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-aeb-wizard-ec2-console.png)


1. 在**AWS 選項**頁面的 **Amazon EC2 啟動組態**中，從**容器類型**下拉式清單中選擇將用於應用程式的 Amazon Machine Image (AMI) 類型。

1. 在**執行個體類型**下拉式清單中，指定要使用的 Amazon EC2 執行個體類型。在此範例中，我們建議您使用 **Micro**。這將最大限度地減少與執行執行個體相關聯的成本。如需 Amazon EC2 成本的詳細資訊，請前往 [EC2 定價](https://aws.amazon.com/ec2/pricing/)頁面。

1. 在**金鑰對**下拉式清單中，選擇要用於登入應用程式所用執行個體的 Amazon EC2 執行個體金鑰對。

1. 或者，在**使用自訂 AMI** 方塊中，您可以指定自訂 AMI，以覆寫**容器類型**下拉式清單中指定的 AMI。如需如何建立自訂 AMI 的詳細資訊，請參閱 [AWS Elastic Beanstalk 開發人員指南](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/)中的[使用自訂 AMIs](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.customami.html)[，以及從 Amazon EC2 執行個體建立 AMI](tkv-create-ami-from-instance.md)。

1. 或者，如果您想要在 VPC 中啟動執行個體，請選取**使用 VPC **方塊。

1. 或者，如果您想要啟動單一 Amazon EC2 執行個體，然後將應用程式部署到該執行個體，請選取**單一執行個體環境**方塊。

   如果您選取此方塊，Elastic Beanstalk 仍會建立 Auto Scaling 群組，但不會進行設定。如果您想要稍後設定 Auto Scaling 群組，您可以使用 AWS 管理主控台。

1. 或者，如果您想要控制應用程式部署到執行個體的條件，請選取**啟用滾動部署**方塊。只有在您尚未選取**單一執行個體環境**方塊時，才能選取此方塊。

1. 如果您的應用程式使用 Amazon S3 和 DynamoDB 等 AWS 服務，提供登入資料的最佳方法是使用 IAM 角色。在**部署的應用程式許可**區域中，您可以選擇現有的 IAM 角色，或建立精靈用來啟動環境的 IAM 角色。使用 的應用程式 適用於 .NET 的 AWS SDK 會在向 AWS 服務提出請求時，自動使用此 IAM 角色提供的登入資料。

1. 如果您的應用程式存取 Amazon RDS 資料庫，請在**關聯式資料庫存取**區域的下拉式清單中，選取精靈將更新的任何 Amazon RDS 安全群組旁的方塊，以便您的 Amazon EC2 執行個體可以存取該資料庫。

1. 選擇**下一步**。
   + 如果您選取**使用 VPC**，則會顯示 **VPC 選項**頁面。
   + 如果您選取**了啟用滾動部署**，但未選取**使用 VPC**，則**滾動部署**頁面將會顯示。請跳到本節稍後的說明，以說明如何使用**滾動部署**頁面。
   + 如果您未選取**使用 VPC** 或**啟用滾動部署**，則會顯示**應用程式選項**頁面。請跳到本節稍後說明如何使用**應用程式選項**頁面的說明。

1. 如果您選取**使用 VPC**，請在 **VPC 選項**頁面上指定資訊，以在 VPC 中啟動您的應用程式。  
![\[VPC Options interface for configuring AWS Elastic Beanstalk application deployment settings.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-aeb-wizard-vpc-console.png)

   VPC 必須已建立。如果您在 Toolkit for Visual Studio 中建立 VPC， Toolkit for Visual Studio 會為您填入此頁面。如果您在 [AWS 管理主控台](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo-vpc-basic.html)中建立 VPC，請在此頁面中輸入 VPC 的相關資訊。

## 部署至 VPC 的重要考量事項
<a name="key-considerations-for-deployment-to-a-vpc"></a>
+ 您的 VPC 至少需要一個公有和一個私有子網路。
+ 在 *ELB 子網路*下拉式清單中，指定公有子網路。Toolkit for Visual Studio 會將您應用程式的 Elastic Load Balancing 負載平衡器部署至公有子網路。公有子網路與具有指向網際網路閘道項目的路由表相關聯。您可以辨識網際網路閘道，因為它的 ID 開頭為 `igw-`（例如 `igw-83cddaex`)。您使用 Toolkit for Visual Studio 建立的公有子網路具有識別為公有的標籤值。
+ 在*執行個體子網路*下拉式清單中，指定私有子網路。Toolkit for Visual Studio 會將您應用程式的 Amazon EC2 執行個體部署到私有子網路。
+ 應用程式適用的 Amazon EC2 執行個體會透過公有子網路中執行網路位址轉譯 (NAT) 的 Amazon EC2 執行個體，從私有子網路與網際網路通訊。若要啟用此通訊，您需要一個 [VPC 安全群組](https://console.aws.amazon.com/vpc/home)，允許流量從私有子網路流向 NAT 執行個體。在安全群組下拉式清單中指定此 VPC *安全群組*。

如需如何將 Elastic Beanstalk 應用程式部署至 VPC 的詳細資訊，請參閱 [AWS Elastic Beanstalk 開發人員指南](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/)。

1. 填寫 **VPC 選項**頁面上的所有資訊後，選擇**下一步**。
   + 如果您選取**啟用滾動部署**，則**滾動部署**頁面將會顯示。
   + 如果您未選取**啟用滾動部署**，則會顯示**應用程式選項**頁面。請跳到本節稍後說明如何使用**應用程式選項**頁面的說明。

1. 如果您選取**啟用滾動部署**，您可以在**滾動部署**頁面上指定資訊，以設定應用程式的新版本如何部署到負載平衡環境中的執行個體。例如，如果您的環境中有四個執行個體，而且您想要變更執行個體類型，您可以設定環境一次變更兩個執行個體。這有助於確保您的應用程式在進行變更時仍在執行。  
![\[Rolling Deployments configuration interface for AWS application updates and environment settings.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-aeb-wizard-rolling-console.png)

1. 在*應用程式版本*區域中，選擇選項以控制一次部署到百分比或數量的執行個體。指定所需的百分比或數字。

1. 或者，如果您想要指定部署期間保留在服務的執行個體數量，請在*環境組態*區域中選取方塊。如果您選取此方塊，請指定一次應修改的執行個體數目上限、一次應保留在服務的執行個體數目下限，或兩者。

1. 選擇*下一步*。

1. 在**應用程式選項**頁面上，您可以指定組建、網際網路資訊服務 (IIS) 和應用程式設定的相關資訊。  
![\[Application Options interface for configuring build and deployment settings for AWS.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-aeb-wizard-options-console.png)

1. 在**建置和 IIS 部署設定**區域中，在**專案建置組態**下拉式清單中，選擇目標建置組態。如果精靈可以找到它，**則版本**會顯示在此方塊中。

1. 在**應用程式集區**下拉式清單中，選擇應用程式所需的 .NET Framework 版本。應該已顯示正確的 .NET Framework 版本。

1. 如果您的應用程式為 32 位元，請選取**啟用 32 位元應用程式**方塊。

1. 在**應用程式路徑**方塊中，指定 IIS 將用於部署應用程式的路徑。預設會指定**預設網站/**，通常會轉譯為路徑 `c:\inetpub\wwwroot`。如果您指定**預設網站/**以外的路徑，精靈會在指向您指定路徑**的預設網站/**路徑中放置重新導向。

1. 在**應用程式設定**區域中，於**運作狀態檢查 URL** 方塊中，輸入 Elastic Beanstalk 的 URL 以檢查 Web 應用程式是否仍然回應。此 URL 與根伺服器 URL 相關。預設會指定根伺服器 URL。例如，如果完整 URL 為 `example.com/site-is-up.html`，則輸入 `/site-is-up.html`。

1. 在**索引**鍵和**值**區域中，您可以指定要新增至應用程式`Web.config`檔案的任何索引鍵和值對。
**注意**  
雖然不建議，但您可以使用**金鑰**和**值**的 區域來指定應用程式應執行的 AWS 登入資料。偏好的方法是在**AWS 選項**頁面的 **Identity and Access Management Role 下拉式清單中指定 IAM 角色**。不過，如果您必須使用 AWS 登入資料而非 IAM 角色來執行應用程式，請在**金鑰**列中選擇 **AWSAccessKey**。在**值**列中，輸入存取金鑰。針對 **AWSSecretKey** 重複這些步驟。

1. 選擇**下一步**。  
![\[Review window for publishing an application to AWS Elastic Beanstalk with deployment details.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-aeb-wizard-review-console.png)

1. 在**檢閱**頁面上，檢閱您設定的選項，並在**精靈關閉時選取開啟環境狀態視窗**方塊。

1. 如果各個項目都正確，請選擇 **Deploy (部署)**。
**注意**  
當您部署應用程式時，作用中的帳戶會針對應用程式使用 AWS 的資源收取費用。

   有關部署的資訊將顯示在 Visual Studio 狀態列和**輸出**視窗中。這可能需要幾分鐘的時間。部署完成時，**輸出**視窗中會顯示確認訊息。

1. 若要刪除部署，請在 AWS Explorer 中展開 **Elastic Beanstalk** 節點，開啟部署子節點的內容 （按一下滑鼠右鍵） 選單，然後選擇**刪除**。刪除程序可能需要幾分鐘的時間。

# 將 ASP.NET Core 應用程式部署至 Elastic Beanstalk （舊版）
<a name="deployment-beanstalk-netcore"></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)目錄。

AWS Elastic Beanstalk 是一種服務，可簡化為您的應用程式佈建 AWS 資源的程序。 AWS Elastic Beanstalk 提供部署應用程式所需的所有 AWS 基礎設施。

Toolkit for Visual Studio 支援 AWS 使用 Elastic Beanstalk 將 ASP.NET Core 應用程式部署至 。ASP.NET Core 是 ASP.NET 的重新設計，採用模組化架構，可將相依性開銷降至最低，並簡化您的應用程式以在雲端中執行。

AWS Elastic Beanstalk 可讓您輕鬆地以各種不同的語言部署應用程式 AWS。Elastic Beanstalk 同時支援傳統 ASP.NET 應用程式和 ASP.NET Core 應用程式。本主題說明部署 ASP.NET Core 應用程式。

## 使用 部署精靈
<a name="tkv-deploy-using-wizard-netcore"></a>

將 ASP.NET Core 應用程式部署到 Elastic Beanstalk 的最簡單方法是使用 Toolkit for Visual Studio。

如果您之前已使用 工具組來部署傳統 ASP。NET 應用程式，您會發現 ASP.NET Core 的體驗非常相似。在下列步驟中，我們將逐步解說部署體驗。

如果您之前從未使用過工具組，安裝工具組後需要做的第一件事就是向工具組註冊您的 AWS 登入資料。如需[如何指定 Application for Visual Studio AWS 安全登入](deployment-beanstalk-specify-credentials.md#tkv-deploy-specify-credentials-for-application)資料的詳細資訊，請參閱如何指定。

若要部署 ASP.NET Core Web 應用程式，請在解決方案總管中的專案上按一下滑鼠右鍵，然後選取**發佈至 AWS...**。

在發佈至 AWS Elastic Beanstalk 部署精靈的第一頁上，選擇建立新的 Elastic Beanstalk 應用程式。Elastic Beanstalk「應用程式」為 Elastic Beanstalk 元件的邏輯集合，包括「環境」、「版本」和「環境資訊」。部署精靈會產生應用程式，其中包含應用程式版本和環境的集合。環境包含執行應用程式版本的實際 AWS 資源。每次部署應用程式時，都會建立新的應用程式版本，精靈會將環境指向該版本。您可以在 [Elastic Beanstalk 元件中進一步了解這些概念](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.components.html)。

接著，設定應用程式的名稱及其第一個環境。每個環境都有與其相關聯的唯一 CNAME，您可以在部署完成時用來存取應用程式。

下一頁**AWS 的選項**可讓您設定要使用 AWS 的資源類型。在此範例中，請保留預設值，**金鑰對**區段除外。金鑰對可讓您擷取 Windows 管理員密碼，以便登入機器。如果您尚未建立金鑰對，建議您選取**建立新金鑰對**。

## 許可
<a name="tkv-deploy-using-wizard-netcore-permissions"></a>

**許可**頁面用於將 AWS 登入資料指派給執行您應用程式的 EC2 執行個體。如果您的應用程式使用 適用於 .NET 的 AWS SDK 存取其他 AWS 服務，這很重要。如果您未使用應用程式的任何其他 服務，則可以保留此頁面的預設值。

## 應用程式選項
<a name="tkv-deploy-using-wizard-netcore-app-options"></a>

**應用程式選項**頁面上的詳細資訊與部署傳統 ASP.NET 應用程式時指定的詳細資訊不同。在這裡，您可以指定用於封裝應用程式的建置組態和架構，並指定應用程式的 IIS 資源路徑。

完成**應用程式選項**頁面後，請按一下**下一步**以檢閱設定，然後按一下**部署**以開始部署程序。

## 檢查環境狀態
<a name="tkv-deploy-using-wizard-netcore-check-status"></a>

在應用程式封裝並上傳至 之後 AWS，您可以從 Visual Studio 中的 AWS Explorer 開啟環境狀態檢視，以檢查 Elastic Beanstalk 環境的狀態。

當環境上線時，事件會顯示在狀態列中。一旦一切完成，環境狀態將移至運作狀態良好。您可以按一下 URL 來檢視網站。您也可以從這裡將日誌從環境或遠端桌面提取到屬於 Elastic Beanstalk 環境一部分的 Amazon EC2 執行個體。

任何應用程式第一次部署需要比後續重新部署更長的時間，因為它會建立新的 AWS 資源。當您在開發期間迭代應用程式時，您可以返回精靈，或在按右鍵專案時選取**重新發佈**選項，以快速重新部署。

透過部署精靈，使用先前執行的設定重新發佈應用程式套件，並將應用程式套件上傳至現有的 Elastic Beanstalk 環境。

# 如何為您的應用程式指定 AWS 安全登入資料
<a name="deployment-beanstalk-specify-credentials"></a>

您在**發佈至 Elastic Beanstalk** 精靈中指定的 AWS 帳戶是精靈將用來部署至 Elastic Beanstalk AWS 的帳戶。

雖然不建議，但您可能還需要指定應用程式在部署服務之後用來存取 AWS 服務 AWS 的帳戶登入資料。偏好的方法是指定 IAM 角色。在**發佈至 Elastic Beanstalk** 精靈中，您可以透過**AWS 選項**頁面上的 **Identity and Access Management Role** 下拉式清單來執行此操作。在舊版**發佈至 Amazon Web Services** 精靈中，您可以透過**AWS 選項**頁面上的 **IAM 角色**下拉式清單來執行此操作。

如果您必須使用 AWS 帳戶登入資料而非 IAM 角色，您可以使用下列其中一種方式為您的應用程式指定 AWS 帳戶登入資料：
+ 參考對應至專案`Web.config`檔案 `appSettings`元素中 AWS 帳戶登入資料的設定檔。（若要建立設定檔，請參閱[設定 AWS 登入](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-config-creds.html)資料。) 下列範例會指定設定檔名稱為 的登入資料`myProfile`。

  ```
  <appSettings>
    <!-- AWS CREDENTIALS -->
    <add key="AWSProfileName" value="myProfile"/>
  </appSettings>
  ```
+ 如果您使用的是**發佈至 Elastic Beanstalk** 精靈，請在**應用程式選項**頁面的**索引鍵**和**值**區域的**索引鍵**列中，選擇 **AWS AccessKey**。在**值**列中，輸入存取金鑰。針對 **AWS SecretKey** 重複這些步驟。
+ 如果您使用舊版**發佈至 Amazon Web Services** 精靈，請在**應用程式選項**頁面**的應用程式登入**資料區域中，選擇**使用這些登入**資料，然後在存取金鑰和私密金鑰方塊中輸入**存取金鑰**和**私密存取金鑰**。

# 如何將應用程式重新發佈至 Elastic Beanstalk 環境 （舊版）
<a name="deployment-beanstalk-republish"></a>

**重要**  
本文件是指舊版服務和功能。如需更新指南和內容，請參閱 [AWS .NET 部署工具](https://aws.github.io/aws-dotnet-deploy/)指南。

您可以透過進行離散變更，然後將新版本重新發佈到已啟動的 Elastic Beanstalk 環境，在應用程式上反覆執行。

1. 在 Solution Explorer 中，開啟您在上一節中發佈之專案的 **AEBWebAppDemo** 專案資料夾內容 （按一下滑鼠右鍵） 選單，然後選擇**發佈至 AWS Elastic Beanstalk**。  
![\[Solution Explorer context menu showing "Publish to AWS..." option for AEBWebAppDemo project.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-publish-to-aws-console.png)

   **Publish to Elastic Beanstalk (發佈至 Elastic Beanstalk)** 精靈隨即顯示。  
![\[Publish to AWS Elastic Beanstalk dialog with profile and deployment options.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-aeb-wizard-app-console2.png)

1. 選取**重新部署至現有環境**，然後選擇您先前發佈的環境。按一下 **Next (下一步)**。

   **檢閱**精靈隨即出現。  
![\[Review wizard showing deployment details for an AWS Elastic Beanstalk application.\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/tkv-aeb-wizard-app-review.png)

1. 按一下**部署**。應用程式將重新部署到相同的環境。

如果您的應用程式正在啟動或終止，則無法重新發佈。

# 自訂 Elastic Beanstalk 應用程式部署
<a name="deployment-beanstalk-custom"></a>

本主題說明 Elastic Beanstalk Microsoft Windows 容器的部署資訊清單如何支援自訂應用程式部署。

對於想要利用 Elastic Beanstalk 的強大功能來建立和管理 AWS 資源，但想要完全控制應用程式部署方式的進階使用者，自訂應用程式部署是一項強大的功能。對於自訂應用程式部署，您可以為 Elastic Beanstalk 執行的三個不同動作建立 Windows PowerShell 指令碼。啟動部署時會使用 安裝動作，從工具組或 Web 主控台呼叫 `RestartAppServer` API 時會使用重新啟動，並在發生新部署時解除安裝在先前的任何部署上叫用。

例如，當您的文件團隊撰寫了他們想要包含在部署中的靜態網站時，您可能有一個您想要部署的 ASP.NET 應用程式。您可以撰寫部署資訊清單來執行此操作，如下所示：

```
{
  "manifestVersion": 1,
  "deployments": {

    "msDeploy": [
      {
        "name": "app",
        "parameters": {
          "appBundle": "CoolApp.zip",
          "iisPath": "/"
        }
      }
    ],
    "custom": [
      {
        "name": "PowerShellDocs",
        "scripts": {
          "install": {
            "file": "install.ps1"
          },
          "restart": {
            "file": "restart.ps1"
          },
          "uninstall": {
            "file": "uninstall.ps1"
          }
        }
      }
    ]
  }
}
```

為每個動作列出的指令碼必須位於相對於部署資訊清單檔案的應用程式套件中。在此範例中，應用程式套件也會包含 documentation.zip 檔案，其中包含由您的文件團隊建立的靜態網站。

`install.ps1` 指令碼會擷取 zip 檔案並設定 IIS 路徑。

```
Add-Type -assembly "system.io.compression.filesystem"
[io.compression.zipfile]::ExtractToDirectory('./documentation.zip', 'c:\inetpub\wwwroot\documentation')

powershell.exe -Command {New-WebApplication -Name documentation -PhysicalPath  c:\inetpub\wwwroot\documentation -Force}
```

由於您的應用程式正在 IIS 中執行，重新啟動動作會叫用 IIS 重設。

```
iisreset /timeout:1
```

對於解除安裝指令碼，請務必清除安裝階段期間使用的所有設定和檔案。如此一來，在新版本的安裝階段，您就可以避免與先前的部署發生衝突。在此範例中，您需要移除靜態網站的 IIS 應用程式，並移除網站檔案。

```
powershell.exe -Command {Remove-WebApplication -Name documentation}
Remove-Item -Recurse -Force 'c:\inetpub\wwwroot\documentation'
```

透過這些指令碼檔案和應用程式套件中包含的 documentation.zip 檔案，部署會建立 ASP.NET 應用程式，然後部署文件網站。

在此範例中，我們選擇一個簡單的範例來部署簡單的靜態網站，但使用自訂應用程式部署，您可以部署任何類型的應用程式，並讓 Elastic Beanstalk 管理其 AWS 資源。

# 自訂 ASP.NET Core Elastic Beanstalk 部署
<a name="deployment-beanstalk-custom-netcore"></a>

本主題說明部署的運作方式，以及使用 Elastic Beanstalk 和 Toolkit for Visual Studio 建立 ASP.NET Core 應用程式時，您可以執行哪些自訂部署。

在您完成 Toolkit for Visual Studio 中的部署精靈後，工具組會封裝應用程式，並將其傳送至 Elastic Beanstalk。建立應用程式套件的第一步是使用新的 dotnet CLI，以使用發佈命令準備應用程式進行**發佈**。架構和組態會從精靈中的設定傳遞至**發佈**命令。因此，如果您為 選擇了**發行**版本`configuration`，並為 選擇了 **netcoreapp1.0**`framework`，則工具組將執行下列命令：

 `dotnet publish --configuration Release --framework netcoreapp1.0` 

當**發佈**命令完成時，工具組會將新的部署資訊清單寫入發佈資料夾。部署資訊清單是名為 **aws-windows-deployment-manifest.json** 的 JSON 檔案，Elastic Beanstalk Windows 容器 (1.2 版或更新版本） 會讀取此檔案以判斷如何部署應用程式。例如，對於您想要在 IIS 根目錄部署的 ASP.NET Core 應用程式，工具組會產生如下所示的資訊清單檔案：

```
{
  "manifestVersion": 1,
  "deployments": {

    "aspNetCoreWeb": [
      {
        "name": "app",
        "parameters": {
          "appBundle": ".",
          "iisPath": "/",
          "iisWebSite": "Default Web Site"
        }
      }
    ]
  }
}
```

`appBundle` 屬性指出應用程式位元與資訊清單檔案的關聯。此屬性可以指向目錄或 ZIP 封存。`iisPath` 和 `iisWebSite` 屬性指出 IIS 中託管應用程式的位置。

## 自訂資訊清單
<a name="tkv-deploy-beanstalk-custom-netcore-manifest"></a>

工具組只會在發佈資料夾中不存在資訊清單檔案時寫入資訊清單檔案。如果檔案確實存在，工具組會更新資訊清單 `aspNetCoreWeb`區段下列出之第一個應用程式中的 `appBundle``iisPath`和 `iisWebSite` 屬性。這可讓您將 **aws-windows-deployment-manifest.json** 新增至您的專案，並自訂資訊清單。若要在 Visual Studio 中為 ASP.NET Core Web 應用程式執行此操作，請將新的 JSON 檔案新增至專案的根目錄，並命名為 **aws-windows-deployment-manifest.json**。

資訊清單必須命名為 **aws-windows-deployment-manifest.json**，且必須位於專案的根目錄。Elastic Beanstalk 容器會在根目錄中尋找資訊清單，如果找到資訊清單，則會叫用部署工具。如果檔案不存在，Elastic Beanstalk 容器會回到較舊的部署工具，其假設封存是 **ms 部署**封存。

為確保 dotnet CLI `publish`命令包含資訊清單，請更新 `project.json` 檔案，以在 的包含區段`include`中包含資訊清單檔案`publishOptions`。

```
{
   "publishOptions": {
     "include": [
       "wwwroot",
       "Views",
       "Areas/**/Views",
       "appsettings.json",
       "web.config",
       "aws-windows-deployment-manifest.json"
     ]
   }
 }
```

現在您已宣告資訊清單，使其包含在應用程式套件中，您可以進一步設定部署應用程式的方式。您可以自訂部署，超出部署精靈支援的範圍。 AWS 已為 **aws-windows-deployment-manifest.json 檔案**定義了 JSON 結構描述，而且當您安裝 Toolkit for Visual Studio 時，安裝程式會註冊結構描述的 URL。

當您開啟 時`windows-deployment-manifest.json`，您會在結構描述下拉式方塊中看到選取的結構描述 URL。您可以導覽至 URL，以取得資訊清單中可設定內容的完整描述。選取結構描述後，Visual Studio 會在您編輯資訊清單時提供 IntelliSense。

您可以執行的其中一個自訂是設定應用程式將在其中執行的 IIS 應用程式集區。下列範例示範如何定義 IIS 應用程式集區 ("customPool")，該集區每 60 分鐘回收一次程序，並使用 將其指派給應用程式`"appPool": "customPool"`。

```
{
  "manifestVersion": 1,
  "iisConfig": {
    "appPools": [
      {
        "name": "customPool",
        "recycling": {
          "regularTimeInterval": 60
        }
      }
    ]
  },
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "app",
        "parameters": {
          "appPool": "customPool"
        }
      }
    ]
  }
}
```

此外，資訊清單可以宣告 Windows PowerShell 指令碼在安裝、重新啟動和解除安裝動作之前和之後執行。例如，下列資訊清單會執行 Windows PowerShell 指令碼`PostInstallSetup.ps1`，以在 ASP.NET Core 應用程式部署至 IIS 之後執行進一步的設定工作。新增這類指令碼時，請確定指令碼已新增至 `project.json` 檔案中 publishOptions 下的包含區段，就像您對 `aws-windows-deployment-manifest.json` 檔案所做的一樣。如果沒有，指令碼不會包含在 dotnet CLI **發佈**命令中。

```
{
  "manifestVersion": 1,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "app",
        "scripts": {
          "postInstall": {
            "file": "SetupScripts/PostInstallSetup.ps1"
          }
        }
      }
    ]
  }
}
```

## .ebextensions 如何？
<a name="tkv-deploy-beanstalk-custom-netcore-ebextensions"></a>

支援 Elastic Beanstalk **.ebextensions** 組態檔案，如同所有其他 Elastic Beanstalk 容器一樣。若要將 .ebextensions 包含在 ASP.NET Core 應用程式中，請將 `.ebextensions`目錄新增至 `project.json` 檔案`publishOptions`的 `include`區段。如需 .ebextensions 的詳細資訊，請參閱 [Elastic Beanstalk 開發人員指南](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html)。

# 適用於 .NET 和 Elastic Beanstalk 的多個應用程式支援
<a name="deployment-beanstalk-multiple-application"></a>

您可以使用部署資訊清單，將多個應用程式部署至相同的 Elastic Beanstalk 環境。

部署資訊清單支援 [ASP.NET Core](http://www.asp.net/core) Web 應用程式，以及 ms 部署傳統 ASP.NET 應用程式的封存。試想一個案例，其中您已使用前端的 ASP.NET Core 和延伸 API 的 Web API 專案來撰寫令人驚豔的新應用程式。您也有使用傳統 ASP.NET 撰寫的管理員應用程式。

工具組的部署精靈著重於部署單一專案。若要利用多個應用程式部署，您必須手動建構應用程式套件。若要開始，請撰寫資訊清單。在此範例中，您會在解決方案的根目錄撰寫資訊清單。

資訊清單中的部署區段有兩個子系：要部署的 ASP.NET Core Web 應用程式陣列，以及要部署的 ms 部署封存陣列。對於每個應用程式，您可以設定 IIS 路徑和應用程式位元相對於資訊清單的位置。

```
{
  "manifestVersion": 1,
  "deployments": {

    "aspNetCoreWeb": [
      {
        "name": "frontend",
        "parameters": {
          "appBundle": "./frontend",
          "iisPath": "/frontend"
        }
      },
      {
        "name": "ext-api",
        "parameters": {
          "appBundle": "./ext-api",
          "iisPath": "/ext-api"
        }
      }
    ],
    "msDeploy": [
      {
        "name": "admin",
        "parameters": {
          "appBundle": "AmazingAdmin.zip",
          "iisPath": "/admin"
        }
      }
    ]
  }
}
```

編寫資訊清單後，您將使用 Windows PowerShell 建立應用程式套件，並更新現有的 Elastic Beanstalk 環境來執行它。指令碼的撰寫假設將從包含 Visual Studio 解決方案的資料夾執行。

您在指令碼中需要做的第一件事是設定工作區資料夾，在其中建立應用程式套件。

```
$publishFolder = "c:\temp\publish"

$publishWorkspace = [System.IO.Path]::Combine($publishFolder, "workspace")
$appBundle = [System.IO.Path]::Combine($publishFolder, "app-bundle.zip")

If (Test-Path $publishWorkspace){
  Remove-Item $publishWorkspace -Confirm:$false -Force
}
If (Test-Path $appBundle){
  Remove-Item $appBundle -Confirm:$false -Force
}
```

建立資料夾之後，就該準備好前端了。如同部署精靈，使用 dotnet CLI 發佈應用程式。

```
Write-Host 'Publish the ASP.NET Core frontend'
$publishFrontendFolder = [System.IO.Path]::Combine($publishWorkspace, "frontend")
dotnet publish .\src\AmazingFrontend\project.json -o $publishFrontendFolder -c Release -f netcoreapp1.0
```

請注意，輸出資料夾使用了子資料夾「前端」，符合您在資訊清單中設定的資料夾。現在，您需要對 Web API 專案執行相同的操作。

```
Write-Host 'Publish the ASP.NET Core extensibility API'
$publishExtAPIFolder = [System.IO.Path]::Combine($publishWorkspace, "ext-api")
dotnet publish .\src\AmazingExtensibleAPI\project.json -o $publishExtAPIFolder -c Release -f netcoreapp1.0
```

管理網站是傳統的 ASP.NET 應用程式，因此您無法使用 dotnet CLI。對於管理員應用程式，您應該使用 msbuild，傳入建置目標套件以建立 msdeploy 封存。根據預設，套件目標會在 `obj\Release\Package` 資料夾下建立 msdeploy 封存，因此您需要將封存複製到發佈工作區。

```
Write-Host 'Create msdeploy archive for admin site'
msbuild .\src\AmazingAdmin\AmazingAdmin.csproj /t:package /p:Configuration=Release
Copy-Item .\src\AmazingAdmin\obj\Release\Package\AmazingAdmin.zip $publishWorkspace
```

若要告知 Elastic Beanstalk 環境如何處理所有這些應用程式，請將資訊清單從您的解決方案複製到發佈工作區，然後壓縮資料夾。

```
Write-Host 'Copy deployment manifest'
Copy-Item .\aws-windows-deployment-manifest.json $publishWorkspace

Write-Host 'Zipping up publish workspace to create app bundle'
Add-Type -assembly "system.io.compression.filesystem"
[io.compression.zipfile]::CreateFromDirectory( $publishWorkspace, $appBundle)
```

現在您已擁有應用程式套件，您可以前往 Web 主控台，並將封存上傳至 Elastic Beanstalk 環境。或者，您可以繼續使用 AWS PowerShell cmdlet 來更新 Elastic Beanstalk 環境與應用程式套件。請確定您已使用 和 `Set-DefaultAWSRegion` cmdlet，將目前的設定檔和區域設定為包含 Elastic Beanstalk 環境的設定檔`Set-AWSCredentials`和區域。

```
Write-Host 'Write application bundle to S3'
# Determine S3 bucket to store application bundle
$s3Bucket = New-EBStorageLocation
Write-S3Object -BucketName $s3Bucket -File $appBundle


$applicationName = "ASPNETCoreOnAWS"
$environmentName = "ASPNETCoreOnAWS-dev"
$versionLabel = [System.DateTime]::Now.Ticks.ToString()

Write-Host 'Update Beanstalk environment for new application bundle'
New-EBApplicationVersion -ApplicationName $applicationName -VersionLabel $versionLabel -SourceBundle_S3Bucket $s3Bucket -SourceBundle_S3Key app-bundle.zip
Update-EBEnvironment -ApplicationName $applicationName -EnvironmentName $environmentName -VersionLabel $versionLabel
```

現在，使用工具組或 Web 主控台中的 Elastic Beanstalk 環境狀態頁面來檢查更新的狀態。完成後，您將能夠導覽至部署資訊清單中 IIS 路徑集所部署的每個應用程式。

# 部署至 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 和叢集，然後按一下叢集。