メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

AWS Elastic Beanstalk を使用した ASP.NET Core アプリケーションのデプロイ

このチュートリアルでは、新しい ASP.NET Core アプリケーションを構築し、それを Elastic Beanstalk にデプロイする手順について説明します。.NET Core SDK の dotnet コマンドラインツールを使用して、基本的なコマンドライン .NET Core アプリケーションの生成、依存関係のインストール、コードのコンパイル、およびアプリケーションのローカルな実行を行います。

次に、デフォルトの Program クラスを変更し、ASP.NET Startup クラスと設定ファイルを追加して、ASP.NET と IIS で HTTP リクエストに対応するアプリケーションを作成します。dotnet publish コマンドは、web.config ファイルを使用してバンドルし、Elastic Beanstalk 環境にデプロイできるサイトアーカイブを作成することができる、コンパイルされたクラスと依存関係を生成します。

Elastic Beanstalk はデプロイマニフェストを使用して、.NET Core アプリケーション、カスタムアプリケーション、および 1 つのサーバー上の複数の .NET Core または MSBuild アプリケーション用のデプロイを設定します。Windows Server 環境に .NET Core アプリケーションをデプロイするには、デプロイマニフェストを使用してアプリケーションソースバンドルにサイトアーカイブを追加します。デプロイマニフェストは、サイトを実行し、アプリケーションプールの設定と、別々のパスでの複数のアプリケーションの実行に使用できるパスを Elastic Beanstalk に伝えます。

注記

アプリケーションソースコードは dotnet-core-tutorial-source-v1.zip で入手できます。

デプロイ可能ソースバンドルは dotnet-core-tutorial-bundle-v1.zip で入手できます。

前提条件

このチュートリアルでは、NET Core SDK バージョン 1.0.0-preview2 を使用して基本的な .NET Core アプリケーションを生成し、ローカルで実行して、デプロイ可能なパッケージを構築します。

.NET Core SDK をインストールするには

  1. microsoft.com/net/core からインストーラーをダウンロードします。[.NET Core SDK for Windows] というラベルのリンクを探します。

  2. インストーラーを実行し、手順に従います。

このチュートリアルでは、コマンドラインツールの ZIP ユーティリティを使用して、Elastic Beanstalk にデプロイできるソースバンドルを作成します。Windows で zip コマンドを使用するには、UnxUtilszip のように便利なコマンドラインユーティリティの軽量のコレクション、ls をインストールできます。(または、Windows エクスプローラーや他の ZIP ユーティリティを使用して、ソースバンドルアーカイブを作成できます。)

UnxUtils をインストールするには

  1. ダウンロード UnxUtils.

  2. ローカルディレクトリにアーカイブを抽出します。たとえば、C:\Program Files (x86) と設定します。

  3. Windows の PATH ユーザー変数にバイナリへのパスを追加します。たとえば、C:\Program Files (x86)\UnxUtils\usr\local\wbin と設定します。

  4. 新しいコマンドプロンプトウィンドウを開き、zip コマンドを実行して、動作することを確認します。

    > zip
    Copyright (C) 1990-1999 Info-ZIP
    Type 'zip "-L"' for software license.
    ...

.NET Core プロジェクトの生成

dotnet コマンドラインツールを使用して新しい C# .NET Core プロジェクトを生成し、ローカルで実行します。デフォルトの .NET Core アプリケーションは、Hello World! を表示して終了するコマンドラインユーティリティです。

