ASP.NET-Anwendung in Compute Engine bereitstellen

In dieser Anleitung wird beschrieben, wie Sie eine .NET-Webanwendung in Compute Engine bereitstellen.

Diese Anleitung richtet sich an Entwickler und DevOps-Entwickler mit grundlegenden Kenntnissen in Microsoft .NET und Compute Engine.

Ziele

Eine ASP.NET Core-Webanwendung, die .NET 6 verwendet und unter Linux ausgeführt wird, auf einer einzelnen Compute Engine-Instanz bereitstellen.

In dieser Anleitung erfahren Sie, wie Sie die folgenden Aufgaben ausführen, um Ihr Ziel zu erreichen:

  • Compute Engine-VM bereitstellen
  • Load-Balancing einrichten
  • ASP.NET-Anwendung bereitstellen

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Verwenden Sie den Preisrechner.

Neuen Google Cloud Nutzern vonsteht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistung unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

Compute Engine-VM bereitstellen

In diesem Abschnitt erfahren Sie, wie Sie eine Linux-VM oder eine Windows Server-VM erstellen, auf der Microsoft Internet Information Services-Webserver (IIS) in Compute Engine ausgeführt werden.

  1. Legen Sie Standardwerte für Ihre Projekt-ID und Compute Engine-Zone fest. So sparen Sie Zeit.

    gcloud config set project PROJECT_ID
    gcloud config set compute/zone ZONE
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID durch die ID Ihres Google Cloud Projekts.
    • ZONE durch den Namen der Zone, die Sie zum Erstellen von Ressourcen verwenden möchten. Wenn Sie nicht sicher sind, welche Zone Sie auswählen sollen, verwenden Sie die Zone, die geografisch am nächsten liegt.

    Beispiel:

    gcloud config set project test-project-12345
    gcloud config set compute/zone us-central1-a
    
  2. Erstellen Sie eine VM-Instanz:

    So erstellen Sie eine Linux-VM:

    1. Erstellen Sie ein Startskript für die VM-Instanz. Das Skript wird während der VM-Initialisierung ausgeführt und installiert die .NET-Laufzeit:

      "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. Erstellen Sie die VM-Instanz und verwenden Sie startup.sh als Startskript:

      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. Überwachen Sie den Initialisierungsprozess der VM. Rufen Sie dazu die Ausgabe des seriellen Ports auf:

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

    Warten Sie etwa 5 Minuten, bis die Ausgabe Instance setup finished oder Startup finished angezeigt wird, und drücken Sie dann Strg + C. Jetzt ist die Installation der Voraussetzungen abgeschlossen und die VM-Instanz kann verwendet werden.

Load-Balancing einrichten

Damit Ihre ASP.NET-Anwendung über das Internet verfügbar ist, müssen Sie einen HTTPS-Load-Balancer verwenden. Um Ihre VM-Instanz mit dem Load-Balancer zu verknüpfen, erstellen Sie eine Instanzgruppe und weisen Sie diese Instanzgruppe dem Load-Balancer zu:

  1. Erstellen Sie eine nicht verwaltete Instanzgruppe und fügen Sie die VM-Instanz hinzu:

    gcloud compute instance-groups unmanaged create clouddemo-1
    gcloud compute instance-groups unmanaged add-instances clouddemo-1 --instances clouddemo-1
    
  2. Erstellen Sie eine Systemdiagnose, mit der geprüft wird, ob der Webserver ausgeführt wird:

    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. Erstellen Sie einen Back-End-Dienst für den Load-Balancer, der die HTTP-Systemdiagnose und die zuvor erstellte Instanzgruppe verwendet:

    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. Erstellen Sie ein Frontend für den Load-Balancer:

    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. Erstellen Sie eine Firewallregel, die es dem Load-Balancer erlaubt, HTTP-Anfragen an Instanzen zu senden, die mit dem loadbalancer-backend Tag annotiert sind.

    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. Suchen Sie die IP-Adresse des Load-Balancers:

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

    Notieren Sie sich die IP-Adresse. Sie benötigen sie später noch einmal.

ASP.NET-Anwendung bereitstellen

  1. Öffnen Sie eine PowerShell-Konsole.

  2. Laden Sie das Beispiel-Repository aus GitHub herunter und entpacken Sie es oder klonen Sie es:

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    
  3. Erstellen Sie das Bereitstellungspaket:

    1. Wechseln Sie zu dem Verzeichnis, das die Beispielanwendung enthält:

      cd dotnet-docs-samples\applications\clouddemo\netcore
      
    2. Erstellen Sie die Lösung:

      dotnet publish -c Release
      
  4. Kopieren Sie das Bereitstellungspaket auf die VM:

    1. Kopieren Sie den Inhalt des Ordners publish in Ihr Basisverzeichnis auf der VM:

      gcloud compute scp --recurse CloudDemo.MvcCore\bin\Release\net6.0\publish clouddemo-1:
      
    2. Stellen Sie eine SSH-Verbindung zur VM her.

    3. Erstellen Sie auf der VM einen Ordner /var/www/clouddemo und kopieren Sie die Anwendungsdateien in diesen Ordner:

      sudo mkdir -p /var/www/clouddemo
      sudo chown -R www-data:www-data /var/www/clouddemo
      sudo cp -r publish/* /var/www/clouddemo
      
    4. Registrieren Sie die Anwendung als systemd-Einheit:

      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. Öffnen Sie auf Ihrem lokalen Computer einen Webbrowser und rufen Sie die folgende Adresse auf:

    http://LOADBALANCER_IP/
    

    Ersetzen Sie LOADBALANCER_IP durch die IP-Adresse, die Sie nach der Bereitstellung des Load-Balancers erhalten haben.

    Jetzt sehen Sie die Demoanwendung und den Titel This app is running on Compute Engine.

Bereinigen

Nachdem Sie die Anleitung abgeschlossen haben, können Sie die erstellten Ressourcen bereinigen, damit sie keine Kontingente mehr nutzen und keine Gebühren mehr anfallen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.

    Projekt löschen: Google Cloud

    gcloud projects delete PROJECT_ID

Einzelne Ressourcen löschen

Sie müssen alle Ressourcen, die für das Projekt erstellt wurden, einzeln löschen (z. B. Instanzgruppen, Systemdiagnosen, Backend-Dienste, HTTP-Proxy und Weiterleitungsregeln). Sie können die VM-Instanzen erst löschen, wenn Sie alle diese Ressourcen gelöscht haben.

Nächste Schritte