このチュートリアルでは、.NET ウェブ アプリケーションを Compute Engine にデプロイする方法について説明します。
このチュートリアルは、Microsoft .NET と Compute Engine に関する基本的な知識があるデベロッパーと DevOps エンジニアを対象としています。
目標
.NET 6 を使用し、Linux で動作する ASP.NET Core ウェブ アプリケーションを単一の Compute Engine インスタンスにデプロイします。
このチュートリアルでは、目的を達成するために次のタスクを行う方法について説明します。
- Compute Engine VM をデプロイする
- 負荷分散を設定する
- ASP.NET アプリケーションをデプロイする
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Compute Engine VM をデプロイする
このセクションでは、Linux VM、または Microsoft Internet Information Services(IIS)ウェブサーバーを実行する Windows Server VM を Compute Engine で作成する方法について説明します。
プロジェクト 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.shVM インスタンスを作成し、起動スクリプトとして
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:5000HTTP ヘルスチェックと前の手順で作成したインスタンス グループを使用するロードバランサ バックエンド サービスを作成します。
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 で実行されています」というタイトルが表示されます。
クリーンアップ
チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。以下のセクションで、リソースを削除または無効にする方法を説明します。
プロジェクトの削除
課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
Google Cloud プロジェクトを削除します。
gcloud projects delete PROJECT_ID
リソースを個別に削除する
プロジェクト用に作成したすべてのリソース(インスタンス グループ、ヘルスチェック、バックエンド サービス、HTTP プロキシ、転送ルールなど)は、個別に削除する必要があります。これらのリソースをすべて削除するまで、VM インスタンスを削除することはできません。
次のステップ
- 詳しくは、Google インフラストラクチャ上で仮想マシンを作成して実行するをご覧ください。
- Google Cloud Well-Architected Framework のベスト プラクティスを確認する。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。