AWS Elastic Beanstalk
開発者ガイド

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

このチュートリアルでは、新しい ASP.NET Core アプリケーションを構築し、それを Elastic Beanstalk にデプロイする手順について説明します。

最初に、.NET Core SDK の dotnet コマンドラインツールを使用して、基本的な .NET Core コマンドラインアプリケーションの生成、依存関係のインストール、コードのコンパイル、およびアプリケーションのローカルな実行を行います。次に、デフォルトの Program.cs クラスを作成し、ASP.NET Startup.cs クラスと設定ファイルを追加して、ASP.NET および IIS で HTTP リクエストに対応するアプリケーションを作成します。

最後に、Elastic Beanstalk はデプロイマニフェストを使用して、.NET Core アプリケーション、カスタムアプリケーション、および 1 つのサーバー上の複数の .NET Core または MSBuild アプリケーション用のデプロイを設定します。Windows Server 環境に .NET Core アプリケーションをデプロイするには、デプロイマニフェストを使用してアプリケーションソースバンドルにサイトアーカイブを追加します。dotnet publish コマンドは、web.config ファイルを使用してバンドルし、サイトアーカイブを作成することができる、コンパイルされたクラスと依存関係を生成します。デプロイマニフェストは、サイトを実行し、アプリケーションプールの設定と、別々のパスでの複数のアプリケーションの実行に使用できるパスを Elastic Beanstalk に伝えます。

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

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

前提条件

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

要件

  • .NET Core (x64) 1.0.1、2.0.0 以降

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

  1. microsoft.com/net/core からインストーラーをダウンロードします。Windows を選択します。Download .NET SDK を選択します。

  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 と指定します。

    1. Windows キーを押し、environment variables と入力します。

    2. [Edit environment variables for your account] を選択します。

    3. PATH を選択して、編集 を選択します。

    4. セミコロンで区切って、[Variable value] フィールドにパスを追加します。以下に例を示します。C:\item1\path;C:\item2\path

    5. [OK] を 2 回選択して、新しい設定を適用します。

    6. 実行中のコマンドプロンプトウィンドウを閉じ、コマンドプロンプトウィンドウを再度開きます。

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

    > zip -h 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!

Elastic Beanstalk 環境を起動する

AWS マネジメントコンソール を使用して、Elastic Beanstalk 環境を起動します。この例では、.NET プラットフォームを使用して起動します。環境を起動して設定した後、いつでも新しいソースコードをデプロイできます。

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

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

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

  3. アプリケーションコード として、サンプルアプリケーション を選択します。

  4. 確認と起動 を選択します。

  5. 使用できるオプションを確認します。その内容でよければ、アプリケーションの作成 を選択します。

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

ソースコードの更新

デフォルトのアプリケーションを、ASP.NET および IIS を使用するウェブアプリケーションに変更します。

  • ASP.NET は、.NET 用のウェブサイトフレームワークです。

  • IIS は、Elastic Beanstalk 環境の Amazon EC2 インスタンスでアプリケーションを実行するウェブサーバーです。

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

注記

次の手順では、プロジェクトコードをウェブアプリケーションに変換する方法を示します。プロセスを簡素化するために、最初からウェブアプリケーションとしてプロジェクトを生成できます。前のセクション「.NET Core プロジェクトの生成」で、次のコマンドを使用して dotnet new ステップのコマンドを変更します。

