

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

# 使用 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 路徑集所部署的每個應用程式。