1. 概要
ASP.NET Core は、インターネットに接続された最新のクラウドベースのアプリケーションを C# プログラミング言語を使用してビルドするための、オープンソースの新しいクロスプラットフォーム フレームワークです。
このラボでは、シンプルな ASP.NET Core アプリを App Engine フレキシブル環境にデプロイします。この Codelab は、Google Cloud Shell から ASP.NET Core アプリをビルドして起動する Codelab をベースに作成されています。このラボを実行する前に、そのラボを先に完了することをおすすめします。
App Engine アプリケーションは構築やメンテナンスが簡単で、トラフィックやデータ ストレージの増加に応じたスケーリングも容易です。App Engine 環境では、サーバー管理の手間がかかりません。必要な作業は、アプリケーションをアップロードすることだけです。
App Engine アプリケーションは、受信したトラフィック量に応じて自動的にスケールします。App Engine は負荷分散やマイクロサービス、認証、SQL および NoSQL データベース、Memcache、トラフィック分割、ロギング、検索、バージョニング、ロールアウトとロールバック、セキュリティ スキャニングをネイティブでサポートしており、どれも高度にカスタマイズすることができます。
App Engine 環境にはスタンダード環境とフレキシブル環境があり、C#、Java、Python、PHP、Node.js、Go をはじめとするプログラミング言語のホストをサポートしています。2 つの環境はそれぞれに固有の長所があるため、ユーザーは自身のアプリケーションの特徴に応じて柔軟に選ぶことができます。詳しくは、App Engine 環境の選択をご覧ください。
学習内容
- シンプルな ASP.NET Core アプリを Docker コンテナとしてパッケージ化する
- シンプルな ASP.NET Core アプリを App Engine にデプロイする
必要なもの
このチュートリアルの利用方法をお選びください。
Google Cloud Platform のご利用経験について、いずれに該当されますか?
2. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。



- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列で、いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud Console により一意の文字列が自動生成されます(通常は内容を意識する必要はありません)。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常、プロジェクト ID は「
PROJECT_ID」の形式です)。好みの文字列でない場合は、別のランダムな ID を生成するか、独自の ID を試用して利用可能であるかどうかを確認することができます。プロジェクトの作成後、ID は「フリーズ」されます。 - 3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud Console で課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルを終了した後に課金が発生しないようにリソースをシャットダウンするには、Codelab の最後にある「クリーンアップ」の手順を行います。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell の起動
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
Cloud Shell をアクティブにする
- Cloud Console で、[Cloud Shell をアクティブにする]
をクリックします。

Cloud Shell を初めて起動した場合は、その内容を説明する画面が(スクロールしなければ見えない位置に)表示されます。その場合は、[続行] をクリックしてください(以後表示されなくなります)。この中間画面は次のようになります。

すぐにプロビジョニングが実行され、Cloud Shell に接続されます。

この仮想マシンには、必要な開発ツールがすべて用意されています。仮想マシンは Google Cloud で稼働し、永続的なホーム ディレクトリが 5 GB 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。このコードラボでの作業のほとんどは、ブラウザまたは Chromebook から実行できます。
Cloud Shell に接続すると、すでに認証は完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。
- Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list
コマンド出力
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
コマンド出力
[core] project = <PROJECT_ID>
上記のようになっていない場合は、次のコマンドで設定できます。
gcloud config set project <PROJECT_ID>
コマンド出力
Updated property [core/project].
3. Cloud Shell で ASP.NET Core アプリを作成する
Cloud Shell のプロンプトで、インストールされている .NET SDK を一覧表示して、dotnet コマンドライン ツールがすでにインストールされていることを確認できます。
dotnet --list-sdks
次に、ターゲット フレームワークが netcoreapp3.1 の新しいスケルトン ASP.NET Core ウェブアプリを作成します。
dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1
これでプロジェクトが作成され、そのプロジェクトの依存関係が復元されます。次のようなメッセージが表示されます。
Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.
Restore succeeded.
4. ASP.NET Core アプリを実行する
アプリを実行する準備がほぼ整いました。アプリフォルダに移動します。
cd HelloWorldAspNetCore
最後に、アプリを実行します。
dotnet run --urls=http://localhost:8080
アプリケーションがポート 8080 をリッスンします。
Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.
アプリが実行されていることを確認するには、右上にある「ウェブでプレビュー」ボタンをクリックし、[ポート 8080 でプレビュー] を選択します。

デフォルトの ASP.NET Core ウェブページが表示されます。

