AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用部署清单运行多个应用程序和 ASP.NET 内核应用程序。

您可以使用部署清单告知 Elastic Beanstalk 如何配置您的应用程序。例如,您可以使用一个清单文件运行不同路径上的多个应用程序,或告知 Elastic Beanstalk 使用 ASP.NET Core 部署和运行应用程序,而不必使用 MSDeploy 为在您的网站的根路径上运行的一个 ASP.NET 应用程序生成一个源包。您也可以使用部署清单配置一个应用程序池,在其中运行您的应用程序。

部署清单向 Elastic Beanstalk 添加了对 .NET Core 应用程序的支持。您可以部署一个不带部署清单的 .NET Framework 应用程序,但 .NET Core 应用程序需要部署清单才能在 Elastic Beanstalk 上运行。使用部署清单时,请为每个应用程序创建一个站点存档,然后将该站点存档捆绑在包含部署清单的另一个 ZIP 文档中。

部署清单还增加了在不同路径上运行多个应用程序的能力。一个部署清单定义了一组部署目标,每个部署目标有一个站点存档和一个 IIS 应在其上运行部署清单的路径。例如,您可以在 /api 路径上运行 Web API,以服务异步请求,以及使用 API 的根路径上的 Web 应用程序。

您也可以使用部署清单在 IIS 中创建应用程序池,在其中运行一个或多个应用程序。您可以将应用程序池配置为定期重启应用程序、运行 32 位应用程序或使用特定版本的 .NET 框架运行时。

有关完整定制,您可以在 Windows PowerShell 中编写您自己的部署脚本并告知 Elastic Beanstalk 要运行哪些脚本来安装、卸载和重启应用程序。

部署清单和相关功能需要 Windows Server 平台配置版本 1.2.0 或更新版本

.NET Core 应用程序

您可以使用部署清单在 Elastic Beanstalk 上运行 .NET Core 应用程序。.NET Core 是 .NET 的跨平台版本,它附带一个命令行工具 (dotnet),您可以使用该命令行工具生成一个应用程序、在本地运行该应用程序并做好发布准备。

注意

请参阅使用 AWS Elastic Beanstalk 部署 ASP.NET 内核应用程序以获取在 Elastic Beanstalk 上使用部署清单运行 .NET Core 应用程序的教程和示例应用程序。

要在 Elastic Beanstalk 上运行 .NET Core 应用程序,请运行 dotnet publish 并将 ZIP 文档中的输出打包,不包括任何包含的目录。将具有部署清单的源包中的站点存档与类型为 aspNetCoreWeb 的部署目标放在一起。

以下部署清单将在根路径上运行一个来自名为 dotnet-core-app.zip 的站点存档的 .NET Core 应用程序。

例 aws-windows-deployment-manifest.json - .NET Core

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

将清单和站点存档捆绑在一个 ZIP 文档中,以创建源包。

例 dotnet-core-bundle.zip

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

该站点存档包含已编译的应用程序代码、依赖项和 web.config 文件。

例 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

请参阅教程以获取完成示例。

运行多个应用程序

您可以定义多个部署目标,从而使用一个部署清单运行多个应用程序。

以下部署清单配置两个 .NET Core 应用程序。WebAPITest 应用程序实施几个 Web API 并在 /api 路径服务异步请求。ASPNetTest 应用程序是在根路径上服务请求的 Web 应用程序。

例 aws-windows-deployment-manifest.json - 多个应用程序

{ "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "WebAPITest", "parameters": { "appBundle": "webapi.zip", "iisPath": "/api" } }, { "name": "ASPNetTest", "parameters": { "appBundle": "aspnet.zip", "iisPath": "/" } } ] } }

此处提供了一个具有多个应用场合的示例应用程序:

配置应用程序池

您可以使用部署清单在 IIS 中配置一个应用程序池并用它来运行一个或多个应用程序。

以下部署清单将配置一个每 10 分钟重启其应用程序一次的应用程序池,并将其附加到在根路径上运行的 .NET Framework Web 应用程序。

例 aws-windows-deployment-manifest.json - 应用程序池

{ "manifestVersion": 1, "iisConfig": { "appPools": [ { "name": "App pool", "recycling": { "regularTimeInterval": 10 } } ] }, "deployments": { "msDeploy": [ { "name": "Web app", "parameters": { "archive": "site.zip", "iisPath": "/", "appPool": "MyPool" } } ] } }

appPools 下的 iisConfig 数据块定义应用程序池。

deployments 数据块中的每个部署将指定一个存档、一个在其上运行它的路径和一个在其中运行它的 appPool

定义自定义部署

为了实现更多控制,您可以通过定义自定义部署 来完全自定义应用程序部署。

以下部署清单将告知 Elastic Beanstalk 运行一个名为 siteInstall.ps1install 脚本,以在实例启动和部署期间安装网站,在部署期间安装新版本之前运行一个 uninstall 脚本,并运行一个 restart 脚本,以在您在管理控制台中选择重启应用程序服务器时重启应用程序。

例 aws-windows-deployment-manifest.json - 自定义部署

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

包括使用清单和脚本运行源包中的应用程序所需的任何项目。

例 custom-site-bundle.zip

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