Sitzungen mit Cloud Firestore verarbeiten


Viele Anwendungen benötigen eine Sitzungsverwaltung zur Authentifizierung und für Nutzereinstellungen. ASP.NET Core wird mit Middleware geliefert, um Sitzungen in einem verteilten Cache zu speichern.

Der standardmäßig verteilte Cache von ASP.NET wird überhaupt nicht verteilt. Sitzungsdaten werden im Arbeitsspeicher des Webservers gespeichert. Wenn nur ein Webserver eine Website bereitstellt, ist diese Strategie in Ordnung. Wenn jedoch viele Webserver eine Website bedienen, können die Nutzer der Website Fehler und verlorene Daten erhalten.

Um Fehler und Datenverlust zu vermeiden, muss eine ASP.NET-Anwendung einen verteilten Cache verwenden, in dem Daten in einem persistenten Datenspeicher gespeichert werden. In dieser Anleitung erfahren Sie, wie Sie Sitzungen in Cloud Run verwalten, indem Sie sie in Firestore speichern und Cookies mit dem Cloud Key Management Service verschlüsseln.

Lernziele

  • Stellen Sie die Anwendung in Cloud Run bereit.

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. Neuen Google Cloud-Nutzern steht 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.

Hinweise

  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. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Enable the Firestore, Cloud Run, Cloud Key Management Service, and Cloud Storage APIs.

    Enable the APIs

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

    Go to project selector

  6. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  7. Enable the Firestore, Cloud Run, Cloud Key Management Service, and Cloud Storage APIs.

    Enable the APIs

  8. Mit den folgenden Schritten können Sie eine Firebase-Datenbank im nativen Modus erstellen:
    1. Rufen Sie in der Google Cloud Console die Seite Firestore-Betrachter auf.
      Zur Firestore-Seite
    2. Klicken Sie im Bildschirm Firestore-Modus auswählen auf Nativen Modus auswähen.
    3. Wählen Sie einen Standort für Ihre Firestore-Datenbank aus. Die Speicherorteinstellung ist der standardmäßige Speicherort für Google Cloud-Ressourcen in Ihrem Google Cloud-Projekt. Dieser Speicherort wird für Google Cloud-Dienste in Ihrem Google Cloud-Projekt verwendet, die eine Speicherorteinstellung benötigen. Dabei geht es speziell um Ihren standardmäßigen Cloud Storage-Bucket und Ihre App Engine-Anwendung.
    4. Klicken Sie auf Datenbank erstellen.
  9. Öffnen Sie den Quellcode der Anwendung in Cloud Shell.
    Zu Cloud Shell

    Cloud Shell bietet Ihnen direkt über den Browser Befehlszeilenzugriff auf Ihre Google Cloud-Ressourcen.

  10. Klicken Sie auf Weiter, um den Beispielcode herunterzuladen und ins Anwendungsverzeichnis zu wechseln.
  11. Konfigurieren Sie in Cloud Shell die gcloud CLI für die Verwendung Ihres neuen Google Cloud-Projekts:

    # Configure gcloud for your project
    gcloud config set project PROJECT_ID

    Ersetzen Sie PROJECT_ID durch die Google Cloud-Projekt-ID, die Sie mit der Google Cloud Console erstellt haben.

    Die Google Cloud CLI ist die primäre Methode zur Interaktion mit Ihren Google Cloud-Ressourcen über die Befehlszeile. In dieser Anleitung verwenden Sie die gcloud CLI, um Ihre Anwendung bereitzustellen und zu überwachen.

Quellcode untersuchen

Das folgende Diagramm zeigt, wie Firestore Sitzungen für die Cloud Run-Anwendung verarbeitet.

Diagramm der Architektur: Nutzer, Cloud Run, Firestore.

