

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

# 部署資訊清單結構描述參考
<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"
    }
  }
}
```