

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# カスタム ASP.NET Core Elastic Beanstalk デプロイ
<a name="deployment-beanstalk-custom-netcore"></a>

このトピックでは、デプロイのしくみと、Elastic BeanstalkおよびToolkit for Visual Studioを使って ASP.NET Core アプリケーションを作成するときにカスタムデプロイで行えることについて説明します。

Toolkit for Visual Studio でデプロイウィザードを完了すると、ツールキットはアプリケーションをバンドルして、それを Elastic Beanstalk に送信します。アプリケーションバンドルを作成する最初のステップは、新しい dotnet CLI を使い、**publish** コマンドを使用して、アプリケーションの発行の準備をすることです。フレームワークと設定は、ウィザードの設定から **publish** コマンドに継承されます。** に **Release`configuration` を選び、** に **netcoreapp1.0`framework` を選んだ場合は、ツールキットは次のコマンドを実行します。

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

**publish** コマンドが完了すると、ツールキットは新しいデプロイマニフェストを発行フォルダに書き込みます。デプロイマニフェストは **aws-windows-deployment-manifest.json** という JSON ファイルであり、これは Elastic Beanstalk Windows コンテナ (バージョン 1.2 以降) はこれを読み込み、アプリケーションのデプロイ方法を決定します。例えば、IIS のルートにデプロイする ASP.NET Core アプリケーションでは、ツールキットは次のようなマニフェストファイルを生成します。

```
{
  "manifestVersion": 1,
  "deployments": {

    "aspNetCoreWeb": [
      {
        "name": "app",
        "parameters": {
          "appBundle": ".",
          "iisPath": "/",
          "iisWebSite": "Default Web Site"
        }
      }
    ]
  }
}
```

`appBundle` プロパティは、アプリケーションのバイナリの場所をマニフェストファイルを基準として指定します。このプロパティは、ディレクトリまたは ZIP アーカイブを指すことができます。`iisPath` プロパティと `iisWebSite` プロパティは、IIS でアプリケーションをホストする場所を示します。

## マニフェストをカスタマイズする
<a name="tkv-deploy-beanstalk-custom-netcore-manifest"></a>

ツールキットは、マニフェストファイルが発行フォルダに存在しない場合のみ、マニフェストファイルを書き込みます。ファイルが存在する場合は、ツールキットは最初のアプリケーションの、マニフェストの `appBundle` セクションの下に一覧表示されている、`iisPath`、`iisWebSite` および `aspNetCoreWeb` プロパティを更新します。これにより、**aws-windows-deployment-manifest.json** をプロジェクトに追加して、マニフェストをカスタマイズできます。これを Visual Studio で ASP.NET Core ウェブアプリケーションに行うには、新しい JSON ファイルをプロジェクトのルートに追加して、その名前を **aws-windows-deployment-manifest.json** とします。

マニフェストは **aws-windows-deployment-manifest.json** という名前である必要があり、プロジェクトのルートに存在する必要があります。Elastic Beanstalk コンテナはルートでマニフェストを検索し、検出された場合にはデプロイツールを呼び出します。ファイルが存在しない場合は、Elastic Beanstalk コンテナは以前のデプロイツールにフォールバックします。これは、アーカイブが **msdeploy** アーカイブであることを想定します。

dotnet CLI の `publish` コマンドにマニフェストが含まれるようにするため、`project.json` ファイルを更新して、マニフェストファイルが `include` の include セクション `publishOptions` に含まれるようにします。

```
{
   "publishOptions": {
     "include": [
       "wwwroot",
       "Views",
       "Areas/**/Views",
       "appsettings.json",
       "web.config",
       "aws-windows-deployment-manifest.json"
     ]
   }
 }
```

マニフェストの宣言が完了し、マニフェストはアプリケーションバンドルに含まれているため、アプリケーションのデプロイの方法をさらに設定することができます。デプロイウィザードがサポートする以上にデプロイをカスタマイズできます。AWS では **aws-windows-deploymentmanifest.json ファイル**に JSON スキーマを定義しており、Toolkit for Visual Studio をインストールすると、セットアップがそのスキーマの URL を登録します。

`windows-deployment-manifest.json` を開くと、スキーマのドロップダウンボックスで選択した、スキーマの URL があります。URL に移動すると、マニフェストで設定できる機能の完全な説明を取得できます。Visual Studio は、選択されたスキーマを使って、マニフェストの編集時に IntelliSense を提供します。

実行できる 1 つのカスタマイズは、アプリケーションが実行される 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 Core アプリケーションが 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 について
<a name="tkv-deploy-beanstalk-custom-netcore-ebextensions"></a>

Elastic Beanstalk **.ebextensions** 設定ファイルは、他の Elastic Beanstalk コンテナのすべてでサポートされています。.ebextensions を ASP.NET Core アプリケーションに含めるには、`.ebextensions` ディレクトリを、`project.json` ファイル内の `publishOptions` 下の`include` セクションに追加します。.ebextensions の詳細については、[Elastic Beanstalk デベロッパーガイド](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html)を参照してください。