

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

# 使用 Elastic Beanstalk .NET Windows 平台
<a name="create_deploy_NET.container.console"></a>

本主題說明如何在 Elastic Beanstalk 上設定、建置和執行 ASP.NET 和 .NET Core Windows Web 應用程式。

AWS Elastic Beanstalk 針對不同版本的 .NET 程式設計架構和 Windows Server 支援多個平台。如需完整清單，請參閱 *AWS Elastic Beanstalk 平台*文件中的[具備 IIS 的 Windows Server 上的 .NET](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.net)。

Elastic Beanstalk 提供[組態選項](command-options.md)，您可用其於 Elastic Beanstalk 環境中自訂 EC2 執行個體上執行的軟體。您可以設定應用程式所需的環境變數，啟用日誌輪換至 Amazon S3，並進行 .NET Framework 設定。

Elastic Beanstalk 主控台中提供了[修改正在執行環境組態](environment-configuration-methods-after.md)的組態選項。要避免在終止環境的組態時遺失組態，您可以使用[已儲存組態](environment-configuration-savedconfig.md)來儲存您的設定，並在之後套用至另一個環境。

若要將設定儲存於原始程式碼，您可以包含[組態檔案](ebextensions.md)。每次您建立環境或部署應用程式，組態檔案裡的設定就會套用。您也可以使用組態檔案來安裝套件、執行指令碼，並在部署期間執行其他執行個體自訂操作。

在 Elastic Beanstalk 主控台中套用的設定會覆寫組態檔案中相同的設定 (如存在)。這可讓您在組態檔案中擁有預設設定，並以主控台的環境專屬設定覆寫之。如需優先順序以及其他變更設定方法的詳細資訊，請參閱[組態選項](command-options.md)。

## 在 Elastic Beanstalk 主控台中設定 .NET 環境
<a name="dotnet-console"></a>

您可以使用 Elastic Beanstalk 主控台來啟用至 Amazon S3 的日誌輪換，設定您的應用程式可以從環境讀取的變數，並變更 .NET Framework 設定。

**在 Elastic Beanstalk 主控台中設定 .NET 環境**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 在導覽窗格中，選擇**組態**。

1. 在**更新、監控和日誌記錄**組態類別中，選擇**編輯**。

### 容器選項
<a name="dotnet-console-framework"></a>
+ **Target .NET runtime (目標 .NET 執行時間)** – 設定為 `2.0` 來執行 CLR v2。
+ **Enable 32-bit applications (啟用 32 位元應用程式)** – 設定為 `True` 來執行 32 位元應用程式。

### 日誌選項
<a name="dotnet-console-logs"></a>

Log Options (日誌選項) 區段有兩個設定：
+ **執行個體設定檔** – 指定有權存取與您應用程式相關的 Amazon S3 儲存貯體的執行個體設定檔。
+ **Enable log file rotation to Amazon S3** (啟用 Amazon S3 的日誌檔案輪換) – 指定是否將應用程式 Amazon EC2 執行個體的日誌檔案複製到與應用程式關聯的 Amazon S3 儲存貯體。

### 環境屬性
<a name="dotnet-console-properties"></a>

**Environment Properties (環境屬性)** 的部分可讓您針對執行您應用程式的 Amazon EC2 執行個體，來指定其上的環境資訊設定。這些設定會以金鑰值對的形式傳到應用程式。使用 `System.GetEnvironmentVariable` 來讀取這些值。相同金鑰可以同時存在於 `web.config` 中及當作環境屬性。使用 `System.Configuration` 命名空間來讀取 `web.config` 中的數值。

```
NameValueCollection appConfig = ConfigurationManager.AppSettings;
string endpoint = appConfig["API_ENDPOINT"];
```

如需詳細資訊，請參閱「[環境變數和其他軟體設定](environments-cfg-softwaresettings.md)」。

## aws:elasticbeanstalk:container:dotnet:apppool 命名空間
<a name="dotnet-namespaces"></a>

您可以使用[組態檔案](ebextensions.md)來設定組態選項，並在部署期間執行其他的執行個體設定工作。組態選項可以是[平台特定](command-options-specific.md)選項，也可以套用至 Elastic Beanstalk 服務整體中的所有[平台](command-options-general.md)。組態選項會組織成*命名空間*。

.NET 平台於 `aws:elasticbeanstalk:container:dotnet:apppool` 命名空間內定義的選項，可用來設定 .NET 執行時間。

下列範例組態檔案顯示此命名空間可用的各個選項的設定：

**Example .ebextensions/dotnet-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:container:dotnet:apppool:
    Target Runtime: 2.0
    Enable 32-bit Applications: True
