自定义 ASP.NET 内核 Elastic Beanstalk 部署 - Amazon 适用于 Visual Studio 的工具包
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

自定义 ASP.NET 内核 Elastic Beanstalk 部署

本主题介绍了部署的工作方式,以及在利用 Elastic Beanstalk 和 Visual Studio Toolkit 创建 ASP.NET 核心应用程序时如何自定义部署。

在 Visual Studio Toolkit 中完成部署向导后,Toolkit 将对该应用程序打包并将其发送到 Elastic Beanstalk。创建应用程序包的第一步是借助新的 dotnet CLI 为应用程序做好使用 publish 命令进行发布的准备。框架和配置将从向导中的设置向下传递到 publish 命令。所以如果你选择版本为了configurationnetcoreapp1.0(对于 )framework,Toolkit 将执行以下命令:

dotnet publish --configuration Release --framework netcoreapp1.0

publish 命令完成后,Toolkit 会将新的部署清单写入到发布文件夹。部署清单是名为的 JSON 文件aws-windows-deployment-manifest.jsonElastic Beanstalk Windows 容器(版本 1.2 或更高版本)将读取该文件以确定如何部署应用程序。例如,对于要在 IIS 的根处部署的 ASP.NET 内核应用程序,Toolkit 将生成一个清单文件,如下所示:

{ "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "app", "parameters": { "appBundle": ".", "iisPath": "/", "iisWebSite": "Default Web Site" } } ] } }

appBundle 属性指示了应用程序位与清单文件相关的位置。此属性可指向目录或 ZIP 存档。iisPathiisWebSite 属性指示了 IIS 中要托管应用程序的位置。

自定义清单

如果某个清单文件在发布文件夹中尚不存在,则 Toolkit 仅写入该清单文件。如果该文件已存在,Toolkit 将更新该清单的 aspNetCoreWeb 部分下列出的第一个应用程序中的 appBundleiisPathiisWebSite 属性。这使您可以将 aws-windows-deployment-manifest.json 添加到您的项目并自定义该清单。要对 Visual Studio 中的 ASP.NET 内核 Web 应用程序执行此操作,请将新的 JSON 文件添加到项目的根并将其命名为 aws-windows-deployment-manifest.json

该清单必须命名为 aws-windows-deployment-manifest.json 且必须位于项目的根处。Elastic Beanstalk 容器将在根中寻找该清单,如果找到,则会调用部署工具。如果该文件不存在,Elastic Beanstalk 容器将回退到较早的部署工具,该工具假定存档为msdeploy存档。

要确保 dotnet CLI publish 命令包含该清单,请更新 project.json 文件以将该清单文件包含在 publishOptionsinclude 下的 include 部分。

{ "publishOptions": { "include": [ "wwwroot", "Views", "Areas/**/Views", "appsettings.json", "web.config", "aws-windows-deployment-manifest.json" ] } }

既然您已声明该清单以便让它包含在应用程序包中,您可以进一步配置要部署应用程序的方式。您可以自定义除部署向导支持的部署之外的部署。Amazon已为aws-windows-deployment-manifest.json 文件,并且在您为 Visual Studio 安装 Toolkit 后,该安装程序为架构注册了 URL。

当您打开 windows-deployment-manifest.json 时,您将看到在“Schema (架构)”下拉框中选择的架构 URL。您可以导航到该 URL 以获取可在该清单中设置的内容的完整说明。在已选择该架构的情况下,Visual Studio 将在您编辑该清单时提供 IntelliSense。

您可以执行的一项自定义是配置应用程序将在其下运行的 IIS 应用程序池。以下示例显示了如何定义 IIS 应用程序池(“customPool”),该池每 60 分钟再循环一次流程,并使用 "appPool": "customPool" 将流程分配到应用程序。

{ "manifestVersion": 1, "iisConfig": { "appPools": [ { "name": "customPool", "recycling": { "regularTimeInterval": 60 } } ] }, "deployments": { "aspNetCoreWeb": [ { "name": "app", "parameters": { "appPool": "customPool" } } ] } }

此外,该清单还可以声明 Windows PowerShell 脚本在安装、重启和卸载操作之前和之后运行。例如,以下清单运行 Windows PowerShell 脚本 PostInstallSetup.ps1 以在 ASP.NET 内核应用程序部署到 IIS 之后完成进一步设置工作。在添加类似这样的脚本时,请确保将它们添加到 project.json 文件中的 publishOptions 下的 include 部分,正如对 aws-windows-deployment-manifest.json 文件的处理方式一样。如果没有这样做,这些脚本将不会作为 dotnet CLI publish 命令的一部分包含。

{ "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "app", "scripts": { "postInstall": { "file": "SetupScripts/PostInstallSetup.ps1" } } } ] } }

ebextensions 怎么样?

Elastic Beanstalk.ebextensions配置文件像所有其他 Elastic Beanstalk 容器一样受支持。要在 ASP.NET 内核应用程序中包含 ebextensions,请将 .ebextensions 目录添加到 project.json 文件中的 publishOptions 下的 include 部分。有关 ebextensions 的更多信息,请查阅 Elastic Beanstalk 开发人员指南