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

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

チュートリアル: Elastic Beanstalk を使用した ASP.NET Core アプリケーションのデプロイ

このチュートリアルでは、新しい ASP.NET Core アプリケーションを構築し、 にデプロイするプロセスについて説明します AWS 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-windows-tutorialzip から入手できます。

前提条件

このチュートリアルでは、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 環境の起動

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

環境を起動するには (コンソール)
  1. 次の事前設定済みリンク console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced を使用して Elastic Beanstalk コンソールを開きます。

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

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

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

  5. 使用できるオプションを確認します。使用する有効なオプションを選択し、準備ができたら [アプリの作成] を選択します。

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

ソースコードの更新

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

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

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

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

注記

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

C:\Users\username> dotnet new web -o dotnet-core-tutorial -n WindowsSampleApp
ASP.NET および IIS のサポートをコードに追加するには
  1. Program.cs をアプリケーションディレクトリにコピーしてウェブホストビルダーとして実行します。

    例 c:\users\username\dotnet-core-tutorial\Program.cs
    namespace Microsoft.AspNetCore.Hosting; using WindowsSampleApp; public static class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args).UseStartup<Startup>(); }
  2. Startup.cs を追加して ASP.NET ウェブサイトを実行します。

    例 c:\users\username\dotnet-core-tutorial\Startup.cs
    namespace WindowsSampleApp { public class Startup { public void Configure(IApplicationBuilder app) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapGet("/", () => "Hello World from Elastic Beanstalk"); }); } } }
  3. IIS ミドルウェアを含む WindowsSampleApp.csproj を追加して、web.config からの出力に dotnet publish ファイルを含めます。

    注記

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

    例 c:\users\usernamedotnet-core-tutorial\WindowsSampleApp\.csproj
    <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <RollForward>LatestMajor</RollForward> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <RootNamespace>WindowsSampleApp</RootNamespace> </PropertyGroup> </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 アーカイブに追加します。

    注記

    別の ZIP ユーティリティを使用する場合は、必ず ZIP アーカイブのルートフォルダにすべてのファイルを追加してください。これは、アプリケーションを Elastic Beanstalk 環境に正常にデプロイするために必要です。

    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\usernamedotnet-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-bundlezip からダウンロードできます。

出典バンドルをデプロイするには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. 環境の概要ページで、[Upload and deploy (アップロードとデプロイ)] を選択します。

  4. 画面上のダイアログボックスを使用して、ソースバンドルをアップロードします。

  5. [デプロイ] を選択します。

  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 グループはレスポンスとしてスケールアップまたはダウンを行います。

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

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

    注記

    Elastic Beanstalk アプリケーションのセキュリティを強化するため、elasticbeanstalk.com ドメインはパブリックサフィックスリスト (PSL) に登録されています。セキュリティ強化のため、Elastic Beanstalk アプリケーションのデフォルトドメイン名に機密な Cookie を設定する必要が生じた場合は、__Host- プレフィックスの付いた Cookie の使用をおすすめします。この方法は、ドメインをクロスサイトリクエストフォージェリ (CSRF) の攻撃から守るのに役立ちます。詳細については、Mozilla 開発者ネットワークの「Set-Cookie」ページを参照してください。

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

注記

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

クリーンアップ

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

Elastic Beanstalk 環境を終了するには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. [Actions] (アクション)、[Terminate environment] (環境の終了) の順に選択します。

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

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

次のステップ

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

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

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

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