```

Elastic Beanstalk 可提供許多組態選項讓您自訂環境。除了組態檔案，您也可以使用主控台、已儲存組態、EB CLI 或 AWS CLI來設定組態選項。如需詳細資訊，請參閱「[組態選項](command-options.md)」。

# 遷移 Elastic Beanstalk Windows Server 平台的主要版本
<a name="dotnet-v2migration"></a>

AWS Elastic Beanstalk 有數個主要版本的 Windows Server 平台。此頁面涵蓋了每個主要版本的主要改善，以及在您遷移至更新版本前應考量的事項。

Windows Server 平台目前的版本為第 2 版 (v2)。若您的應用程式使用任何 v2 之前的 Windows Server 平台版本，我們建議您遷移至 v2。

## Windows Server 平台主要版本中的新功能
<a name="dotnet-v2migration.diffs"></a>

### Windows Server 平台 V2
<a name="dotnet-v2migration.diffs.v2"></a>

Elastic Beanstalk Windows Server 平台的第 2 版 (v2) 已在 [2019 年 2 月發行](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2019-02-21-windows-v2.html)。V2 透過數種重要方式，讓 Windows Server 平台的行為與 Elastic Beanstalk Linux 類型平台的行為更為接近。V2 可完全與舊版 v1 相容，這使得從 v1 遷移的過程更為容易。

Windows Server 平台目前支援以下功能：
+ *版本控制* – 每個版本都會取得新的版本號碼，而您可以在建立和管理環境時參考以前的版本 (您可以使用的版本)。
+ *增強式運作狀態* – 如需詳細資訊，請參閱[Elastic Beanstalk 中的增強型運作狀態報告和監控](health-enhanced.md)。
+ *不可變*部署和*以額外批次進行滾動*部署 – 如需部署原則的詳細資訊，請參閱[將應用程式部署至 Elastic Beanstalk 環境](using-features.deploy-existing-version.md)。
+ *不可變更新* – 如需更新類型的詳細資訊，請參閱[組態變更](environments-updating.md)。
+ *受管平台更新* – 如需詳細資訊，請參閱[受管平台更新](environment-platform-update-managed.md)。

**注意**  
新的部署和更新功能依賴增強式運作狀態。請啟用增強式運作狀態以使用他們。如需詳細資訊，請參閱[啟用 Elastic Beanstalk 增強型運作狀態報告](health-enhanced-enable.md)。

### Windows Server 平台 V1
<a name="dotnet-v2migration.diffs.v1"></a>

Elastic Beanstalk Windows Server 平台的第 1.0.0 版 (v1) 已在 2015 年 10 月發行。此版本變更了 Elastic Beanstalk 在建立環境與更新期間，處理[組態檔案](ebextensions.md)中命令的順序。

先前的平台版本，在解決方案堆疊名稱中並未包含版本號碼：
+ 執行 IIS 8.5 的 64 位元 Windows Server 2012 R2
+ 執行 IIS 8.5 的 64 位元 Windows Server Core 2012 R2
+ 執行 IIS 8 的 64 位元 Windows Server 2012
+ 執行 IIS 7.5 的 64 位元 Windows Server 2008 R2

在先前的版本中，組態檔案的處理順序並不一致。當環境建立時，`Container Commands` 會在應用程式原始碼部署到 IIS 後執行。部署到執行中的環境時，容器指令會在新版本部署之前執行。在進行擴展時，則完全不會處理組態檔案。

除此之外，IIS 會在容器指令執行之前啟動。因此，一些客戶在容器的命令中實作了因應措施，讓 IIS 伺服器在命令執行之前先暫停，等命令執行完成後再次啟動。

第 1 版修正了不一致性，使 Windows Server 平台的行為與 Elastic Beanstalk Linux 類型平台的行為更為接近。在 v1 平台中，Elastic Beanstalk 永遠都會先執行容器命令，再啟動 IIS 伺服器。

v1 平台解決方案堆疊在 Windows Server 版本的後方加上了 `v1`：
+ 執行 IIS 8.5 的 64 位元 Windows Server 2012 R2 1.1.0 版
+ 執行 IIS 8.5 的 64 位元 Windows Server Core 2012 R2 1.1.0 版
+ 執行 IIS 8 的 64 位元 Windows Server 2012 1.1.0 版
+ 執行 IIS 7.5 的 64 位元 Windows Server 2008 R2 1.1.0 版

此外，v1 平台會先將您應用程式來源套件的內容，解壓縮到 `C:\staging\`，再執行容器命令。在容器命令執行完成後，此資料夾的內容會壓縮成 .zip 檔案，然後部署到 IIS。此工作流程可讓您在進行部署之前，先用命令或指令碼來修改應用程式來源套件的內容。

## 從先前的 Windows Server 平台主要版本遷移
<a name="dotnet-v2migration.migration"></a>

請在更新環境前，先閱讀本節的遷移考量事項。若要將您環境的平台更新至更新的版本，請參閱[更新您 Elastic Beanstalk 環境的平台版本](using-features.platform.upgrade.md)。

### 從 V1 到 V2
<a name="dotnet-v2migration.migration.fromv1"></a>

Windows Server 平台 v2 不支援 .NET Core 1.x 及 2.0。若您要將應用程式從 Windows Server v1 遷移至 v2，而您的應用程式使用了其中一個 .NET Core 版本，請將您的應用程式更新至 v2 支援的 .NET Core 版本。如需支援版本的清單，請參閱 *AWS Elastic Beanstalk 平台*中的[具備 IIS 的 Windows Server 上的 .NET](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.net)。

如果您的應用程式使用自訂的 Amazon Machine Image (AMI)，請根據 Windows Server 平台 v2 AMI 建立新自訂 AMI。如需進一步了解，請參閱[在 Elastic Beanstalk 環境中使用自訂 Amazon Machine Image (AMI)](using-features.customenv.md)。

**注意**  
Windows Server v2 的部署和更新功能依賴增強式運作狀態。當您將環境遷移至 v2 時，會停用增強式運作狀態。請啟用它以使用這些功能。如需詳細資訊，請參閱[啟用 Elastic Beanstalk 增強型運作狀態報告](health-enhanced-enable.md)。

### 從 V1 之前的版本
<a name="dotnet-v2migration.migration.fromv0"></a>

除了從 v1 遷移的考量事項，若您要從 v1 版本之前的 Windows Server 解決方案堆疊遷移應用程式，而您目前使用容器命令，請在遷移至更新版本時，移除任何您新增至其中，做為處理過程不一致性因應措施的命令。從 v1 開始，容器命令保證會在部署應用程式來源及啟動 IIS 前完全執行。這可讓您對 `C:\staging` 中的來源進行任何變更，並在此步驟期間修改 IIS 組態檔案，而不會發生任何問題。

例如，您可以使用 從 Amazon S3 AWS CLI 下載 DLL 檔案到您的應用程式來源：

`.ebextensions\copy-dll.config`

```
container_commands:
  copy-dll:
    command: aws s3 cp s3://amzn-s3-demo-bucket/dlls/large-dll.dll .\lib\
