

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 部署清单架构参考
<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.amazonaws.cn/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 管理器中标识网站，并且在 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`（可选）  
*类型*：字符串  
*有效值：*“No Managed Code”、“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`（可选）  
*类型*：整数  
触发工作线程回收的虚拟内存量（以千字节为单位）。

`privateMemory`（可选）  
*类型*：整数  
触发工作线程回收的私有内存量（以千字节为单位）。

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

`deployments` 对象包含适用于不同应用程序类型的部署配置数组。每种部署类型都有特定的属性和使用案例。

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

MSDeploy 部署用于可使用 Web Deploy (MSDeploy) 部署的传统.NET 框架应用程序。

**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`（可选）  
*类型*：字符串  
*默认：*“Default Web Site”  
要在其中部署应用程序的 IIS 网站。默认情况下，应用程序部署到“Default Web Site”。或者，您可以指定不同的网站名称，例如在 `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`（可选）  
*类型*：字符串  
*默认：*“Default Web Site”  
要在其中部署 ASP.NET Core 应用程序的 IIS 网站。默认情况下，应用程序部署到“Default Web Site”。或者，您可以指定不同的网站名称，例如在 `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 和 aspNetCore Web）

`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"
    }
  }
}
```