部署清单架构参考 - AWS Elastic Beanstalk

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

部署清单架构参考

部署清单是一个 JSON 文件,用于定义 Elastic Beanstalk 应如何部署和配置您的 Windows 应用程序。本节为清单架构中所有支持的属性和配置选项提供全面的参考。

清单结构

部署清单遵循具有以下顶级结构的特定 JSON 架构:

例 基本清单结构
{ "manifestVersion": 1, "skipIISReset": false, "iisConfig": { "websites": [...], "appPools": [...] }, "deployments": { "msDeploy": [...], "aspNetCoreWeb": [...], "custom": [...] } }

顶级属性

manifestVersion(必需)

类型:数字

默认值:-1

有效值:1

指定清单架构的版本。目前仅支持版本 1。

skipIISReset(可选)

类型:布尔值

原定设置值:false

控制是否在应用程序部署期间重置 IIS。此标志同时影响 msDeployaspNetCoreWeb 部署类型。

: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(必需)

类型:对象

包含应用程序的部署配置。此对象可包括 msDeployaspNetCoreWebcustom 部署类型。

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