```

如需有關使用組態檔案的詳細資訊，請參閱[使用組態檔案 (`.ebextensions`) 來進行進階的環境自訂](ebextensions.md)。

# 透過部署資訊清單執行多個應用程式和 ASP.NET 核心應用程式
<a name="dotnet-manifest"></a>

您可使用部署資訊清單來指示 Elastic Beanstalk 如何部署您的應用程式。使用這個方法，您不需要用 `MSDeploy` 來產生在網站根路徑執行的單一 ASP.NET 應用程式的原始碼套件。相反地，您可以使用資訊清單檔案，在不同的路徑上執行多個應用程式。或者，您也可以告訴 Elastic Beanstalk 用 ASP.NET Core 部署和執行應用程式。您亦可使用部署資訊清單來設定應用程式集區，在其中執行您的應用程式。

部署資訊清單會將 [.NET Core 應用程式](#dotnet-manifest-dotnetcore)適用的支援新增至 Elastic Beanstalk。您可以部署沒有部署資訊清單的 .NET Framework 應用程式。不過，.NET Core 應用程式需要部署資訊清單，才能在 Elastic Beanstalk 上執行。使用部署資訊清單時，請為每個應用程式建立網站封存檔，然後將此封存檔納入內含部署資訊清單的第二個 ZIP 封存檔。

部署資訊清單亦增加[執行不同路徑的多個應用程式](#dotnet-manifest-multiapp)的能力。部署資訊清單會定義一系列部署目標，每個目標都有網站封存檔與 IIS 應執行資訊清單的路徑。例如，您可於 `/api` 路徑執行 Web API 處理非同步請求，並於使用 API 的根路徑執行 Web 應用程式。

您可以使用部署資訊清單來[設定具有自訂繫結和實體路徑的 IIS 網站](#dotnet-manifest-websites)。這可讓您設定網站，在部署應用程式之前接聽特定連接埠或主機名稱。

您也可以使用部署資訊清單來[使用 IIS 或 Kestrel 中的應用程式集區執行多個應用程式](#dotnet-manifest-apppool)。您可將應用程式集區設定為定期重新啟動您的應用程式、執行 32 位元應用程式，或使用特定版本的 .NET Framework 執行時間。

如需完整自訂功能，您可於 Windows PowerShell [自行撰寫部署指令碼](#dotnet-manifest-custom)，並指示 Elastic Beanstalk 安裝、解除安裝和重新啟動應用程式所需執行的指令碼。

部署資訊清單和相關功能需要 Windows Server 平台 [1.2.0 版或更新版本](dotnet-v2migration.md)。

如需略過 IIS 重設等所有可用組態選項、屬性和進階功能的詳細資訊，請參閱[部署資訊清單結構描述參考](dotnet-manifest-schema.md)。

**Topics**
+ [.NET Core 應用程式](#dotnet-manifest-dotnetcore)
+ [執行多個應用程式](#dotnet-manifest-multiapp)
+ [設定 IIS 網站](#dotnet-manifest-websites)
+ [使用應用程式請求路由 (ARR)](#dotnet-manifest-arr)
+ [設定應用程式集區](#dotnet-manifest-apppool)
+ [定義自訂部署](#dotnet-manifest-custom)
+ [部署資訊清單結構描述參考](dotnet-manifest-schema.md)

## .NET Core 應用程式
<a name="dotnet-manifest-dotnetcore"></a>

您可使用部署資訊清單，在 Elastic Beanstalk 上執行 .NET Core 應用程式。.NET Core 是跨平台版本的 .NET，隨附命令列工具 (`dotnet`)。您可以使用它來產生應用程式、在本機執行，並準備發佈。

欲於 Elastic Beanstalk 上執行 .NET Core 應用程式，您可以執行 `dotnet publish` 並將輸出納入 ZIP 封存檔，且不要納入任何其中的目錄。請將網站封存檔與具備類型為 `aspNetCoreWeb` 之部署目標的部署資訊清單，一同放置於原始碼套件。

下列部署資訊清單於根路徑執行的 .NET 核心應用程式，來自名為 `dotnet-core-app.zip` 的網站封存檔。

**Example aws-windows-deployment-manifest.json - .NET core**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "archive": "dotnet-core-app.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

將資訊清單和網站封存檔打包至 ZIP 封存檔來建立原始碼套件。

**Example dotnet-core-bundle.zip**  

```
.
|-- aws-windows-deployment-manifest.json
`-- dotnet-core-app.zip
```

網站封存檔內含編譯的應用程式程式碼、依存項目和 `web.config` 檔案。

**Example dotnet-core-app.zip**  

