ASP.NET アプリケーションを Compute Engine にデプロイする


このチュートリアルでは、.NET ウェブ アプリケーションを Compute Engine にデプロイする方法について説明します。

このチュートリアルは、Microsoft .NET と Compute Engine に関する基本的な知識があるデベロッパーと DevOps エンジニアを対象としています。

目標

.NET 6 を使用し、Linux で実行される ASP.NET Core ウェブ アプリケーションを 1 つの Compute Engine インスタンスにデプロイします。

このチュートリアルでは、目的を達成するために次のタスクを行う方法について説明します。

  • Compute Engine VM をデプロイする
  • 負荷分散を設定する
  • ASP.NET アプリケーションをデプロイする

費用

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API.

    Enable the API

Compute Engine VM をデプロイする

このセクションでは、Compute Engine で Microsoft インターネット インフォメーション サービス(IIS)ウェブサーバーを実行する Linux VM または Windows Server VM を作成する方法について説明します。

  1. プロジェクト 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
    
  2. VM インスタンスを作成します。

    Linux VM を作成するには、次の手順を行います。

    1. 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
      
    2. 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
      
  3. シリアルポートの出力を表示して、VM の初期化プロセスをモニタリングします。

    gcloud compute instances tail-serial-port-output clouddemo-1
    

    Instance setup finished または Startup finished という出力が表示されるまで 5 分ほど待ちます。表示されたら Ctrl+C キーを押します。この時点で、前提要件のインストールは完了し、VM インスタンスを使用できるようになります。

負荷分散を設定する

ASP.NET アプリをインターネット経由で利用できるようにするには、HTTPS ロードバランサを使用する必要があります。VM インスタンスをロードバランサに関連付けるには、インスタンス グループを作成して、このインスタンス グループをロードバランサに割り当てます。

  1. 非マネージド インスタンス グループを作成して、VM インスタンスを追加します。

    gcloud compute instance-groups unmanaged create clouddemo-1
    gcloud compute instance-groups unmanaged add-instances clouddemo-1 --instances clouddemo-1
    
  2. ウェブサーバーが実行されているかどうかを確認するヘルスチェックを作成します。

    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
    
  3. 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)
    
  4. ロードバランサ用のフロントエンドを作成します。

    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
    
  5. 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
    
  6. ロードバランサの IP アドレスを調べます。

    gcloud compute forwarding-rules describe clouddemo-frontend --global --format "value(IPAddress)"
    

    IP アドレスはメモしておいてください。書き留めておきます。

ASP.NET アプリケーションをデプロイする

  1. PowerShell コンソールを開きます。

  2. GitHub からサンプル リポジトリをダウンロードして解凍するか、サンプル リポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    
  3. デプロイ パッケージをビルドします。

    1. サンプル アプリケーションが含まれているディレクトリに切り替えます。

      cd dotnet-docs-samples\applications\clouddemo\netcore
      
    2. ソリューションをビルドします。

      dotnet publish -c Release
      
  4. デプロイ パッケージを VM にコピーします。

    1. publish フォルダの内容を VM のホーム ディレクトリにコピーします。

      gcloud compute scp --recurse CloudDemo.MvcCore\bin\Release\net6.0\publish clouddemo-1:
      
    2. SSH を使用して VM に接続します

    3. 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
      
    4. アプリケーションを 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
      
  5. ローカル コンピュータで、ウェブブラウザを開き、次のアドレスに移動します。

    http://LOADBALANCER_IP/
    

    LOADBALANCER_IP は、ロードバランサのデプロイ後に取得した IP アドレスに置き換えます。

    デモ アプリケーションと「このアプリは Compute Engine で実行しています」というタイトルが表示されます。

クリーンアップ

チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。以下のセクションで、リソースを削除または無効にする方法を説明します。

プロジェクトの削除

課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

リソースを個別に削除する

プロジェクト用に作成したすべてのリソース(インスタンス グループ、ヘルスチェック、バックエンド サービス、HTTP プロキシ、転送ルールなど)は、個別に削除する必要があります。これらのリソースをすべて削除するまで、VM インスタンスを削除することはできません。

次のステップ