Mit der Methode ConfigureServices in der Datei Startup.cs wird die Anwendung so eingerichtet, dass Cloud KMS für die Verschlüsselung und Cloud Storage zum Speichern verschlüsselter Schlüssel verwendet werden.

  1. Klicken Sie in Cloud Shell auf Editor starten, um den Editor zu starten und die Datei Startup.cs zu prüfen.

    public void ConfigureServices(IServiceCollection services)
    {
        // Antiforgery tokens require data protection.
        services.AddDataProtection()
            // Store keys in Cloud Storage so that multiple instances
            // of the web application see the same keys.
            .PersistKeysToGoogleCloudStorage(
                Configuration["DataProtection:Bucket"],
                Configuration["DataProtection:Object"])
            // Protect the keys with Google KMS for encryption and fine-
            // grained access control.
            .ProtectKeysWithGoogleKms(
                Configuration["DataProtection:KmsKeyName"]);
        services.AddFirestoreDistributedCache(
                Configuration["FIRESTORE_PROJECT_ID"])
            .AddFirestoreDistributedCacheGarbageCollector();
        services.AddSession();
    }
    

Google Cloud-Projekt einrichten

  1. Bearbeiten Sie im Cloud Shell-Editor die Datei appsettings.json und ersetzen Sie die beiden Instanzen von YOUR-PROJECT-ID durch Ihre Google Cloud-Projekt-ID. Speichern Sie die Datei.

    {
      "Logging": {
        "LogLevel": {
          "Default": "Warning"
        }
      },
      "AllowedHosts": "*",
      "DataProtection": {
        "Bucket": "YOUR-PROJECT-ID-bucket",
        "Object": "DataProtectionProviderKeys.xml",
        "KmsKeyName": "projects/YOUR-PROJECT-ID/locations/global/keyRings/dataprotectionprovider/cryptoKeys/masterkey"
      }
    }
    
  2. Erstellen Sie einen neuen Schlüsselbund für den Cloud Key Management Service mit dem Namen dataprotectionprovider:

    gcloud kms keyrings create dataprotectionprovider --location global

  3. Erstellen Sie einen neuen Cloud Key Management Service-Schlüssel mit dem Namen masterkey:

    gcloud kms keys create masterkey --location global --keyring dataprotectionprovider --purpose=encryption

  4. Erstellen Sie einen Cloud Storage-Bucket zum Speichern der verschlüsselten Schlüssel:

    gsutil mb gs://PROJECT_ID-bucket

In Cloud Run bereitstellen und ausführen

Mit Cloud Run können Sie eine Anwendung erstellen und bereitstellen, die unter hoher Last und mit großen Datenmengen zuverlässig ausgeführt wird.

In dieser Anleitung wird der Server mithilfe von Cloud Run bereitgestellt.

  1. Veröffentlichen Sie in Ihrer Cloud Shell Ihre Anwendung:

    dotnet publish -c Release
    
  2. Mit Cloud Build einen Docker-Container erstellen und in Container Registry veröffentlichen:

    gcloud builds submit --tag gcr.io/PROJECT_ID/sessions bin/Release/netcoreapp2.1/publish

  3. Führen Sie den Container mit Cloud Run aus:

    gcloud beta run deploy sessions --region us-central1 --platform managed --image gcr.io/PROJECT_ID/sessions --allow-unauthenticated

    Notieren Sie sich die URL aus der Ausgabe:

    Service [sessions] revision [sessions-00003-xiz] has been deployed and is serving
    100 percent of traffic at https://sessions-r3f3em7nuq-uc.a.run.app
  4. Um die Live-Anwendung anzuzeigen, rufen Sie die URL auf, die Sie aus dem vorherigen Schritt kopiert haben.

Sitzungen löschen

Sie können Sitzungsdaten in der Google Cloud Console löschen oder eine Strategie zum automatischen Löschen implementieren. Wenn Sie zum Speichern von Sitzungen Lösungen wie Memcache oder Redis verwenden, werden abgelaufene Sitzungen automatisch gelöscht.

Fehler in der Anwendung beheben

Wenn Sie keine Verbindung zu Ihrer Cloud Run-Anwendung herstellen können, prüfen Sie Folgendes:

  1. Überprüfen Sie, ob die gcloud-Bereitstellungsbefehle erfolgreich ausgeführt wurden und keine Fehler ausgegeben haben. Wenn Fehler aufgetreten sind (z.–B. message=Build failed), beheben Sie diese und versuchen Sie noch einmal, die Cloud Run-Anwendung bereitzustellen.
  2. Weitere Informationen finden Sie in der Cloud Run-Anleitung zum Aufrufen von Logs.

Bereinigen

Projekt löschen

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Nächste Schritte