

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

# 適用於 .NET 和 Elastic Beanstalk 的多個應用程式支援
<a name="deployment-beanstalk-multiple-application"></a>

您可以使用部署資訊清單，將多個應用程式部署至相同的 Elastic Beanstalk 環境。

部署資訊清單支援 [ASP.NET Core](http://www.asp.net/core) Web 應用程式，以及 ms 部署傳統 ASP.NET 應用程式的封存。試想一個案例，其中您已使用前端的 ASP.NET Core 和延伸 API 的 Web API 專案來撰寫令人驚豔的新應用程式。您也有使用傳統 ASP.NET 撰寫的管理員應用程式。

工具組的部署精靈著重於部署單一專案。若要利用多個應用程式部署，您必須手動建構應用程式套件。若要開始，請撰寫資訊清單。在此範例中，您會在解決方案的根目錄撰寫資訊清單。

資訊清單中的部署區段有兩個子系：要部署的 ASP.NET Core Web 應用程式陣列，以及要部署的 ms 部署封存陣列。對於每個應用程式，您可以設定 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` 資料夾下建立 msdeploy 封存，因此您需要將封存複製到發佈工作區。

```
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 環境。或者，您可以繼續使用 AWS PowerShell cmdlet 來更新 Elastic Beanstalk 環境與應用程式套件。請確定您已使用 和 `Set-DefaultAWSRegion` cmdlet，將目前的設定檔和區域設定為包含 Elastic Beanstalk 環境的設定檔`Set-AWSCredentials`和區域。

```
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 路徑集所部署的每個應用程式。