運行多個應用程序和ASP. NET核心應用程式與部署資訊清單 - AWS Elastic Beanstalk

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

運行多個應用程序和ASP. NET核心應用程式與部署資訊清單

您可使用部署資訊清單來指示 Elastic Beanstalk 如何部署您的應用程式。通過使用此方法,您不需MSDeploy要使用為單個生成源包ASP。 NET在您網站的根路徑上運行的應用程序。相反地,您可以使用資訊清單檔案,在不同的路徑上執行多個應用程式。或者,您可以告訴 Elastic Beanstalk 部署和運行該應用程序。ASP NET核心。您亦可使用部署資訊清單來設定應用程式集區,在其中執行您的應用程式。

部署資訊清單會新增. NETElastic Beanstalk 的核心應用。您可以部署. NET沒有部署清單的框架應用程序。但是,. NET核心應用程式需要部署資訊清單才能在 Elastic Beanstalk 上執行。當您使用部署資訊清單時,您會為每個應用程式建立網站封存,然後將網站歸檔併入包含部署資訊清單的第二個ZIP歸檔中。

部署資訊清單亦增加執行不同路徑的多個應用程式的能力。部署資訊清單會定義部署目標陣列,每個目標都有一個網站封存和IIS應該執行它的路徑。例如,您可以API在/api路徑上運行 Web 以提供異步請求,並在根路徑上運行 Web 應用程序,以消耗API.

您也可以使用部署資訊清單,使用IIS或 Kestrel 中的應用程式集區來執行多個應用程式。您可以設定應用程式集區來定期重新啟動應用程式、執行 32 位元應用程式,或使用. NET框架運行時。

如需完全自訂,您可以在 Windows 中撰寫自己的部署指令碼, PowerShell 並告知 Elastic Beanstalk 要執行哪些指令碼以安裝、解除安裝和重新啟動應用程式。

部署資訊清單和相關功能需要 Windows Server 平台 1.2.0 版或更新版本

。 NET核心應用

您可以使用部署資訊清單來執行。 NETElastic Beanstalk 的核心應用。。 NET核心是的跨平台版本。 NET帶有一個命令行工具(dotnet)。您可以使用它來產生應用程式、在本機執行,並準備發佈。

若要執行. NETElastic Beanstalk 上的核心應用程序,您可以在ZIP存檔中運行dotnet publish並打包輸出,而不包括任何包含的目錄。請將網站封存檔與具備類型為 aspNetCoreWeb 之部署目標的部署資訊清單,一同放置於原始碼套件。

下列部署資訊清單會執行. NET來自根路徑名稱的網站歸檔中dotnet-core-app.zip的核心應用程式。

範例 aws-windows-deployment-manifest. JSON-。 NET核心
{ "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "my-dotnet-core-app", "parameters": { "archive": "dotnet-core-app.zip", "iisPath": "/" } } ] } }

將資訊清單和網站歸檔捆綁在ZIP歸檔中以建立來源服務包。

範例 dotnet-core-bundle. 拉鍊。
. |-- aws-windows-deployment-manifest.json `-- dotnet-core-app.zip

網站封存檔內含編譯的應用程式程式碼、依存項目和 web.config 檔案。

範例 dotnet-core-app. 拉鍊。
. |-- 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核心應用程式。該WebApiSampleApp應用程序實現了一個簡單的 Web API 並在/api路徑上提供異步請求。DotNetSampleApp 應用程式是一種 Web 應用程式,其在根路徑處理請求。

範例 aws-windows-deployment-manifest.json-多個應用程序
{ "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "WebAPISample", "parameters": { "appBundle": "WebApiSampleApp.zip", "iisPath": "/api" } }, { "name": "DotNetSample", "parameters": { "appBundle": "DotNetSampleApp.zip", "iisPath": "/" } } ] } }

此處提供具備多個應用程式的範例應用程式:

設定應用程式集區

您可以在 Windows 環境中支援多個應用程式。可採用兩種方法:

  • 您可以將 out-of-process 託管模型與 Kestrel Web 服務器一起使用。使用此模型,您可以將多個應用程式設定為在一個應用程式集區中執行。

  • 您可以使用進程內託管模型。憑藉此模型,您可以使用多個應用程式集區來執行多個應用程式,且每個集區中只有一個應用程式。如果您正在使用IIS服務器並且需要運行多個應用程序,則必須使用此方法。

若要設定 Kestrel 在一個應用程式集區中執行多個應用程式,請新增 hostingModel="OutofProcess" 檔案中的 web.config。請考慮下列範例。

範例 網絡配置-紅 out-of-process 隼託管模型
<configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\CoreWebApp-5-0.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutofProcess" /> </system.webServer> </location> </configuration>
範例 aws-windows-deployment-manifest.json-多個應用程序
{ "manifestVersion": 1, "deployments": {"msDeploy": [ {"name": "Web-app1", "parameters": {"archive": "site1.zip", "iisPath": "/" } }, {"name": "Web-app2", "parameters": {"archive": "site2.zip", "iisPath": "/app2" } } ] } }

IIS不支援一個應用程式集區中的多個應用程式,因為它使用處理序中的託管模型。因此,您需要透過將每個應用程式指派給一個應用程式集區,來設定多個應用程式。換句話說,只將一個應用程式指派給一個應用程式集區。

您可以設定IIS為在aws-windows-deployment-manifest.json檔案中使用不同的應用程式集區。在您參考下一個範例檔案時,請進行下列更新:

  • 新增包含名稱為 iisConfig 子區段的 appPools 區段。

  • appPools 區塊中,列出應用程式集區。

  • deployments 區段中,為每個應用程式定義 parameters 區段。

  • 針對每個應用程式,parameters 區段會指定封存檔、執行它的路徑,以及要在其中執行的 appPool

下列部署資訊清單會設定每 10 分鐘重新啟動應用程式的兩個應用程式集區。他們還將他們的應用程序附加到. NET在指定路徑上執行的架構 Web 應用程式。

範例 aws-windows-deployment-manifest.json-每個應用程序池一個應用程序
{ "manifestVersion": 1, "iisConfig": {"appPools": [ {"name": "MyFirstPool", "recycling": {"regularTimeInterval": 10} }, {"name": "MySecondPool", "recycling": {"regularTimeInterval": 10} } ] }, "deployments": {"msDeploy": [ {"name": "Web-app1", "parameters": { "archive": "site1.zip", "iisPath": "/", "appPool": "MyFirstPool" } }, {"name": "Web-app2", "parameters": { "archive": "site2.zip", "iisPath": "/app2", "appPool": "MySecondPool" } } ] } }

定義自訂部署

如需進一步控制,您可定義自訂部署,藉此完全自訂應用程式部署。

下列部署資訊清單告知 Elastic Beanstalk 執行名稱為 installsiteInstall.ps1 指令碼。此指令碼會在執行個體啟動和部署期間安裝網站。除此之外,部署資訊清單還會告知 Elastic Beanstalk 在部署期間安裝新版本之前執行uninstall指令碼,並在 AWS 管理主控台中選擇「重新啟動應用程式伺服器」時,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. 拉鍊
. |-- aws-windows-deployment-manifest.json |-- siteInstall.ps1 |-- siteRestart.ps1 |-- siteUninstall.ps1 `-- site-contents.zip