この投稿では、ASP.NET Core アプリを App Engine flexible にデプロイして実行する方法を紹介します。説明で使用する ASP.NET Core アプリは非常にシンプルなものです。なお、Google Cloud Platform(GCP)API を使った ASP.NET アプリの作成方法については、
こちらのドキュメントをご覧ください。
もちろん、ASP.NET Core を使用するには、あらかじめ
.NET Core ランタイムと Visual Studio ツールに加え、
Bower をインストールしておく必要があります。Bower は、サンプルの ASP.NET Core アプリ プロジェクトがクライアント サイドの依存関係を設定するために使用されます。
それでは、まず Visual Studio で新しい ASP.NET Core アプリを作成しましょう。Visual Studio を起動し、“ファイル -> 新規作成 -> プロジェクト” の順に選択します。ダイアログの左ペインで下図のように “Web” を選択し、中央のリストで “ASP.NET Core Web Application(.NET Core)” テンプレートを選択します。
アプリを “DemoFlexApp” という名前で Visual Studio のデフォルトの “Projects” ディレクトリに保存します。次のダイアログで “Web Application” を選択し、“OK” をクリックします。
これでアプリが生成されます。F5 キーを押してローカルで試してみましょう。アプリがビルドされ、実行されてブラウザ ウィンドウに表示されます。表示されたらブラウザを閉じ、デバッグ セッションを停止して、アプリを停止します。
ステップ 2 : Docker コンテナとしてパッケージ
次のステップでは、作成したアプリを App Engine flexible で実行する準備をしましょう。最初に、コンテナとその内容を定義します。Docker をインストールする必要はありませんので、ご心配なく。App Engine flexible はデプロイ プロセスの一環として、Docker イメージをリモートでビルドしてくれます。
ここではコマンドラインから作業します。“Windows” キーを押しながら “R” キーを押し、ダイアログで “cmd.exe” とタイプして、新しいコマンドライン ウィンドウを開きます。
そして、ステップ 1 で作成したプロジェクトを含むディレクトリに移動してください。プロジェクトのパスを取得するには、Visual Studio のソリューション エクスプローラーでプロジェクトを右クリックし、“Open Folder in File Explorer(エクスプローラーでフォルダーを開く)” オプションを選びます。
エクスプローラー ウィンドウからプロジェクトのパスをコピーし、コマンドライン ウィンドウに貼り付けます。
まず、アプリの Docker イメージの内容を 1 つのディレクトリに作成します。ディレクトリの中には、アプリのすべてのパッケージ、ページ、クライアント サイド スクリプトが含まれます。.NET CLI がこのディレクトリを作成し、アプリを “発行” します。そのためのコマンドは次のとおりです。
dotnet publish -c Release
アプリは Release 構成でデフォルトの publish ディレクトリに発行されます。アプリの発行プロセスでは .NET CLI がすべての依存関係を解決し、他のすべてのファイルも含めてこの “発行先” ディレクトリにまとめます。ちなみに、このディレクトリのことを Microsoft は
.NET Core Portable App と呼んでいます。
発行先ディレクトリは、アプリを構成するすべてのファイルを含み、.NET Core がサポートするあらゆるプラットフォームでアプリを実行するのに利用できます。以下のコマンドにより、このディレクトリからアプリを実行できます。
cd bin\Release\netcoreapp1.0\publish
dotnet DemoFlexApp.dll
このコマンドを実行するときは、すべてのリソースが見つかるように、必ず発行先ディレクトリをカレント ディレクトリにしておきます。
コンテナとその内容を定義したら、次の作業は App Engine flexible にデプロイするアプリを構成することです。そのためには以下の 2 つのファイルが必要になります。
- Dockerfile : アプリ ファイルを Docker コンテナにパッケージする方法を記述します。
- app.yaml : Google Cloud SDK ツールにアプリのデプロイ方法を知らせます。
アプリのデプロイは、上で作成した発行先ディレクトリから行うことになります。
発行先ディレクトリに “Dockerfile” という空のファイルを作成し、以下の行をコピーして貼り付け、保存します。
FROM microsoft/dotnet:1.0.1-core
COPY . /app
WORKDIR /app
EXPOSE 8080
ENV ASPNETCORE_URLS=http://*:8080
ENTRYPOINT ["dotnet", "DemoFlexApp.dll"]
Dockerfile は、Docker イメージの内容を記述したものです。まず既存イメージを指定し、続いてファイルの追加など、既存イメージに対する変更を記述していきます。
私たちのリポジトリの Dockerfile では、最初に
Microsoft の公式イメージを指定します。このイメージは、.NET Core アプリを実行するようにあらかじめ構成されています。さらに、このディレクトリからアプリを実行するのに必要なアプリ ファイルやツールを追加しています。
この Dockerfile に含まれる 1 つの重要な構成が、アプリが受信トラフィックをリッスンするポートを、
App Engine flexible の要件に従って 8080 に設定していることです。これは、環境変数
ASPNETCORE_URLS で設定されています。ASP.NET Core アプリはこの環境変数を使って、リッスンするポートを決めています。
一方、app.yaml は、アプリを App Engine(今回は App Engine flexible)にデプロイする方法を記述したものです。以下は、アプリを App Engine flexible で実行するうえで必要最小限の app.yaml ファイルです。カスタム ランタイムと flexible environment を指定しています。
発行先ディレクトリに “app.yaml” という新しいファイルを作成し、以下の内容をコピーして貼り付け、保存します。
runtime: custom
vm: true
ステップ 3 : App Engine flexible にデプロイ
Dockerfile と app.yaml を発行先ディレクトリに保存したら、アプリを App Engine flexible にデプロイする準備は完了です。
アプリのデプロイには Google Cloud SDK を使います。
こちらの手順に従って Google Cloud SDK をマシンに完全にセットアップしてください。課金を有効にした
Google Cloud Platform プロジェクトも必要になります。
アプリを構成し、アプリをデプロイするプロジェクトを選択したら、いよいよ App Engine flexible へのデプロイです。デプロイするには以下のコマンドを実行します。
gcloud app deploy app.yaml
このコマンドは、完了するまでしばらく時間がかかります。最初は特にそうです。すべてのセットアップを実行しなければならないからです。コマンドが完了したら、新たにデプロイされたアプリをブラウザで表示してみましょう。
gcloud app browse
表示されましたね! 以上で完了です。ASP.NET Core アプリを Docker コンテナにパッケージし、App Engine flexible にデプロイしてみました。多くの ASP.NET アプリが App Engine で実行されることを、私たちは楽しみにしています。
* この投稿は米国時間 10 月 5 日、Software Developer である Ivan Naranjo によって投稿されたもの(投稿はこちら)の抄訳です。
- Posted by Ivan Naranjo, Software Developer