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 のご利用経験について、いずれに該当されますか?
<ph type="x-smartling-placeholder">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 >Images フォルダ内に、アプリケーションの画像が表示されます。
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 などに関するアプリケーションのダッシュボードが多数表示されます。ご自身で確認してみてください。
[Versions] セクションには、デプロイされたアプリのバージョンが表示され、[Traffic Splitting] セクションで異なるバージョンにトラフィックを分割できます。トラフィックを 2 つのバージョンに分割します。
10. 完了
クリーンアップ
今こそ、アプリをシャットダウンして、費用を抑え、クラウド全般に精通するべきです。
App Engine のバージョン セクションに移動します。
バージョンを選択して停止します。
バージョンが停止すると、バッキング インスタンスが削除され、インスタンス数がゼロにプルダウン表示されます。
学習した内容
ここでは、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 汎用ライセンスにより使用許諾されています。