對 .NET 和 Elastic Beanstalk 的多應用 Support - AWS Amazon Q 的工具包

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

對 .NET 和 Elastic Beanstalk 的多應用 Support

使用部署清單,您可以將多個應用程序部署到同一 Elastic Beanstalk 環境中。

部署清單支持ASP.NET CoreWeb 應用程序以及傳統 ASP.NET 應用程序的 ms部署歸檔。想象一下,您已經使用 ASP.NET 核心作為前端編寫了一個新的驚人的應用程序,併為擴展 API 編寫了一個 Web API 項目。您還有一個使用傳統 ASP.NET 編寫的管理員應用程序。

工具包的部署嚮導側重於部署單個項目。要利用多個應用程序部署,您必須手動構建應用程序捆綁包。要開始,請編寫清單。對於此示例,您將在解決方案的根目錄中編寫清單。

清單中的部署部分有兩個子項:一個要部署的 ASP.NET 核心 Web 應用程序數組,以及要部署的 msdeploy 歸檔數組。對於每個應用程序,您可以設置 IIS 路徑以及相對於清單的應用程序位的位置。

{ "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "frontend", "parameters": { "appBundle": "./frontend", "iisPath": "/frontend" } }, { "name": "ext-api", "parameters": { "appBundle": "./ext-api", "iisPath": "/ext-api" } } ], "msDeploy": [ { "name": "admin", "parameters": { "appBundle": "AmazingAdmin.zip", "iisPath": "/admin" } } ] } }

在寫入清單後,您將使用 Windows PowerShell 創建應用程序包,並更新現有的 Elastic Beanstalk 環境以運行該應用程序包。編寫該腳本時假設它將從包含 Visual Studio 解決方案的文件夾中運行。

您需要在腳本中執行的第一件事是設置一個工作區文件夾,以便在其中創建應用程序包。

$publishFolder = "c:\temp\publish" $publishWorkspace = [System.IO.Path]::Combine($publishFolder, "workspace") $appBundle = [System.IO.Path]::Combine($publishFolder, "app-bundle.zip") If (Test-Path $publishWorkspace){ Remove-Item $publishWorkspace -Confirm:$false -Force } If (Test-Path $appBundle){ Remove-Item $appBundle -Confirm:$false -Force }

一旦你創建了文件夾,就是時候準備好前端了。與部署嚮導一樣,使用 dotnet CLI 發佈應用程序。

Write-Host 'Publish the ASP.NET Core frontend' $publishFrontendFolder = [System.IO.Path]::Combine($publishWorkspace, "frontend") dotnet publish .\src\AmazingFrontend\project.json -o $publishFrontendFolder -c Release -f netcoreapp1.0

請注意,子文件夾「前端」用於輸出文件夾,與您在清單中設置的文件夾匹配。現在您需要搭配 Web API 項目執行相同的作業。

Write-Host 'Publish the ASP.NET Core extensibility API' $publishExtAPIFolder = [System.IO.Path]::Combine($publishWorkspace, "ext-api") dotnet publish .\src\AmazingExtensibleAPI\project.json -o $publishExtAPIFolder -c Release -f netcoreapp1.0

管理站點是傳統的 ASP.NET 應用程序,因此您不能使用 dotnet CLI。對於管理應用程序,您應該使用 msbuild,傳入構建目標包來創建 msdeploy 歸檔文件。默認情況下,軟件包目標會在obj\Release\Package文件夾,因此您需要將歸檔文件複製到發佈工作區。

Write-Host 'Create msdeploy archive for admin site' msbuild .\src\AmazingAdmin\AmazingAdmin.csproj /t:package /p:Configuration=Release Copy-Item .\src\AmazingAdmin\obj\Release\Package\AmazingAdmin.zip $publishWorkspace

要告訴 Elastic Beanstalk 環境如何處理所有這些應用程序,請將清單從解決方案複製到發佈工作區,然後壓縮文件夾。

Write-Host 'Copy deployment manifest' Copy-Item .\aws-windows-deployment-manifest.json $publishWorkspace Write-Host 'Zipping up publish workspace to create app bundle' Add-Type -assembly "system.io.compression.filesystem" [io.compression.zipfile]::CreateFromDirectory( $publishWorkspace, $appBundle)

現在您已擁有應用程序包,您可以轉到 Web 控制台並將檔案上傳到 Elastic Beanstalk 環境中。或者,您可以繼續使用AWSPowerShell cmdlet 使用應用程式包更新 Elastic Beanstalk 環境。確保您已將當前配置文件和區域設置為包含您的 Elastic Beanstalk 環境的配置文件和區域,方法是使用Set-AWSCredentialsSet-DefaultAWSRegionCmdlet。

Write-Host 'Write application bundle to S3' # Determine S3 bucket to store application bundle $s3Bucket = New-EBStorageLocation Write-S3Object -BucketName $s3Bucket -File $appBundle $applicationName = "ASPNETCoreOnAWS" $environmentName = "ASPNETCoreOnAWS-dev" $versionLabel = [System.DateTime]::Now.Ticks.ToString() Write-Host 'Update Beanstalk environment for new application bundle' New-EBApplicationVersion -ApplicationName $applicationName -VersionLabel $versionLabel -SourceBundle_S3Bucket $s3Bucket -SourceBundle_S3Key app-bundle.zip Update-EBEnvironment -ApplicationName $applicationName -EnvironmentName $environmentName -VersionLabel $versionLabel

現在,使用工具包或 Web 控制台中的 Elastic Beanstalk 環境狀態頁檢查更新的狀態。完成後,您將能夠導航到部署清單中設置的 IIS 路徑部署的每個應用程序。