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.

Ziele

  • 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. 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 noch kein Google Cloud-Konto haben, 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 Firestore, Cloud Run, Cloud Key Management Service, and Cloud Storage APIs.

    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 APIs

  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 Firestore, Cloud Run, Cloud Key Management Service, and Cloud Storage APIs.

    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 APIs

  8. Mit den folgenden Schritten können Sie eine Firestore-Datenbank im nativen Modus erstellen:
    1. Rufen Sie in der Google Cloud Console die Seite Firestore auf.
      Zur Firestore-Seite
    2. Klicken Sie im Bildschirm Firestore-Modus auswählen auf Nativen Modus auswählen.
    3. Wählen Sie einen Standort für Ihre Firestore Datenbank aus. Mit dieser Standorteinstellung legen Sie den Standardspeicherort für Ressourcen in Ihrem Google Cloud Projekt fest. Google Cloud Er wird für Google Cloud Dienste in Ihrem Google Cloud Projekt verwendet, die eine Standorteinstellung 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 Fortfahren, um den Beispielcode herunterzuladen und in das 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 erstellt haben mit der Google Cloud Console.

    Die Google Cloud CLI ist die primäre Methode zum Interagieren mit Ihren Google Cloud Ressourcen über die Befehlszeile. In dieser Anleitung verwenden Sie die gcloud CLI zum Bereitstellen und Überwachen der Anwendung.

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 sich die Startup.cs Datei anzusehen.

    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();
    }
    

Projekt einrichten Google Cloud

  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 Schlüsselbund für den Cloud Key Management Service 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:

    gcloud storage buckets create 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. Verwenden Sie Cloud Build, um einen Docker-Container zu erstellen und in der Container Registry zu 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 automatische Löschstrategie 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 zum Anzeigen von Protokollen finden Sie im Cloud Run-Handbuch.

Bereinigen

Projekt löschen

  1. Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Nächste Schritte