```
.
|-- Microsoft.AspNetCore.Hosting.Abstractions.dll
|-- Microsoft.AspNetCore.Hosting.Server.Abstractions.dll
|-- Microsoft.AspNetCore.Hosting.dll
|-- Microsoft.AspNetCore.Http.Abstractions.dll
|-- Microsoft.AspNetCore.Http.Extensions.dll
|-- Microsoft.AspNetCore.Http.Features.dll
|-- Microsoft.AspNetCore.Http.dll
|-- Microsoft.AspNetCore.HttpOverrides.dll
|-- Microsoft.AspNetCore.Server.IISIntegration.dll
|-- Microsoft.AspNetCore.Server.Kestrel.dll
|-- Microsoft.AspNetCore.WebUtilities.dll
|-- Microsoft.Extensions.Configuration.Abstractions.dll
|-- Microsoft.Extensions.Configuration.EnvironmentVariables.dll
|-- Microsoft.Extensions.Configuration.dll
|-- Microsoft.Extensions.DependencyInjection.Abstractions.dll
|-- Microsoft.Extensions.DependencyInjection.dll
|-- Microsoft.Extensions.FileProviders.Abstractions.dll
|-- Microsoft.Extensions.FileProviders.Physical.dll
|-- Microsoft.Extensions.FileSystemGlobbing.dll
|-- Microsoft.Extensions.Logging.Abstractions.dll
|-- Microsoft.Extensions.Logging.dll
|-- Microsoft.Extensions.ObjectPool.dll
|-- Microsoft.Extensions.Options.dll
|-- Microsoft.Extensions.PlatformAbstractions.dll
|-- Microsoft.Extensions.Primitives.dll
|-- Microsoft.Net.Http.Headers.dll
|-- System.Diagnostics.Contracts.dll
|-- System.Net.WebSockets.dll
|-- System.Text.Encodings.Web.dll
|-- dotnet-core-app.deps.json
|-- dotnet-core-app.dll
|-- dotnet-core-app.pdb
|-- dotnet-core-app.runtimeconfig.json
`-- web.config
```

## 執行多個應用程式
<a name="dotnet-manifest-multiapp"></a>

您可定義多個部署目標，藉此透過部署資訊清單執行多個應用程式。

以下部署資訊清單設定兩個 .NET Core 應用程式。`WebApiSampleApp` 應用程式實作簡單的 Web API，並在`/api`路徑上提供非同步請求。`DotNetSampleApp` 應用程式是一種 Web 應用程式，其在根路徑處理請求。

**Example aws-windows-deployment-manifest.json - 多個應用程式**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "WebAPISample",
        "parameters": {
          "appBundle": "WebApiSampleApp.zip",
          "iisPath": "/api"
        }
      },
      {
        "name": "DotNetSample",
        "parameters": {
          "appBundle": "DotNetSampleApp.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

此處提供具備多個應用程式的範例應用程式：
+ **可部署原始碼套件** - [dotnet-multiapp-sample-bundle-v2.zip](samples/dotnet-multiapp-sample-bundle-v2.zip)
+ **原始碼** - [dotnet-multiapp-sample-source-v2.zip](samples/dotnet-multiapp-sample-source-v2.zip)

## 設定 IIS 網站
<a name="dotnet-manifest-websites"></a>

您可以使用部署資訊清單，使用自訂繫結和實體路徑來設定 IIS 網站。當您需要設定在特定連接埠上接聽、使用自訂主機名稱或提供特定目錄內容的網站時，此功能非常有用。

下列部署資訊清單會設定使用特定連接埠號碼和自訂實體路徑在 HTTP 上監聽的自訂 IIS 網站：

**Example aws-windows-deployment-manifest.json - IIS 網站組態**  

```
{
  "manifestVersion": 1,
  "iisConfig": {
    "websites": [
      {
        "name": "MyCustomSite",
        "physicalPath": "C:\inetpub\wwwroot\mysite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "mysite.local"
          }
        ]
      }
    ]
  },
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "appBundle": "dotnet-core-app.zip",
          "iisWebSite": "MyCustomSite",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

在此範例中：
+ 使用自訂實體路徑建立名為 "MyCustomSite" 的網站
+ 網站在連接埠 8080 上具有具有特定主機名稱的 HTTP 繫結
+ 使用 `iisWebSite` 參數將 ASP.NET Core 應用程式部署到此自訂網站

## 使用應用程式請求路由 (ARR)
<a name="dotnet-manifest-arr"></a>

應用程式請求路由 (ARR) 和 URL 重寫模組已預先安裝，並可在 Elastic Beanstalk Windows AMIs 中使用。這些模組使用 ebextensions 或應用程式組態，透過 IIS 組態啟用進階路由案例和 URL 操作。

下列範例顯示簡單的部署資訊清單，其中設定具有自訂連接埠的網站，並結合設定基本 ARR 路由的 ebextensions 組態：

**Example aws-windows-deployment-manifest.json - 簡易 ARR 設定**  

```
{
  "manifestVersion": 1,
  "iisConfig": {
    "websites": [
      {
        "name": "ARRSite",
        "physicalPath": "C:\\inetpub\\wwwroot\\arrsite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "localhost"
          }
        ]
      }
    ]
  },
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "BackendApp",
        "parameters": {
          "appBundle": "backend-app.zip",
          "iisWebSite": "ARRSite",
          "iisPath": "/backend"
        }
      }
    ]
  }
}
```

ARR 組態是透過 ebextensions 完成。下列組態會設定基本 ARR 路由規則：

**Example .ebextensions/arr-config.config - 基本 ARR 組態**  

```
files:
  "C:\\temp\\configure-arr.ps1":
    content: |
      # Enable ARR proxy at server level
      Set-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/proxy' -Name 'enabled' -Value 'True'
      
      # Clear any existing global rules to avoid conflicts
      Clear-WebConfiguration -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/rewrite/globalRules'

      # Add global rule to route all requests to backend
      Add-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' `
        -Filter 'system.webServer/rewrite/globalRules' `
        -Name '.' `
        -Value @{
          name = 'Route_to_Backend'
          stopProcessing = 'True'
          match = @{ url = '^(?!backend/)(.*)' }
          action = @{
            type = 'Rewrite'
            url = 'http://localhost:8080/backend/{R:1}'
          }
        }

