メニュー
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.zip で入手できます。

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

前提条件

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

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

  1. microsoft.com/net/core からインストーラーをダウンロードします。[Windows] を選択し、[Select your environment] の下で [Command line / other] を選択します。[Download .NET Core SDK] を選択します。

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

このチュートリアルでは、コマンドラインツールの ZIP ユーティリティを使用して、Elastic Beanstalk にデプロイできるソースバンドルを作成します。Windows で zip コマンドを使用するには、zipls などの便利なコマンドラインユーティリティの軽量のコレクションである UnxUtils をインストールできます。(または、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. dotnet new コマンドを使用して、新しい .NET Core プロジェクトを生成します。

    C:\Users\username> dotnet new console -o dotnet-core-tutorial
    Content generation time: 65.0152 ms
    The template "Console Application" created successfully.
    C:\Users\username> cd dotnet-core-tutorial
  3. dotnet restore コマンドを使用して、依存関係をインストールします。

    C:\Users\username\dotnet-core-tutorial> dotnet restore
    Restoring packages for C:\Users\username\dotnet-core-tutorial\dotnet-core-tutorial.csproj...
    Generating MSBuild file C:\Users\username\dotnet-core-tutorial\obj\dotnet-core-tutorial.csproj.nuget.g.props.
    Generating MSBuild file C:\Users\username\dotnet-core-tutorial\obj\dotnet-core-tutorial.csproj.nuget.g.targets.
    Writing lock file to disk. Path: C:\Users\username\dotnet-core-tutorial\obj\project.assets.json
    Restore completed in 1.25 sec for C:\Users\username\dotnet-core-tutorial\dotnet-core-tutorial.csproj.
    
    NuGet Config files used:
        C:\Users\username\AppData\Roaming\NuGet\NuGet.Config
        C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config
    Feeds used:
        https://api.nuget.org/v3/index.json
        C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\
  4. dotnet run コマンドを使用して、アプリケーションをローカルでビルドし、実行します。

    C:\Users\username\dotnet-core-tutorial> dotnet run
    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. [Application code] に、[Sample application] を選択します。

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

  5. すべてのオプションを確認します。その内容でよければ、[Create app] を選択します。

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

ソースコードの更新

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

注記

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

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

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

    例 c:\users\username\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 ウェブサイトを実行します。

    例 c:\users\username\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 サーバーを設定します。

    例 c:\users\username\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. dotnet-core-tutorial.csproj を更新して IIS ミドルウェアを含め、web.config の出力に dotnet publish ファイルを含めます。

    例 c:\users\username\dotnet-core-tutorial\dotnet-core-tutorial.csproj

    <Project Sdk="Microsoft.NET.Sdk">
    
        <PropertyGroup>
            <OutputType>Exe</OutputType>
            <TargetFramework>netcoreapp1.1</TargetFramework>
        </PropertyGroup>
    
        <ItemGroup>
            <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="1.1.0" />
        </ItemGroup>
    
        <ItemGroup>
            <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.0" />
        </ItemGroup>
    
        <ItemGroup>
            <None Include="web.config" CopyToPublishDirectory="Always" />
        </ItemGroup>
    
    </Project>

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

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

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

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

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

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

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

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

    C:\users\username\dotnet-core-tutorial> dotnet publish -o site

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

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

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

    C:\users\username\dotnet-core-tutorial> cd site
    C:\users\username\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.Diagnostics.StackTrace.dll (164 bytes security) (deflated 45%)
      adding: System.Net.WebSockets.dll (164 bytes security) (deflated 47%)
      adding: System.Runtime.CompilerServices.Unsafe.dll (164 bytes security) (deflated 42%)
      adding: System.Text.Encodings.Web.dll (164 bytes security) (deflated 57%)
      adding: web.config (164 bytes security) (deflated 39%)
    C:\users\username\dotnet-core-tutorial\site> cd ../
  2. サイトアーカイブを指すデプロイマニフェストを追加します。

    例 c:\users\username\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 という名前のソースバンドルを作成します。

    C:\users\username\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.zip からダウンロードできます。

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

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

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

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

  4. [Choose File] を選択し、ダイアログボックスを使用してソースバンドルを選択します。

  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 つの 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 の操作を終了したら、 環境を終了できます。Elastic Beanstalk は、Amazon EC2 インスタンスデータベースインスタンスロードバランサー、セキュリティグループ、アラームなど、お客様の環境に関連付けられているすべての AWS リソースを終了します。

Elastic Beanstalk 環境を終了するには

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

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

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

  4. [Confirm Termination] ダイアログボックスに環境名を入力し、[Terminate] を選択します。

さらに、Elastic Beanstalk 環境の外に作成したデータベースリソースを終了できます。Amazon RDS データベースインスタンスを終了する場合、スナップショットを作成し、後で別のインスタンスにデータを復元できます。

RDS DB インスタンスを削除するには

  1. Amazon RDS コンソールを開きます。

  2. [Instances] を選択します。

  3. DB インスタンスを選択します。

  4. [Instance Actions] を選択し、[Delete] を選択します。

  5. スナップショットを作成するかどうかを選択してから、[Delete] を選択します。

DynamoDB テーブルを削除するには

  1. DynamoDB コンソールで [Tables page] を開きます。

  2. テーブルを選択します。

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

  4. [Delete] を選択します。

次のステップ

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

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

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