アプリが実行されていることを確認したら、Ctrl+C キーを押してアプリをシャットダウンします。
5. ASP.NET Core アプリを公開する
次の dotnet publish コマンドを実行し、アプリを公開して自己完結型 DLL を取得します。
dotnet publish -c Release
publish を実行すると、プロセスの最後にメッセージが表示され、公開済みの DLL を取得できます。
...
HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.dll
HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.Views.dll
HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/publish/
6. App Engine フレキシブル環境用に app.yaml を作成する
app.yaml ファイルには、アプリを App Engine(ここでは App Engine フレキシブル環境)にデプロイする方法を記述します。
まず、publish フォルダに移動します。これは bin/Release フォルダに配置する必要がありますが、正確なパスは .NET のバージョンによって異なります。
cd bin/Release/netcoreapp3.1/publish/
publish フォルダ内に app.yaml ファイルを作成します。
cat <<EOT >> app.yaml
env: flex
runtime: aspnetcore
EOT
app.yaml ファイルで環境が flex、ランタイムが aspnetcore として指定されていることに注意してください。
7. App Engine フレキシブル環境にデプロイする
これで、gcloud を使用して App Engine フレキシブル環境にアプリをデプロイする準備が整いました。publish ディレクトリ内で、次のコマンドを実行します。
gcloud app deploy --version v0
デプロイ時に、アプリケーションのリージョンを選択するよう求められることがあります。アプリを実行するリージョンを選択します。
Please choose a region for your application. After choosing a region,
you cannot change it. Which region would you like to choose?
[1] europe-west (supports standard and flexible)
[2] us-central (supports standard and flexible)
[3] us-east1 (supports standard and flexible)
[4] asia-northeast1 (supports standard and flexible)
[5] cancel
これにより、クラウドにアプリケーションのイメージが作成され、そのイメージが Google Container Registry に保存されて App Engine にデプロイされます。デプロイ中に、コンテナ イメージがビルドされていることを確認できます。
Operation completed over 1 objects/571.8 KiB.
BUILD
Step #0: Pulling image: gcr.io/gcp-runtimes/aspnetcorebuild@sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb
Step #0: sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb: Pulling from gcp-runtimes/aspnetcorebuild
最終的に、アプリがデプロイされたことが表示されます。
...
Deployed service [default] to [https://<project-id>.appspot.com]
アプリケーションをデプロイしたら、ウェブブラウザで URL http://<project-id>.appspot.com を開いてアクセスします。
デフォルトの ASP.NET Core ウェブページが新しいタブに表示されます。

クラウドで作成されたコンテナ イメージを確認することもできます。Cloud コンソールで、[Container Registry] > [イメージ] に移動します。appengine フォルダに、アプリケーションのイメージが表示されます。

8. 新しいバージョンのサービスをデプロイする
本番環境にデプロイしたアプリケーションは、いずれかの時点でバグ修正や追加機能の実装が必要になります。App Engine を使えば、ユーザーに影響を与えることなく、新しいバージョンを本番環境にデプロイできます。
まず、アプリケーションを修正しましょう。Cloud Shell からコードエディタを開きます。

HelloWorldAspNetCore の Views/Home フォルダにある Index.cshtml に移動し、デフォルトのメッセージを次のように更新します。
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud Platform!
変更を保存して Cloud Shell に戻ります。HelloWorldAspNetCore, 内でアプリを公開して自己完結型 DLL を取得します。
dotnet publish -c Release
publish ディレクトリに移動します。
cd bin/Release/netcoreapp3.1/publish/
アプリの新しいバージョン(ここでは v1)をデプロイできます。
gcloud app deploy --version v1
デプロイが完了したら、Google Cloud コンソールの App Engine バージョン セクションに移動し、アプリの新しいバージョンが新しいメッセージですべてのトラフィックを処理していることを確認します。

9. ダッシュボードとトラフィック分割
App Engine の [ダッシュボード] セクションには、レイテンシや CPU など、アプリケーションのダッシュボードがいくつか表示されます。これらはご自身で確認してください。

[バージョン] セクションには、アプリのデプロイされたバージョンが表示されます。[トラフィック分割] セクションでは、さまざまなバージョン間でトラフィックを分割できます。2 つのバージョン間でトラフィックを分割してみましょう。

10. 完了
Cleanup
費用を節約し、クラウドのマナーを守るために、アプリをシャットダウンします。
App Engine の [バージョン] セクションに移動します。

バージョンを選択して停止します。

バージョンが停止すると、バッキング インスタンスが削除され、インスタンス数が 0 になります。

学習した内容
ここでは、ASP.NET Core アプリを作成して Docker コンテナとしてパッケージ化し、このコンテナを Google App Engine フレキシブル環境にデプロイしました。
- シンプルな ASP.NET Core アプリを Docker コンテナとしてパッケージ化する
- シンプルな ASP.NET Core アプリを App Engine にデプロイする
次のステップ
- Google Cloud Platform 上の Windows の詳細を学ぶ
- Google Cloud Platform での .NET の詳細を学ぶ
- Google Cloud Platform 上の SQL サーバーの詳細を学ぶ
- Cloud Tools for Visual Studio の使い方を学ぶ
- Cloud Tools for PowerShell の使い方を学ぶ
ライセンス
この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。