Gérer les sessions avec Firestore


De nombreuses applications nécessitent une gestion de session pour l'authentification et les préférences utilisateur. ASP.NET Core est fourni avec un middleware pour stocker les sessions dans un cache distribué.

Le cache distribué par défaut d'ASP.NET n'est en fait pas du tout distribué. Il stocke les données de session dans la mémoire du serveur Web. Lorsqu'un seul serveur Web diffuse un site Web, cette stratégie convient. Toutefois, lorsque de nombreux serveurs Web diffusent un site Web, les utilisateurs du site Web peuvent rencontrer des erreurs et perdre des données.

Pour éviter les erreurs et la perte de données, une application ASP.NET doit utiliser un cache distribué qui stocke les données dans un magasin de données persistant. Ce tutoriel explique comment gérer des sessions sur Cloud Run en les stockant dans Firestore et en chiffrant des cookies avec Cloud Key Management Service.

Objectifs

  • Déployez l'application sur Cloud Run.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  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 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. Make sure that billing is enabled for your Google Cloud project.

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

    Enable the APIs

  8. Pour créer une base de données Firestore en mode natif, effectuez la procédure suivante :
    1. Dans la console Google Cloud, accédez à la page Lecteur Firestore.
      Accéder au lecteur Firestore
    2. Sur l'écran Sélectionner un mode Cloud Firestore, cliquez sur Sélectionner le mode natif.
    3. Sélectionnez un emplacement pour votre base de données Firestore. Ce paramètre d'emplacement correspond à l'emplacement par défaut des ressources Google Cloud de votre projet Google Cloud. Cet emplacement est utilisé pour les services Google Cloud exploités dans votre projet Google Cloud qui requièrent un paramètre d'emplacement, plus précisément le bucket Cloud Storage par défaut et l'application App Engine.
    4. Cliquez sur Create Database (Créer une base de données).
  9. Dans Cloud Shell, ouvrez le code source de l'application.
    Accéder à Cloud Shell

    Cloud Shell vous permet d'accéder en ligne de commande à vos ressources Google Cloud, directement depuis votre navigateur.

  10. Pour télécharger l'exemple de code et accéder au répertoire de l'application, cliquez sur Continuer.
  11. Dans Cloud Shell, configurez gcloud CLI pour utiliser votre nouveau projet Google Cloud:

    # Configure gcloud for your project
    gcloud config set project PROJECT_ID

    Remplacez PROJECT_ID par l'ID du projet Google Cloud que vous avez créé à l'aide de la console Google Cloud.

    Google Cloud CLI est le principal moyen d'interaction avec vos ressources Google Cloud depuis la ligne de commande. Dans ce tutoriel, vous allez utiliser gcloud CLI pour déployer et surveiller votre application.

Examiner le code source

Le diagramme suivant illustre la façon dont Firestore gère les sessions pour l'application Cloud Run.

Schéma d'architecture : utilisateur, Cloud Run, Firestore.

La méthode ConfigureServices du fichier Startup.cs configure l'application de sorte qu'elle utilise Cloud KMS pour le chiffrement et Cloud Storage pour le stockage des clés chiffrées.

  1. Dans Cloud Shell, cliquez sur Lancer l'éditeur pour lancer l'éditeur et examiner le fichier Startup.cs.

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

Configuration du projet Google Cloud

  1. Dans l'éditeur Cloud Shell, modifiez le fichier appsettings.json et remplacez les deux instances de YOUR-PROJECT-ID par l'ID de votre projet Google Cloud. Enregistrez le fichier.

    {
      "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. Créez un trousseau de clés Cloud Key Management Service nommé dataprotectionprovider:

    gcloud kms keyrings create dataprotectionprovider --location global

  3. Créez une clé Cloud Key Management Service nommée masterkey:

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

  4. Créez un bucket Cloud Storage pour stocker les clés chiffrées:

    gsutil mb gs://PROJECT_ID-bucket

Déployer et exécuter sur Cloud Run

Vous pouvez utiliser Cloud Run pour créer et déployer une application qui fonctionne de manière fiable sous une charge élevée et avec de grandes quantités de données.

Ce tutoriel utilise Cloud Run pour déployer le serveur.

  1. Dans votre Cloud Shell, publiez votre application :

    dotnet publish -c Release
    
  2. Utilisez Cloud Build pour créer un conteneur Docker et le publier dans Container Registry:

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

  3. Exécutez le conteneur avec Cloud Run:

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

    Notez l'URL dans la sortie :

    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. Pour afficher l'application en direct, accédez à l'URL que vous avez copiée à l'étape précédente.

Supprimer des sessions

Vous pouvez supprimer des données de session dans la console Google Cloud ou mettre en œuvre une stratégie de suppression automatique. Si vous utilisez des solutions de stockage pour des sessions telles que Memcache ou Redis, les sessions expirées sont automatiquement supprimées.

Déboguer l'application

Si vous ne pouvez pas vous connecter à votre application Cloud Run, vérifiez les points suivants :

  1. Vérifiez que les commandes de déploiement gcloud ont bien abouti et n'ont généré aucune erreur. S'il y a eu des erreurs (par exemple, message=Build failed), corrigez-les et réessayez de déployer l'application Cloud Run.
  2. Consultez le guide Cloud Run sur l'affichage des journaux.

Effectuer un nettoyage

Supprimer le projet

  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.

Étapes suivantes