C:\Users\username> dotnet new web -o dotnet-core-tutorial

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. IIS ミドルウェアを含む dotnet-core-tutorial.csproj を追加して、web.config からの出力に dotnet publish ファイルを含めます。

    注記

    次の例は、.NET Core Runtime 2.2.1 を使用して開発されました。PackageReference 要素の TargetFramework または Version 属性値を変更して、カスタムプロジェクトで使用している .NET Core ランタイムのバージョンに一致させる必要がある場合があります。

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

    <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.2</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" /> </ItemGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="2.2.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 84%) adding: dotnet-core-tutorial.dll (164 bytes security) (deflated 59%) adding: dotnet-core-tutorial.pdb (164 bytes security) (deflated 28%) adding: dotnet-core-tutorial.runtimeconfig.json (164 bytes security) (deflated 26%) adding: Microsoft.AspNetCore.Authentication.Abstractions.dll (164 bytes security) (deflated 49%) adding: Microsoft.AspNetCore.Authentication.Core.dll (164 bytes security) (deflated 57%) adding: Microsoft.AspNetCore.Connections.Abstractions.dll (164 bytes security) (deflated 51%) adding: Microsoft.AspNetCore.Hosting.Abstractions.dll (164 bytes security) (deflated 49%) adding: Microsoft.AspNetCore.Hosting.dll (164 bytes security) (deflated 60%) adding: Microsoft.AspNetCore.Hosting.Server.Abstractions.dll (164 bytes security) (deflated 44%) adding: Microsoft.AspNetCore.Http.Abstractions.dll (164 bytes security) (deflated 54%) 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 49%) adding: Microsoft.AspNetCore.Server.IISIntegration.dll (164 bytes security) (deflated 46%) adding: Microsoft.AspNetCore.Server.Kestrel.Core.dll (164 bytes security) (deflated 63%) adding: Microsoft.AspNetCore.Server.Kestrel.dll (164 bytes security) (deflated 46%) adding: Microsoft.AspNetCore.Server.Kestrel.Https.dll (164 bytes security) (deflated 44%) adding: Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.dll (164 bytes security) (deflated 56%) adding: Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll (164 bytes security) (deflated 51%) 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.Binder.dll (164 bytes security) (deflated 47%) adding: Microsoft.Extensions.Configuration.dll (164 bytes security) (deflated 46%) adding: Microsoft.Extensions.Configuration.EnvironmentVariables.dll (164 bytes security) (deflated 46%) adding: Microsoft.Extensions.Configuration.FileExtensions.dll (164 bytes security) (deflated 47%) adding: Microsoft.Extensions.DependencyInjection.Abstractions.dll (164 bytes security) (deflated 54%) adding: Microsoft.Extensions.DependencyInjection.dll (164 bytes security) (deflated 53%) adding: Microsoft.Extensions.FileProviders.Abstractions.dll (164 bytes security) (deflated 46%) adding: Microsoft.Extensions.FileProviders.Physical.dll (164 bytes security) (deflated 47%) adding: Microsoft.Extensions.FileSystemGlobbing.dll (164 bytes security) (deflated 49%) adding: Microsoft.Extensions.Hosting.Abstractions.dll (164 bytes security) (deflated 47%) adding: Microsoft.Extensions.Logging.Abstractions.dll (164 bytes security) (deflated 54%) adding: Microsoft.Extensions.Logging.dll (164 bytes security) (deflated 48%) adding: Microsoft.Extensions.ObjectPool.dll (164 bytes security) (deflated 45%) adding: Microsoft.Extensions.Options.dll (164 bytes security) (deflated 53%) adding: Microsoft.Extensions.Primitives.dll (164 bytes security) (deflated 50%) adding: Microsoft.Net.Http.Headers.dll (164 bytes security) (deflated 53%) adding: System.IO.Pipelines.dll (164 bytes security) (deflated 50%) adding: System.Runtime.CompilerServices.Unsafe.dll (164 bytes security) (deflated 43%) 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. 画面上のダイアログボックスを使用して、ソースバンドルをアップロードします。

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

クリーンアップ

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

Elastic Beanstalk 環境を終了するには

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

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

  3. [アクション] を選択してから、[環境の終了] を選択します。

  4. 画面上のダイアログボックスを使用して、環境の終了を確認します。

Elastic Beanstalk を使用すると、いつでもアプリケーション用の新しい環境を簡単に作成できます。

次のステップ

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

Visual Studio を使用してアプリケーションを開発する場合、AWS Toolkit for Visual Studio を使用して、変更のデプロイ、Elastic Beanstalk 環境の管理、およびその他の AWS リソースの管理を行うこともできます。詳細については、AWS Toolkit for Visual Studioを参照してください。

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

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