container_commands:
  01_configure_arr:
    command: powershell -ExecutionPolicy Bypass -File "C:\\temp\\configure-arr.ps1"
    waitAfterCompletion: 0
```

此組態會在連接埠 8080 上建立網站，並設定 ARR 將所有傳入請求路由到在該網站上執行的後端應用程式。

## 設定應用程式集區
<a name="dotnet-manifest-apppool"></a>

您可以在 Windows 環境中支援多個應用程式。可採用兩種方法：
+ 您可以使用 Kestrel Web 伺服器的進程外託管模型。使用此模型，您可以將多個應用程式設定為在一個應用程式集區中執行。
+ 您可以使用進程內託管模型。憑藉此模型，您可以使用多個應用程式集區來執行多個應用程式，且每個集區中只有一個應用程式。如果您使用的是 IIS 伺服器，並且需要執行多個應用程式，則必須使用此方法。

若要設定 Kestrel 在一個應用程式集區中執行多個應用程式，請新增 `hostingModel="OutofProcess"` 檔案中的 `web.config`。請考慮下列範例。

**Example web.config - 用於 Kestrel 進程外託管模型**  

```
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add 
    name="aspNetCore" 
    path="*" verb="*" 
    modules="AspNetCoreModuleV2" 
    resourceType="Unspecified" />
</handlers>
<aspNetCore 
    processPath="dotnet" 
    arguments=".\CoreWebApp-5-0.dll" 
    stdoutLogEnabled="false" 
    stdoutLogFile=".\logs\stdout" 
    hostingModel="OutofProcess" />
</system.webServer>
</location>
</configuration>
```

**Example aws-windows-deployment-manifest.json - 多個應用程式**  

```
{
"manifestVersion": 1,
  "deployments": {"msDeploy": [
      {"name": "Web-app1",
        "parameters": {"archive": "site1.zip",
          "iisPath": "/"
        }
      },
      {"name": "Web-app2",
        "parameters": {"archive": "site2.zip",
          "iisPath": "/app2"
        }
      }
    ]
  }
}
```

IIS 不支援一個應用程式集區中有多個應用程式，因為其使用進程內託管模型。因此，您需要透過將每個應用程式指派給一個應用程式集區，來設定多個應用程式。換句話說，只將一個應用程式指派給一個應用程式集區。

您可以將 IIS 設定為在 `aws-windows-deployment-manifest.json` 檔案中使用不同的應用程式集區。在您參考下一個範例檔案時，請進行下列更新：
+ 新增包含名稱為 `iisConfig` 子區段的 `appPools` 區段。
+ 在 `appPools` 區塊中，列出應用程式集區。
+ 在 `deployments` 區段中，為每個應用程式定義 `parameters` 區段。
+ 針對每個應用程式，`parameters` 區段會指定封存檔、執行它的路徑，以及要在其中執行的 `appPool`。

下列部署資訊清單會設定每 10 分鐘重新啟動應用程式的兩個應用程式集區。它們還將其應用程式附加到在指定路徑上執行的 .NET Framework Web 應用程式。

**Example aws-windows-deployment-manifest.json - 每個應用程式集區一個應用程式**  

```
{
"manifestVersion": 1,
  "iisConfig": {"appPools": [
      {"name": "MyFirstPool",
       "recycling": {"regularTimeInterval": 10}
      },
      {"name": "MySecondPool",
       "recycling": {"regularTimeInterval": 10}
      }
     ]
    },
  "deployments": {"msDeploy": [
      {"name": "Web-app1",
        "parameters": {
           "archive": "site1.zip",
           "iisPath": "/",
           "appPool": "MyFirstPool"
           }
      },
      {"name": "Web-app2",
        "parameters": {
           "archive": "site2.zip",
           "iisPath": "/app2",
           "appPool": "MySecondPool"
          }
      }
     ]
    }
}
```

## 定義自訂部署
<a name="dotnet-manifest-custom"></a>

如需進一步控制，您可定義*自訂部署*，藉此完全自訂應用程式部署。

此部署資訊清單會指示 Elastic Beanstalk 在 32 位元模式中執行 PowerShell 指令碼。它指定三個指令碼：在執行個體啟動和部署期間執行的`install`指令碼 (`siteInstall.ps1`)、在部署期間安裝新版本之前執行的`uninstall`指令碼 (`siteUninstall.ps1`)，以及當您在 AWS 管理主控台中選取[重新啟動應用程式伺服器](environments-dashboard-actions.md)時執行的`restart`指令碼 (`siteRestart.ps1`)。

**Example aws-windows-deployment-manifest.json - 自訂部署**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "custom": [
      {
        "name": "Custom site",
        "architecture" : 32,
        "scripts": {
          "install": {
            "file": "siteInstall.ps1"
          },
          "restart": {
            "file": "siteRestart.ps1"
          },
          "uninstall": {
            "file": "siteUninstall.ps1"
          }
        }
      }
    ]
  }
}
```

將執行應用程式所需的成品納入具備資訊清單和指令碼的原始碼套件。

**Example Custom-site-bundle.zip**  