新しい .NET Core プロジェクトを作成するには

  1. 新しいコマンドプロンプトを開き、ユーザーフォルダーに移動します。

    > cd %USERPROFILE%
  2. プロジェクトのディレクトリを作成します。

    ~> mkdir dotnet-core-tutorial
    ~> cd dotnet-core-tutorial
  3. dotnet new コマンドを使用して、新しい .NET Core プロジェクトを生成します。

    ~\dotnet-core-tutorial> dotnet new
    Created new C# project in C:\Users\me\dotnet-core-tutorial.
  4. dotnet restore コマンドを使用して、依存関係をインストールします。

    ~\dotnet-core-tutorial> dotnet restore
    log  : Restoring packages for C:\Users\me\dotnet-core-tutorial\project.json...
    log  : Writing lock file to disk. Path: C:\Users\me\dotnet-core-tutorial\project.lock.json
    log  : C:\Users\me\dotnet-core-tutorial\project.json
    log  : Restore completed in 18101ms.
  5. dotnet run コマンドを使用して、アプリケーションをローカルでビルドし、実行します。

    ~\dotnet-core-tutorial> dotnet run
    Project dotnet-core-tutorial (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
    Compiling dotnet-core-tutorial for .NETCoreApp,Version=v1.0
    
    Compilation succeeded.
        0 Warning(s)
        0 Error(s)
    
    Time elapsed 00:00:08.3036217
    
    Hello World!

デフォルトアプリケーションは Hello World! をコンソールに表示して終了します。アプリケーションを Elastic Beanstalk にデプロイする前に、ASP.NET および IIS を使用して HTTP リクエストに対応します。

Elastic Beanstalk 環境を起動する

AWS マネジメントコンソール を使用して、Elastic Beanstalk 環境を起動します。 [Windows Server 2012R2 v1.2.0] プラットフォーム設定を選択し、デフォルト設定およびサンプルコードを受け入れます。環境を起動して設定した後、いつでも新しいソースコードをデプロイできます。

環境を起動するには(コンソール)

  1. 次の事前に設定されたリンクで、Elastic Beanstalk コンソールを開きます: console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced

  2. [Platform] に、アプリケーションで使用される言語に一致するプラットフォームを選択します。

  3. [App code] で、[Sample application] を選択します。

  4. [Review and launch] を選択します。

  5. すべてのオプションを確認し、これらのオプションが適正であれば、[アプリの作成] を選択します。

環境の作成には約 10 分かかります。この時間内に、ソースコードを更新できます。

ソースコードの更新

ASP.NET および IIS を使用するようデフォルトアプリケーションを更新します。ASP.NET は、.NET 用のウェブサイトフレームワークです。IIS は Elastic Beanstalk 環境の EC2 インスタンスでアプリケーションを実行するウェブサーバーです。

注記

ソースコードは dotnet-core-tutorial-source-v1.zip で入手できます。

ASP.NET および IIS のサポートをコードに追加するには

  1. Program.cs を更新してウェブホストビルダーを実行します。

    例 ~\dotnet-core-tutorial\Program.cs

    using System;
    using Microsoft.AspNetCore.Hosting;
    using System.IO;
    
    namespace aspnetcoreapp
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                var host = new WebHostBuilder()
                  .UseKestrel()
                  .UseContentRoot(Directory.GetCurrentDirectory())
                  .UseIISIntegration()
                  .UseStartup<Startup>()
                  .Build();
    
                host.Run();
            }
        }
    }
  2. Startup.cs ファイルを追加して ASP.NET ウェブサイトを実行します。

    例 ~\dotnet-core-tutorial\Startup.cs

    using System;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Http;
    
    namespace aspnetcoreapp
    {
        public class Startup
        {
            public void Configure(IApplicationBuilder app)
            {
                app.Run(context =>
                {
                    return context.Response.WriteAsync("Hello from ASP.NET Core!");
                });
            }
        }
    }
  3. web.config ファイルを追加して IIS サーバーを設定します。

    例 ~\dotnet-core-tutorial\web.config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.webServer>
        <handlers>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath="dotnet" arguments=".\dotnet-core-tutorial.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
      </system.webServer>
    </configuration>
  4. project.json を更新して IIS ミドルウェアを含め、dotnet publish の出力に web.config ファイルを含めます。

    例 ~\dotnet-core-tutorial\project.json

    {
      "version": "1.0.0-*",
      "buildOptions": {
        "debugType": "portable",
        "emitEntryPoint": true
      },
      "dependencies": {},
      "frameworks": {
        "netcoreapp1.0": {
          "dependencies": {
            "Microsoft.NETCore.App": {
              "type": "platform",
              "version": "1.0.0"
            },
            "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
            "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0"
          },
          "imports": "dnxcore50"
        }
      },
      "publishOptions": {
        "include": [
          "web.config"
        ]
      }
    }

次に、新しい依存関係をインストールし、ASP.NET ウェブサイトをローカルで実行します。

ウェブサイトをローカルで実行するには

  1. dotnet restore コマンドを使用して、依存関係をインストールします。

  2. dotnet run コマンドを使用して、アプリをローカルでビルドし、実行します。

  3. localhost:5000 を開いてサイトを表示します。

ウェブサーバーでアプリケーションを実行するには、web.config 設定ファイルと実行時の依存関係で、コンパイルされたソースコードをバンドルする必要があります。dotnet ツールには、project.json の設定に基づいてディレクトリでこれらのファイルを収集する publish コマンドが用意されています。

ウェブサイトを構築するには

  • dotnet publish コマンドを使用して、コンパイル済みコードと依存関係を site という名前のフォルダーに出力します。

    ~\dotnet-core-tutorial> dotnet publish -o site

アプリケーションを Elastic Beanstalk にデプロイするには、Elastic Beanstalk に実行方法を伝えるデプロイマニフェストを使用してサイトアーカイブをバンドルします。

