本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
部署清单架构参考
部署清单是一个 JSON 文件,用于定义 Elastic Beanstalk 应如何部署和配置您的 Windows 应用程序。本节为清单架构中所有支持的属性和配置选项提供全面的参考。
清单结构
部署清单遵循具有以下顶级结构的特定 JSON 架构:
例 基本清单结构
{
"manifestVersion": 1,
"skipIISReset": false,
"iisConfig": {
"websites": [...],
"appPools": [...]
},
"deployments": {
"msDeploy": [...],
"aspNetCoreWeb": [...],
"custom": [...]
}
}顶级属性
manifestVersion(必需)-
类型:数字
默认值:-1
有效值:1
指定清单架构的版本。目前仅支持版本 1。
skipIISReset(可选)-
类型:布尔值
原定设置值:false
控制是否在应用程序部署期间重置 IIS。此标志同时影响
msDeploy和aspNetCoreWeb部署类型。:Behavior
-
未指定或
false(默认):在安装、卸载和更新操作期间执行 IIS 重置。这是传统行为。 -
true:部署操作期间跳过 IIS 重置。
优点:
-
减少停机时间:可减少部署期间应用程序的服务中断时间。
-
加快部署:省去了完全重启 IIS 并进行重新初始化所需的时间。
注意
使用
skipIISReset时,无论此标志设置如何,RestartAppServer 操作都会执行 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 配置
iisConfig 部分可让您在部署应用程序之前配置 IIS 设置。这包括使用特定配置设置应用程序池,以及使用自定义绑定配置 IIS 网站。
IIS 网站
您可以通过 IIS 网站,在部署应用程序之前配置自定义网站设置,包括物理路径和网络绑定。
有关创建不同 IIS 网站的重要注意事项
-
网站设置顺序:网站按照其在
websites数组中出现的顺序进行配置。平台按顺序处理每个网站配置,因此,如果网站之间存在依赖关系,请确保排序正确。 -
防火墙和端口访问:仅端口 80 会通过默认 Elastic Beanstalk Windows 防火墙配置自动公开。如果将网站配置为使用非标准端口,则必须通过 ebextensions 或自定义部署脚本来定义自定义防火墙规则,从而允许这些端口的外部访问。
例 网站配置
{
"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。
一系列绑定配置,用于定义网站如何响应网络请求。每个绑定都会指定协议、端口和可选的主机名。
网站绑定
网站绑定用于定义 IIS 网站将在其中侦听传入请求的网络端点。
protocol(必需)-
类型:字符串
有效值:“http”、“https”
用于绑定的协议。
port(必需)-
类型:整数
有效范围:1-65535
网站用于侦听请求的端口号。
hostName(可选)-
类型:字符串
绑定的主机名(域名)。
应用程序池
应用程序池可在应用程序之间提供隔离,并允许您为应用程序组配置运行时设置。
例 应用程序池配置
{
"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 配置
cpu 对象为应用程序池配置 CPU 用量限制和监控。
limitPercentage(可选)-
类型:数字
应用程序池中工作线程可以消耗的 CPU 时间的最大百分比。
limitAction(可选)-
类型:字符串
有效值:“NoAction”、“KillW3wp”、“Throttle”、“ThrottleUnderLoad”
达到 CPU 限制时采取的操作。
limitMonitoringInterval(可选)-
类型:数字
CPU 监控和节流限制的重置周期(以分钟为单位)。
回收配置
recycling 对象配置何时以及如何回收应用程序池工作线程。
regularTimeInterval(可选)-
类型:整数
应用程序池进行回收的时间间隔(以分钟为单位)。设置为 0 可禁用基于时间的回收功能。
requestLimit(可选)-
类型:整数
应用程序池在回收之前处理的最大请求数。
memory(可选)-
类型:整数
触发工作线程回收的虚拟内存量(以千字节为单位)。
privateMemory(可选)-
类型:整数
触发工作线程回收的私有内存量(以千字节为单位)。
部署类型
deployments 对象包含适用于不同应用程序类型的部署配置数组。每种部署类型都有特定的属性和使用案例。
MSDeploy 部署
MSDeploy 部署用于可使用 Web 部署(MSDeploy)进行部署的传统 .NET Framework 应用程序。
例 MSDeploy 部署配置
{
"deployments": {
"msDeploy": [
{
"name": "WebApp",
"description": "Main web application",
"parameters": {
"appBundle": "webapp.zip",
"iisPath": "/",
"appPool": "DefaultAppPool"
}
}
]
}
}MSDeploy 部署属性
name(必需)-
类型:字符串
部署的唯一名称。此名称在清单中的所有部署中必须是唯一的。
description(可选)-
类型:字符串
人类可读的部署描述。
parameters(必需)-
类型:对象
MSDeploy 操作的配置参数。
scripts(可选)-
类型:对象
PowerShell 脚本,可在部署生命周期的各个阶段运行。
MSDeploy 参数
appBundle(必需)-
类型:字符串
应用程序捆绑包(ZIP 文件)相对于清单文件的路径。此捆绑包内含要部署的应用程序文件。
iisWebSite(可选)-
类型:字符串
默认:“Default Web Site”
要在其中部署应用程序的 IIS 网站。默认情况下,应用程序部署到“Default Web Site”。或者,您可以指定不同的网站名称,例如在
iisConfig.websites部分中配置的网站名称。 iisPath(可选)-
类型:字符串
默认:/
将在其中部署应用程序的 IIS 中的虚拟目录路径。使用“/”用于根路径,使用“/api”用于子目录。
appPool(可选)-
类型:字符串
运行此应用程序的应用程序池名称。
ASP.NET Core 部署
ASP.NET Core 部署专为 .NET Core 和.NET 5+ 应用程序而设计。
例 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 托管对池进行适当配置。
自定义部署
自定义部署可通过 PowerShell 脚本提供对部署过程的完全控制。此部署类型对于需要自定义安装、配置或部署逻辑的复杂场景而言,非常有用。
例 自定义部署配置
{
"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 脚本。与其他部署类型相比,自定义部署支持其他脚本类型。
部署脚本
部署脚本是在部署生命周期的特定时间点运行的 PowerShell 脚本。不同的部署类型支持不同的脚本事件集。
脚本事件
可根据部署类型,使用以下脚本事件:
标准部署脚本(msDeploy和 aspNetCoreWeb)
preInstall-
在安装或更新应用程序前运行。
postInstall-
在安装或更新应用程序后运行。
preRestart-
在应用程序重新启动前运行。
postRestart-
在应用程序重新启动后运行。
preUninstall-
在卸载应用程序前运行。
postUninstall-
在卸载应用程序后运行。
自定义部署脚本(仅限自定义部署)
install-
自定义部署的主安装脚本。此脚本负责安装应用程序或服务。
restart-
用于重新启动应用程序或服务的脚本。在重新启动环境时调用。
uninstall-
用于卸载应用程序或服务的脚本。在环境终止或删除应用程序期间调用。
脚本属性
每个脚本都定义为具有以下属性的对象:
file(必需)-
类型:字符串
PowerShell 脚本文件相对于清单文件的路径。脚本扩展名应是
.ps1。 ignoreErrors(可选)-
类型:布尔值
原定设置值:false
如果设置为
true,即使脚本失败,部署也会继续进行。可将其用于非关键脚本或清理操作。
例 脚本配置示例
{
"scripts": {
"preInstall": {
"file": "backup-config.ps1",
"ignoreErrors": true
},
"postInstall": {
"file": "configure-app.ps1"
}
}
}