AWS Toolkit for Visual Studio
用户指南

AWS services or capabilities described in AWS Documentation may vary by region/location. Click Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

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

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

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

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

publish 命令完成后,Toolkit 会将新的部署清单写入到发布文件夹。此部署清单是一个名为 aws-windows-deployment-manifest.json 的 JSON 文件,Elastic 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"
     ]
   }
 }

既然您已声明该清单以便让它包含在应用程序包中,您可以进一步配置要部署应用程序的方式。您可以自定义除部署向导支持的部署之外的部署。AWS 已为 aws-windows-deployment-manifest.json 文件定义 JSON 架构,并且在您安装 Toolkit for Visual Studio 后,该安装程序为该架构注册了 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 开发人员指南