```
.
|-- aws-windows-deployment-manifest.json
|-- siteInstall.ps1
|-- siteRestart.ps1
|-- siteUninstall.ps1
`-- site-contents.zip
```

# 部署資訊清單結構描述參考
<a name="dotnet-manifest-schema"></a>

部署資訊清單是 JSON 檔案，定義 Elastic Beanstalk 應如何部署和設定您的 Windows 應用程式。本節提供資訊清單結構描述中所有支援屬性和組態選項的完整參考。

## 資訊清單結構
<a name="dotnet-manifest-schema-structure"></a>

部署資訊清單遵循具有下列最上層結構的特定 JSON 結構描述：

**Example 基本資訊清單結構**  

```
{
  "manifestVersion": 1,
  "skipIISReset": false,
  "iisConfig": {
    "websites": [...],
    "appPools": [...]
  },
  "deployments": {
    "msDeploy": [...],
    "aspNetCoreWeb": [...],
    "custom": [...]
  }
}
```

### 最上層屬性
<a name="dotnet-manifest-schema-top-level"></a>

`manifestVersion` (必要)  
*類型*：數字  
*預設值*：1  
*有效值：*1  
指定資訊清單結構描述的版本。目前僅支援第 1 版。

`skipIISReset` (選用)  
*類型*：布林值  
*預設：*false  
控制 IIS 是否在應用程式部署期間重設。此旗標同時影響 `msDeploy`和 `aspNetCoreWeb` 部署類型。  
*行為：*  
+ *未指定 或 `false`（預設）：*IIS 重設會在安裝、解除安裝和更新操作期間執行。這是傳統行為。
+ *`true`：*部署操作期間會略過 IIS 重設。
*優點：*  
+ *減少停機時間* – 應用程式在部署期間遇到較短的服務中斷。
+ *更快速的部署* – 消除 IIS 完全重新啟動並重新初始化所需的時間。
使用 時`skipIISReset`， [RestartAppServer](https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_RestartAppServer.html) 操作會執行 IIS 重設，無論此旗標設定為何。
*範例*：  

```
{
  "manifestVersion": 1,
  "skipIISReset": true,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "archive": "dotnet-core-app.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

`deployments` (必要)  
*類型：*物件  
包含您應用程式的部署組態。此物件可以包含 `msDeploy`、 `aspNetCoreWeb`和 `custom` 部署類型。

`iisConfig` (選用)  
*類型：*物件  
在部署應用程式之前，定義要套用的 IIS 組態設定。同時支援網站和應用程式集區組態。

## IIS 組態
<a name="dotnet-manifest-schema-iis-config"></a>

`iisConfig` 本節可讓您在部署應用程式之前設定 IIS 設定。這包括使用特定組態設定應用程式集區，以及使用自訂繫結設定 IIS 網站。

### IIS 網站
<a name="dotnet-manifest-schema-websites"></a>

IIS 網站可讓您在部署應用程式之前設定自訂網站設定，包括實體路徑和網路繫結。

**建立不同 IIS 網站的重要考量事項**  
*網站設定順序：*網站會依顯示在`websites`陣列中的順序依序設定。平台會依序處理每個網站組態，因此如果您在網站之間有相依性，請務必正確排序。
*防火牆和連接埠存取：*只有連接埠 80 會透過預設 Elastic Beanstalk Windows 防火牆組態自動公開。如果您將網站設定為使用非標準連接埠，則必須透過 ebextensions 或自訂部署指令碼定義自訂防火牆規則，以允許外部存取這些連接埠。

**Example 網站組態**  

```
{
  "iisConfig": {
    "websites": [
      {
        "name": "MyCustomSite",
        "physicalPath": "C:\inetpub\wwwroot\mysite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "mysite.local"
          },
          {
            "protocol": "https",
            "port": 8443
          }
        ]
      }
    ]
  }
}
```網站屬性

`name` (必要)  
*類型：*字串  
IIS 網站的名稱。此名稱用於識別 IIS Manager 中的網站，而且在 IIS 組態中必須是唯一的。

`physicalPath` (必要)  
*類型：*字串  
存放網站檔案之伺服器上的實體路徑。此路徑必須可供 IIS 工作者程序存取。

`bindings` (必要)  
*類型*：陣列  
*最少項目：*1  
一系列繫結組態，定義網站如何回應網路請求。每個繫結都會指定通訊協定、連接埠和選用主機名稱。

#### 網站繫結
<a name="dotnet-manifest-schema-bindings"></a>

網站繫結定義 IIS 網站接聽傳入請求的網路端點。

`protocol` (必要)  
*類型：*字串  
*有效值：*"http"、"https"  
用於繫結的通訊協定。

`port` (必要)  
*類型*：整數  
*有效範圍：*1-65535  
網站將接聽請求的連接埠號碼。

`hostName` (選用)  
*類型：*字串  
繫結的主機名稱 （網域名稱）。

### 應用程式集區
<a name="dotnet-manifest-schema-app-pools"></a>

應用程式集區可在應用程式之間提供隔離，並可讓您設定應用程式群組的執行時間設定。

**Example 應用程式集區組態**  

```
{
  "iisConfig": {
    "appPools": [
      {
        "name": "MyAppPool",
        "enable32Bit": false,
        "managedPipelineMode": "Integrated",
        "managedRuntimeVersion": "v4.0",
        "queueLength": 1000,
        "cpu": {
          "limitPercentage": 80,
          "limitAction": "Throttle",
          "limitMonitoringInterval": 5
        },
        "recycling": {
          "regularTimeInterval": 1440,
          "requestLimit": 10000,
          "memory": 1048576,
          "privateMemory": 524288
        }
      }
    ]
  }
}
```應用程式集區屬性

`name` (必要)  
*類型：*字串  
應用程式集區的名稱。此名稱用於參考部署組態中的集區。

`enable32Bit` (選用)  
*類型*：布林值  
讓 32 位元應用程式在 64 位元版本的 Windows 上執行。對於需要 32 位元相容性的舊版應用程式，`true`請將 設定為 。

`managedPipelineMode` (選用)  
*類型：*字串  
*有效值：*"Integrated"、"Classic"  
指定應用程式集區的請求處理模式。

`managedRuntimeVersion` (選用)  
*類型：*字串  
*有效值：*「無受管程式碼」、「v2.0」、「v4.0」  
指定應用程式集區的 .NET Framework 版本。

`queueLength` (選用)  
*類型*：整數  
拒絕其他請求之前，HTTP.sys 佇列的應用程式集區的請求數目上限。

#### CPU 組態
<a name="dotnet-manifest-schema-cpu-config"></a>

`cpu` 物件會設定應用程式集區的 CPU 用量限制和監控。

`limitPercentage` (選用)  
*類型*：數字  
應用程式集區中的工作者程序可以使用的 CPU 時間百分比上限。

`limitAction` (選用)  
*類型：*字串  
*有效值：*"NoAction"、"KillW3wp"、"Throttle"、"ThrottleUnderLoad"  
達到 CPU 限制時要採取的動作。

`limitMonitoringInterval` (選用)  
*類型*：數字  
重設 CPU 監控和限流限制的期間 （以分鐘為單位）。

#### 回收組態
<a name="dotnet-manifest-schema-recycling-config"></a>

`recycling` 物件會設定應用程式集區工作者程序的回收時間和方式。

`regularTimeInterval` (選用)  
*類型*：整數  
應用程式集區回收的時間間隔 （以分鐘為單位）。設為 0 可停用以時間為基礎的回收。

`requestLimit` (選用)  
*類型*：整數  
應用程式集區在回收之前處理的請求數量上限。

`memory` (選用)  
*類型*：整數  
觸發工作者程序回收的虛擬記憶體數量 （以 KB 為單位）。

`privateMemory` (選用)  
*類型*：整數  
觸發工作者程序回收的私有記憶體數量 （以 KB 為單位）。

## 部署類型
<a name="dotnet-manifest-schema-deployments"></a>

`deployments` 物件包含不同應用程式類型的部署組態陣列。每個部署類型都有特定的屬性和使用案例。

### MSDeploy 部署
<a name="dotnet-manifest-schema-msdeploy"></a>

MSDeploy 部署用於可使用 Web 部署 (MSDeploy) 部署的傳統 .NET Framework 應用程式。

**Example MSDeploy 部署組態**  

```
{
  "deployments": {
    "msDeploy": [
      {
        "name": "WebApp",
        "description": "Main web application",
        "parameters": {
          "appBundle": "webapp.zip",
          "iisPath": "/",
          "appPool": "DefaultAppPool"
        }
      }
    ]
  }
}
```MSDeploy 部署屬性

`name` (必要)  
*類型：*字串  
部署的唯一名稱。此名稱在資訊清單中的所有部署中必須是唯一的。

`description` (選用)  
*類型：*字串  
部署的人類可讀描述。

`parameters` (必要)  
*類型：*物件  
MSDeploy 操作的組態參數。

`scripts` (選用)  
*類型：*物件  
要在部署生命週期的各個階段執行的 PowerShell 指令碼。

#### MSDeploy 參數
<a name="dotnet-manifest-schema-msdeploy-parameters"></a>

`appBundle` (必要)  
*類型：*字串  
相對於資訊清單檔案的應用程式套件 (ZIP 檔案） 路徑。此套件包含要部署的應用程式檔案。

`iisWebSite` (選用)  
*類型：*字串  
*預設：*「預設網站」  
要部署應用程式的 IIS 網站。根據預設，應用程式會部署到「預設網站」。或者，您可以指定不同的網站名稱，例如在 `iisConfig.websites`區段中設定的網站名稱。

`iisPath` (選用)  
*類型：*字串  
*預設：*"/"  
IIS 中的虛擬目錄路徑，其中將部署應用程式。將 "/" 用於根路徑，或將 "/api" 用於子目錄。

`appPool` (選用)  
*類型：*字串  
執行此應用程式的應用程式集區名稱。

### ASP.NET Core 部署
<a name="dotnet-manifest-schema-aspnetcore"></a>

ASP.NET Core 部署專為 .NET Core 和 .NET 5\$1 應用程式而設計。

**Example ASP.NET Core 部署組態**  

```
{
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "CoreAPI",
        "description": "ASP.NET Core Web API",
        "parameters": {
          "appBundle": "coreapi.zip",
          "iisPath": "/api",
          "appPool": "CoreAppPool"
        }
      }
    ]
  }
}
```

ASP.NET Core 部署使用與 MSDeploy 部署相同的屬性結構，主要差異在於用於應用程式的執行期環境和託管模型。ASP.NET Core 部署參數

`appBundle` (必要)  
*類型：*字串  
相對於資訊清單檔案的應用程式套件路徑。這可以是 ZIP 封存檔或包含已發佈 ASP.NET Core 應用程式的目錄路徑。

`iisWebSite` (選用)  
*類型：*字串  
*預設：*「預設網站」  
要部署 ASP.NET Core 應用程式的 IIS 網站。根據預設，應用程式會部署到「預設網站」。或者，您可以指定不同的網站名稱，例如在 `iisConfig.websites`區段中設定的網站名稱。

`iisPath` (選用)  
*類型：*字串  
*預設：*"/"  
ASP.NET Core 應用程式的 IIS 虛擬目錄路徑。

`appPool` (選用)  
*類型：*字串  
ASP.NET Core 應用程式的應用程式集區。集區將針對 ASP.NET Core 託管進行適當設定。

### 自訂部署
<a name="dotnet-manifest-schema-custom"></a>

自訂部署可透過 PowerShell 指令碼完整控制部署程序。此部署類型適用於需要自訂安裝、組態或部署邏輯的複雜案例。

**Example 自訂部署組態**  

```
{
  "deployments": {
    "custom": [
      {
        "name": "CustomService",
        "description": "Custom Windows service deployment",
        "architecture": 32,
        "scripts": {
          "install": {
            "file": "install-service.ps1"
          },
          "restart": {
            "file": "restart-service.ps1"
          },
          "uninstall": {
            "file": "uninstall-service.ps1",
            "ignoreErrors": true
          }
        }
      }
    ]
  }
}
```自訂部署屬性

`name` (必要)  
*類型：*字串  
自訂部署的唯一名稱。

`description` (選用)  
*類型：*字串  
自訂部署的說明。

`architecture` (選用)  
*類型*：整數  
*預設：*32  
*有效值：*32、64  
powershell 指令碼執行模式的架構規格

`scripts` (必要)  
*類型：*物件  
定義部署行為的 PowerShell 指令碼。相較於其他部署類型，自訂部署支援其他指令碼類型。

## 部署指令碼
<a name="dotnet-manifest-schema-scripts"></a>

部署指令碼是在部署生命週期內特定時間點執行的 PowerShell 指令碼。不同的部署類型支援不同的指令碼事件集。

### 指令碼事件
<a name="dotnet-manifest-schema-script-events"></a>

視部署類型而定，可使用下列指令碼事件：標準部署指令碼 (msDeploy 和 aspNetCoreWeb)

`preInstall`  
在安裝或更新應用程式之前執行。

`postInstall`  
在應用程式安裝或更新後執行。

`preRestart`  
在應用程式重新啟動之前執行。

`postRestart`  
重新啟動應用程式後執行。

`preUninstall`  
在解除安裝應用程式之前執行。

`postUninstall`  
解除安裝應用程式後執行。自訂部署指令碼 （僅限自訂部署）

`install`  
自訂部署的主要安裝指令碼。此指令碼負責安裝應用程式或服務。

`restart`  
用來重新啟動應用程式或服務的指令碼。環境重新啟動時呼叫。

`uninstall`  
解除安裝應用程式或服務的指令碼。在環境終止或應用程式移除期間呼叫。

### 指令碼屬性
<a name="dotnet-manifest-schema-script-properties"></a>

每個指令碼都定義為具有下列屬性的物件：

`file` (必要)  
*類型：*字串  
相對於資訊清單檔案的 PowerShell 指令碼檔案路徑。指令碼應該有`.ps1`副檔名。

`ignoreErrors` (選用)  
*類型*：布林值  
*預設：*false  
設為 時`true`，即使指令碼失敗，部署仍會繼續。將此用於非關鍵指令碼或清除操作。

**Example 指令碼組態範例**  

```
{
  "scripts": {
    "preInstall": {
      "file": "backup-config.ps1",
      "ignoreErrors": true
    },
    "postInstall": {
      "file": "configure-app.ps1"
    }
  }
}
```

# 搭配 Windows 平台分支使用 EC2 Fast Launch
<a name="dotnet-ec2fastlaunch"></a>

EC2 Fast Launch 功能可減少 Elastic Beanstalk 環境中的 Windows 執行個體啟動時間。本主題的目的是引導您搭配 Elastic Beanstalk 環境使用此功能。從 2[025 年 1 月 22 日發行的 Windows 平台 2.16.2 ](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-01-22-windows.html)版開始，Elastic Beanstalk 平台版本包含已啟用 EC2 Fast Launch 的基本 AMIs。

## 預設 EC2 Fast Launch 可用性
<a name="dotnet-ec2fastlaunch-default"></a>

最新的 Elastic Beanstalk Windows 平台版本包括自動啟用 EC2 Fast Launch 的基本 AMIs，無需額外費用。不過，發行較新的平台版本時，EC2 Fast Launch 可能不會在較舊平台版本的基礎 AMIs 上自動啟用。

我們建議您升級至最新的 Windows 平台版本，以使用自動啟用 EC2 Fast Launch 的基礎 AMIs。不過，如果您需要繼續使用現有的平台版本，您可以在環境的基礎 AMI 上手動啟用 EC2 Fast Launch。如需說明，請參閱[手動設定 EC2 Fast Launch](#dotnet-ec2fastlaunch-manual)。

## 手動設定 EC2 Fast Launch
<a name="dotnet-ec2fastlaunch-manual"></a>

**注意**  
相較於使用自動啟用 EC2 Fast Launch 的平台版本，手動啟用 EC2 Fast Launch 可能會產生額外的成本。如需 EC2 Fast Launch 成本的詳細資訊，請參閱《Amazon [ EC2 使用者指南》中的 EC2 Fast Launch 基礎資源的管理成本](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/win-fast-launch-manage-costs.html)頁面。 *Amazon EC2 *

請依照下列步驟，在 Elastic Beanstalk 環境所使用的 Windows 基礎 AMI 上啟用 EC2 Fast Launch：

**為 Elastic Beanstalk 環境手動啟用 EC2 Fast Launch**

1. 識別您環境的基本 AMI：

   請依照[建立自訂 AMI](using-features.customenv.md) 中的步驟來識別您環境的基本 AMI ID。請注意，您不需要建立自訂 AMI - 您只需遵循步驟來尋找目前的基本 AMI ID。

1. 在 AMI 上啟用 EC2 Fast Launch：

   使用《Amazon [ EC2 使用者指南》中的啟用 EC2 Fast Launch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/win-fast-launch-configure.html) 中的指示，為您的 AMI 設定 EC2 Fast Launch。 *Amazon EC2 * 