ソースバンドルを作成するには

  1. サイトフォルダーのファイルを ZIP アーカイブに追加します。

    ~\dotnet-core-tutorial> cd site
    ~\dotnet-core-tutorial\site> zip ../site.zip *
      adding: dotnet-core-tutorial.deps.json (164 bytes security) (deflated 81%)
      adding: dotnet-core-tutorial.dll (164 bytes security) (deflated 58%)
      adding: dotnet-core-tutorial.pdb (164 bytes security) (deflated 30%)
      adding: dotnet-core-tutorial.runtimeconfig.json (164 bytes security) (deflated 25%)
      adding: Microsoft.AspNetCore.Hosting.Abstractions.dll (164 bytes security) (deflated 48%)
      adding: Microsoft.AspNetCore.Hosting.dll (164 bytes security) (deflated 54%)
      adding: Microsoft.AspNetCore.Hosting.Server.Abstractions.dll (164 bytes security) (deflated 45%)
      adding: Microsoft.AspNetCore.Http.Abstractions.dll (164 bytes security) (deflated 52%)
      adding: Microsoft.AspNetCore.Http.dll (164 bytes security) (deflated 55%)
      adding: Microsoft.AspNetCore.Http.Extensions.dll (164 bytes security) (deflated 50%)
      adding: Microsoft.AspNetCore.Http.Features.dll (164 bytes security) (deflated 50%)
      adding: Microsoft.AspNetCore.HttpOverrides.dll (164 bytes security) (deflated 47%)
      adding: Microsoft.AspNetCore.Server.IISIntegration.dll (164 bytes security) (deflated 47%)
      adding: Microsoft.AspNetCore.Server.Kestrel.dll (164 bytes security) (deflated 62%)
      adding: Microsoft.AspNetCore.WebUtilities.dll (164 bytes security) (deflated 55%)
      adding: Microsoft.Extensions.Configuration.Abstractions.dll (164 bytes security) (deflated 48%)
      adding: Microsoft.Extensions.Configuration.dll (164 bytes security) (deflated 45%)
      adding: Microsoft.Extensions.Configuration.EnvironmentVariables.dll (164 bytes security) (deflated 47%)
      adding: Microsoft.Extensions.DependencyInjection.Abstractions.dll (164 bytes security) (deflated 55%)
      adding: Microsoft.Extensions.DependencyInjection.dll (164 bytes security) (deflated 50%)
      adding: Microsoft.Extensions.FileProviders.Abstractions.dll (164 bytes security) (deflated 46%)
      adding: Microsoft.Extensions.FileProviders.Physical.dll (164 bytes security) (deflated 46%)
      adding: Microsoft.Extensions.FileSystemGlobbing.dll (164 bytes security) (deflated 48%)
      adding: Microsoft.Extensions.Logging.Abstractions.dll (164 bytes security) (deflated 55%)
      adding: Microsoft.Extensions.Logging.dll (164 bytes security) (deflated 43%)
      adding: Microsoft.Extensions.ObjectPool.dll (164 bytes security) (deflated 45%)
      adding: Microsoft.Extensions.Options.dll (164 bytes security) (deflated 46%)
      adding: Microsoft.Extensions.PlatformAbstractions.dll (164 bytes security) (deflated 45%)
      adding: Microsoft.Extensions.Primitives.dll (164 bytes security) (deflated 49%)
      adding: Microsoft.Net.Http.Headers.dll (164 bytes security) (deflated 52%)
      adding: System.Diagnostics.Contracts.dll (164 bytes security) (deflated 46%)
      adding: System.Net.WebSockets.dll (164 bytes security) (deflated 47%)
      adding: System.Text.Encodings.Web.dll (164 bytes security) (deflated 57%)
      adding: web.config (164 bytes security) (deflated 39%)
    ~\dotnet-core-tutorial\site> cd ../
  2. サイトアーカイブを指すデプロイマニフェストを追加します。

    例 ~\dotnet-core-tutorial\aws-windows-deployment-manifest.json

    {
        "manifestVersion": 1,
        "deployments": {
            "aspNetCoreWeb": [
            {
                "name": "test-dotnet-core",
                "parameters": {
                    "appBundle": "site.zip",
                    "iisPath": "/",
                    "iisWebSite": "Default Web Site"
                }
            }
            ]
        }
    }
  3. zip コマンドを使用して、dotnet-core-tutorial.zip という名前のソースバンドルを作成します。

    ~\dotnet-core-tutorial> zip dotnet-core-tutorial.zip site.zip aws-windows-deployment-manifest.json
      adding: site.zip (164 bytes security) (stored 0%)
      adding: aws-windows-deployment-manifest.json (164 bytes security) (deflated 50%)

アプリケーションのデプロイ

先に作成した Elastic Beanstalk 環境にソースバンドルをデプロイします。

注記

ソースバンドルは dotnet-core-tutorial-bundle-v1.zip からダウンロードできます。

