このチュートリアルでは、.NET ウェブ アプリケーションを Compute Engine にデプロイする方法について説明します。
このチュートリアルは、Microsoft .NET と Compute Engine に関する基本的な知識があるデベロッパーと DevOps エンジニアを対象としています。
目標
.NET 6 を使用し、Linux で実行される ASP.NET Core ウェブ アプリケーションを 1 つの Compute Engine インスタンスにデプロイします。
このチュートリアルでは、目的を達成するために次のタスクを行う方法について説明します。
- Compute Engine VM をデプロイする
- 負荷分散を設定する
- ASP.NET アプリケーションをデプロイする
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
Compute Engine VM をデプロイする
このセクションでは、Compute Engine で Microsoft インターネット インフォメーション サービス(IIS)ウェブサーバーを実行する Linux VM または Windows Server VM を作成する方法について説明します。
プロジェクト ID と Compute Engine ゾーンのデフォルト値を設定します。時間を節約できます。
gcloud config set project PROJECT_ID gcloud config set compute/zone ZONE
以下を置き換えます。
PROJECT_ID
は、Google Cloud プロジェクトの ID です。ZONE
は、リソースの作成に使用するゾーンの名前に置き換えます。選択するゾーンが不明な場合は、地理的に最も近いゾーンを使用してください。
次に例を示します。
gcloud config set project test-project-12345 gcloud config set compute/zone us-central1-a
VM インスタンスを作成します。
Linux VM を作成するには、次の手順を行います。
VM インスタンスの起動スクリプトを作成します。このスクリプトは VM の初期化中に実行され、.NET ランタイムをインストールします。
"if ! dpkg-query -W aspnetcore-runtime-6.0 then curl https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb sudo apt-get update && sudo apt-get install -y aspnetcore-runtime-6.0 fi " | Out-File -Encoding ASCII startup.sh
VM インスタンスを作成し、起動スクリプトとして
startup.sh
を使用します。gcloud compute instances create clouddemo-1 ` --image-family debian-11 ` --image-project debian-cloud ` --machine-type n1-standard-2 ` --boot-disk-type pd-ssd ` --tags loadbalancer-backend ` --metadata-from-file startup-script=startup.sh
シリアルポートの出力を表示して、VM の初期化プロセスをモニタリングします。
gcloud compute instances tail-serial-port-output clouddemo-1
Instance setup finished
またはStartup finished
という出力が表示されるまで 5 分ほど待ちます。表示されたら Ctrl+C キーを押します。この時点で、前提要件のインストールは完了し、VM インスタンスを使用できるようになります。
負荷分散を設定する
ASP.NET アプリをインターネット経由で利用できるようにするには、HTTPS ロードバランサを使用する必要があります。VM インスタンスをロードバランサに関連付けるには、インスタンス グループを作成して、このインスタンス グループをロードバランサに割り当てます。
非マネージド インスタンス グループを作成して、VM インスタンスを追加します。
gcloud compute instance-groups unmanaged create clouddemo-1 gcloud compute instance-groups unmanaged add-instances clouddemo-1 --instances clouddemo-1
ウェブサーバーが実行されているかどうかを確認するヘルスチェックを作成します。
gcloud compute http-health-checks create clouddemo-health ` --check-interval 5s ` --unhealthy-threshold 2 ` --request-path / ` --port 5000 gcloud compute instance-groups set-named-ports clouddemo-1 --named-ports=http:5000
HTTP ヘルスチェックと前の手順で作成したインスタンス グループを使用するロードバランサ バックエンド サービスを作成します。
gcloud compute backend-services create clouddemo-backend ` --http-health-checks clouddemo-health ` --port-name http ` --protocol HTTP ` --global gcloud compute backend-services add-backend clouddemo-backend ` --instance-group clouddemo-1 ` --global ` --instance-group-zone $(gcloud config get-value compute/zone)
ロードバランサ用のフロントエンドを作成します。
gcloud compute url-maps create clouddemo-map --default-service clouddemo-backend gcloud compute target-http-proxies create clouddemo-proxy --url-map clouddemo-map gcloud compute forwarding-rules create clouddemo-frontend --global --target-http-proxy clouddemo-proxy --ports 80
loadbalancer-backend
タグでアノテーションが設定されたインスタンスに HTTP リクエストを送信することをロードバランサに許可するファイアウォール ルールを作成します。gcloud compute firewall-rules create loadbalancer-backend ` --source-ranges "130.211.0.0/22,35.191.0.0/16" ` --target-tags loadbalancer-backend ` --allow tcp:80,tcp:5000
ロードバランサの IP アドレスを調べます。
gcloud compute forwarding-rules describe clouddemo-frontend --global --format "value(IPAddress)"
IP アドレスはメモしておいてください。書き留めておきます。
ASP.NET アプリケーションをデプロイする
PowerShell コンソールを開きます。
GitHub からサンプル リポジトリをダウンロードして解凍するか、サンプル リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
デプロイ パッケージをビルドします。
サンプル アプリケーションが含まれているディレクトリに切り替えます。
cd dotnet-docs-samples\applications\clouddemo\netcore
ソリューションをビルドします。
dotnet publish -c Release
デプロイ パッケージを VM にコピーします。
publish
フォルダの内容を VM のホーム ディレクトリにコピーします。gcloud compute scp --recurse CloudDemo.MvcCore\bin\Release\net6.0\publish clouddemo-1:
VM で
/var/www/clouddemo
フォルダを作成し、アプリケーション ファイルをこのフォルダにコピーします。sudo mkdir -p /var/www/clouddemo sudo chown -R www-data:www-data /var/www/clouddemo sudo cp -r publish/* /var/www/clouddemo
アプリケーションを systemd ユニットとして登録します。
cat <<EOF > kestrel-clouddemo.service [Unit] Description=Cloud Demo ASP.NET app [Service] WorkingDirectory=/var/www/clouddemo ExecStart=/usr/bin/dotnet /var/www/clouddemo/CloudDemo.MvcCore.dll Restart=always Environment=ASPNETCORE_ENVIRONMENT=Production Environment=ASPNETCORE_URLS=http://0.0.0.0:5000 [Install] WantedBy=multi-user.target EOF sudo mv kestrel-clouddemo.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl start kestrel-clouddemo
ローカル コンピュータで、ウェブブラウザを開き、次のアドレスに移動します。
http://
LOADBALANCER_IP
/LOADBALANCER_IP
は、ロードバランサのデプロイ後に取得した IP アドレスに置き換えます。デモ アプリケーションと「このアプリは Compute Engine で実行しています」というタイトルが表示されます。
クリーンアップ
チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。以下のセクションで、リソースを削除または無効にする方法を説明します。
プロジェクトの削除
課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
リソースを個別に削除する
プロジェクト用に作成したすべてのリソース(インスタンス グループ、ヘルスチェック、バックエンド サービス、HTTP プロキシ、転送ルールなど)は、個別に削除する必要があります。これらのリソースをすべて削除するまで、VM インスタンスを削除することはできません。
次のステップ
- Google インフラストラクチャでの仮想マシンの作成と実行について詳細を確認する。
- Google Cloud アーキテクチャ フレームワークのベスト プラクティスを確認します。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud Architecture Center をご覧ください。