AWS Elastic Beanstalk
開発者ガイド

デプロイマニフェストを使用した複数のアプリケーションと ASP.NET Core アプリケーションの実行

デプロイマニフェストで、Elastic Beanstalk にアプリケーションをデプロイする方法を伝えることができます。たとえば、MSDeploy を使用してウェブサイトのルートパスで実行される 1 つの ASP.NET アプリケーションのソースバンドルを生成する代わりに、マニフェストファイルを使用して、複数のアプリケーションを異なるパスで実行したり、Elastic Beanstalk に ASP.NET Core でアプリケーションをデプロイして実行させることもできます。デプロイマニフェストを使用して、アプリケーションを実行するためのアプリケーションプールを設定することもできます。

デプロイマニフェストは、.NET Core アプリケーションのサポートを Elastic Beanstalk に追加します。デプロイマニフェストなしでも、.NET Framework アプリケーションをデプロイできますが、.NET Core アプリケーションを Elastic Beanstalk で実行するにはデプロイマニフェストが必要です。デプロイマニフェストを使用すると、各アプリケーションのサイトアーカイブを作成し、そのサイトアーカイブをデプロイマニフェストを含むもう一つの ZIP アーカイブとバンドルします。

デプロイマニフェストを使用すると、異なるパスで複数のアプリケーションを実行することもできます。デプロイマニフェストは、多くのデプロイのターゲットを、サイトアーカイブと IIS が実行するパスにより個別に定義します。たとえば、/api パスで非同期リクエストを行うウェブ API を実行し、ルートパスでその API を実行するウェブアプリケーションを実行できます。

デプロイマニフェストを使用して、1 つ以上のアプリケーションを実行する IIS のアプリケーションプールを作成することもできます。アプリケーションプールを設定して、アプリケーションの定期的な再起動、32 ビットアプリケーションの実行、または、.NET Framework ランタイムの特定バージョンの使用ができます。

完全にカスタマイズするには、Windows PowerShell で独自のデプロイスクリプトを作成し、アプリケーションのインストール、アンインストール、再起動のために実行するスクリプトを Elastic Beanstalk に指示します。

デプロイマニフェストと関連機能を使用するには、Windows Server プラットフォームバージョン 1.2.0 以降が必要です。

.NET Core アプリケーション

デプロイマニフェストを使用して、Elastic Beanstalk .NET Core アプリケーションを実行できます。.NET Core は .NET のクロスプラットフォーム版であり、コマンドラインツール (dotnet) が付属しており、アプリケーションの作成、ローカルでの実行、公開の準備をするのに使用できます。

注記

デプロイマニフェストを使用して Elastic Beanstalk で .NET Core アプリケーションを実行するチュートリアルとサンプルアプリケーションについては、AWS Elastic Beanstalk を使用した ASP.NET Core アプリケーションのデプロイを参照してください。

Elastic Beanstalk で .NET Core アプリケーションを実行するには、dotnet publish を実行して、ディレクトリを含まない ZIP アーカイブに出力をパッケージします。サイトアーカイブを、デプロイマニフェストを使って、デプロイターゲットのタイプ aspNetCoreWeb と一緒にソースバンドルに配置します。

以下のデプロイマニフェストは、ルートパスの dotnet-core-app.zip という名前のサイトアーカイブから .NET Core アプリケーションを実行します。

例 aws-windows-deployment-manifest.json - .NET Core

{ "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "my-dotnet-core-app", "parameters": { "archive": "dotnet-core-app.zip", "iisPath": "/" } } ] } }

マニフェストとサイトアーカイブを ZIP アーカイブにバンドルし、ソースバンドルを作成します。

例 dotnet-core-bundle.zip

. |-- aws-windows-deployment-manifest.json `-- dotnet-core-app.zip

サイトアーカイブには、コンパイルされたアプリケーションコード、依存関係、web.config ファイルが含まれています。

例 dotnet-core-app.zip

. |-- 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

詳しい例については、チュートリアルを参照してください。

複数のアプリケーションを実行する

デプロイマニフェストを使って、複数のデプロイターゲットを指定することにより、複数のアプリケーションを実行できます。

以下のデプロイマニフェストでは 2 つの .NET Core アプリケーションを設定します。WebAPITest アプリケーションは、いくつかのウェブ API を実装し、/api パスで非同期リクエストを提供します。ASPNetTest アプリケーションは、ルートパスでリクエストを処理するウェブアプリケーションです。

例 aws-windows-deployment-manifest.json - multiple apps

{ "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "WebAPITest", "parameters": { "appBundle": "webapi.zip", "iisPath": "/api" } }, { "name": "ASPNetTest", "parameters": { "appBundle": "aspnet.zip", "iisPath": "/" } } ] } }

複数のアプリケーションのサンプルアプリケーションはこちらで入手できます:

アプリケーションプールを設定する

デプロイマニフェストを使って、IIS でアプリケーションプールを設定し、複数のアプリケーションを実行するために使用できます。

次のデプロイマニフェストでは、アプリケーションを 10 分ごとに再起動し、ルートパスで実行する .NET Framework ウェブアプリケーションにアタッチするアプリケーションプールを設定します。

例 aws-windows-deployment-manifest.json - app pool

{ "manifestVersion": 1, "iisConfig": { "appPools": [ { "name": "App pool", "recycling": { "regularTimeInterval": 10 } } ] }, "deployments": { "msDeploy": [ { "name": "Web app", "parameters": { "archive": "site.zip", "iisPath": "/", "appPool": "MyPool" } } ] } }

appPools の下の iisConfig ブロックはアプリケーション プールを定義します。

deployments ブロックの各デプロイは、アーカイブ、実行するパス、実行する appPool を指定します。

カスタムデプロイを定義する

さらにきめ細かく制御するには、カスタムデプロイを定義することによって、アプリケーションのデプロイを完全にカスタマイズできます。

次のデプロイマニフェストでは、Elastic Beanstalk に siteInstall.ps1 という名前の install スクリプトを実行させ、インスタンスの起動時とデプロイ時にウェブサイトをインストールし、デプロイ時に新しいバージョンをインストールする前に uninstall スクリプトを実行し、管理コンソールで アプリサーバーの再起動 を選択したときに restart スクリプトを実行してアプリケーションを再起動します。

例 aws-windows-deployment-manifest.json - custom deployment

{ "manifestVersion": 1, "deployments": { "custom": [ { "name": "Custom site", "scripts": { "install": { "file": "siteInstall.ps1" }, "restart": { "file": "siteRestart.ps1" }, "uninstall": { "file": "siteUninstall.ps1" } } } ] } }

ソースバンドルには、マニフェスト、スクリプトと一緒にアプリケーションの実行に必要なアーティファクトをすべて含めます。

例 custom-site-bundle.zip

. |-- aws-windows-deployment-manifest.json |-- siteInstall.ps1 |-- siteRestart.ps1 |-- siteUninstall.ps1 `-- site-contents.zip