ソースバンドルをデプロイするには

  1. Elastic Beanstalk コンソールを開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Upload and Deploy] を選択します。

  4. [Browse] を選択してソースバンドルをアップロードします。

  5. [Deploy] を選択します。

  6. デプロイが完了したら、新しいタブのウェブサイトを開く、サイトの URL を選択します。

アプリケーションは、レスポンスに Hello from ASP.NET Core! と書き込んで戻ります。

環境を起動すると、以下のリソースが作成されます。

  • EC2 インスタンス – 選択したプラットフォームでウェブアプリケーションを実行するように設定された Amazon Elastic Compute Cloud (Amazon EC2) 仮想マシン。

    各プラットフォームは、それぞれ特定の言語バージョン、フレームワーク、ウェブコンテナ、またはそれらの組み合わせをサポートするための、さまざまなソフトウェア、設定ファイル、スクリプトを実行します。ほとんどのプラットフォームでは、Apache または nginx のいずれかをウェブアプリケーションの前にリバースプロキシとして配置します。そのプロキシがリクエストをアプリケーションに転送し、静的アセットを提供し、アクセスログとエラーログを生成します。

  • インスタンスセキュリティグループ – ポート 80 上の進入を許可するように設定された Amazon EC2 セキュリティグループ。 このリソースでは、ロードバランサーからの HTTP トラフィックが、ウェブアプリケーションを実行している EC2 インスタンスに達することができます。 デフォルトでは、トラフィックは他のポート上で許可されません。

  • ロードバランサー – アプリケーションを実行するインスタンスにリクエストを分散するように設定された Elastic Load Balancing ロードバランサー。 ロードバランサーにより、インスタンスを直接インターネットに公開する必要もなくなります。

  • ロードバランサー セキュリティグループ – ポート 80 上の進入を許可するように設定された Amazon EC2 セキュリティグループ。 このリソースでは、インターネットからの HTTP トラフィックが、ロードバランサーに達することができます。 デフォルトでは、トラフィックは他のポート上で許可されません。

  • Auto Scaling グループ – インスタンスが終了されたか利用不可になった場合にそのインスタンスを置き換えるように設定された Auto Scaling グループ。

  • Amazon S3 バケット – Elastic Beanstalk の使用時に作成されるソースコード、ログ、その他のアーティファクトの保存場所。

  • Amazon CloudWatch アラーム – お客様の環境内のインスタンスの負荷をモニタリングする 2 つの Amazon CloudWatch アラーム。負荷が高すぎたり低すぎたりする場合にトリガーされます。 アラームがトリガーされると、Auto Scaling グループはレスポンスとしてスケールアップまたはダウンを行います。

  • AWS CloudFormation スタック – 環境内でリソースを起動して、設定の変更を伝達するために、Elastic Beanstalk は AWS CloudFormation を使用します。 リソースは、AWS CloudFormation マネジメントコンソールに表示できるテンプレートで定義されます。

  • ドメイン名 – ウェブアプリケーションまでのルートとなるドメイン名であり、subdomain.region.elasticbeanstalk.com という形式になります。

これらのリソースはすべて、Elastic Beanstalk により管理されます。 環境を終了すると、Elastic Beanstalk は含まれているすべてのリソースを終了します。

注記

Elastic Beanstalk が作成する S3 バケットは、環境間で共有され、環境の終了時に削除されません。 詳細については、「Amazon S3 で Elastic Beanstalk を使用する」を参照してください。

クリーンアップ

Elastic Beanstalk の操作を終了したら、Windows Server 環境を終了できます。

Elastic Beanstalk 環境を終了するには

  1. Elastic Beanstalk コンソールを開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Actions] を選択してから、[Terminate Environment] を選択します。

Elastic Beanstalk は、EC2 インスタンス、ロードバランサー、セキュリティグループ、Amazon CloudWatch アラームなど、お客様の環境に関連付けられているすべての AWS リソースを終了します。

次のステップ

アプリケーションの開発が進むにつれ、.zip ファイルを手動で作成して Elastic Beanstalk コンソールにアップロードすることなく、環境を管理してアプリケーションをデプロイすることが必要になります。 Elastic Beanstalk コマンドラインインターフェイス(EB CLI)には、コマンドラインからアプリケーションを作成、設定して、Elastic Beanstalk 環境にデプロイするための使いやすいコマンドが用意されています。

開発とテストのために、管理された DB インスタンスを環境に直接追加するために Elastic Beanstalk の機能を使用することが必要になる場合があります。 環境内でのデータベースのセットアップについては、「Elastic Beanstalk でデータベースを設定する」を参照してください。

最後に、本稼働環境でアプリケーションを使用する予定の場合は、お客様の環境にカスタムドメイン名を設定し、セキュアな接続のために HTTPS を有効にすることが必要になります。