Menangani sesi dengan Firestore

Banyak aplikasi memerlukan pengelolaan sesi untuk autentikasi dan preferensi pengguna. ASP.NET Core dilengkapi dengan middleware untuk menyimpan sesi dalam cache terdistribusi.

Cache terdistribusi default ASP.NET sebenarnya tidak terdistribusi sama sekali. Fitur ini menyimpan data sesi di memori server web. Jika hanya ada satu server web yang menayangkan situs, strategi ini tidak masalah. Namun, jika banyak server web melayani situs web, pengguna situs web dapat mengalami error dan kehilangan data.

Untuk menghindari error dan kehilangan data, aplikasi ASP.NET harus menggunakan cache terdistribusi yang menyimpan data di penyimpanan data persisten. Tutorial ini menunjukkan cara mengelola sesi di Cloud Run dengan menyimpannya di Firestore dan mengenkripsi cookie dengan Cloud Key Management Service.

Tujuan

  • Deploy aplikasi di Cloud Run.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  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. Untuk membuat database Firestore dalam mode Native, selesaikan langkah-langkah berikut:
    1. Di konsol Google Cloud , buka halaman Firestore viewer.
      Buka penampil Firestore
    2. Dari layar Select a Firestore mode, klik Select Native Mode.
    3. Pilih lokasi untuk database Firestore Anda. Setelan lokasi ini adalah lokasi resource default Google Cloud untuk project Google Cloud Anda . Lokasi ini digunakan untuk layanan Google Cloud di project Google Cloud Anda yang memerlukan setelan lokasi, khususnya, bucket Cloud Storage default dan aplikasi App Engine.
    4. Klik Create database.
  9. Di Cloud Shell, buka kode sumber aplikasi.
    Buka Cloud Shell

    Cloud Shell menyediakan akses command line ke Google Cloud resource Anda langsung dari browser.

  10. Untuk mendownload kode contoh dan beralih ke direktori aplikasi, klik Lanjutkan.
  11. Di Cloud Shell, konfigurasikan gcloud CLI untuk menggunakan project Google Cloud baru Anda:

    # Configure gcloud for your project
    gcloud config set project PROJECT_ID

    Ganti PROJECT_ID dengan project ID Google Cloud yang Anda buat menggunakan konsol Google Cloud .

    Google Cloud CLI adalah cara utama Anda berinteraksi dengan resource Google Cloud dari command line. Dalam tutorial ini, Anda menggunakan gcloud CLI untuk men-deploy dan memantau aplikasi Anda.

Memeriksa kode sumber

Diagram berikut mengilustrasikan cara Firestore menangani sesi untuk aplikasi Cloud Run.

Diagram arsitektur: pengguna, Cloud Run, Firestore.

Metode ConfigureServices dalam file Startup.cs menyiapkan aplikasi untuk menggunakan Cloud KMS untuk enkripsi dan Cloud Storage untuk menyimpan kunci terenkripsi.

  1. Di Cloud Shell, klik meluncurkan editor untuk meluncurkan editor dan memeriksa file 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();
    }
    

Menyiapkan Google Cloud project

  1. Di editor Cloud Shell, edit file appsettings.json dan ganti dua instance YOUR-PROJECT-ID dengan project ID Google Cloud Anda. Simpan file.

    {
      "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. Buat key ring Cloud Key Management Service baru bernama dataprotectionprovider:

    gcloud kms keyrings create dataprotectionprovider --location global

  3. Buat kunci Cloud Key Management Service baru bernama masterkey:

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

  4. Buat bucket Cloud Storage untuk menyimpan kunci terenkripsi:

    gcloud storage buckets create gs://PROJECT_ID-bucket

Men-deploy dan menjalankan di Cloud Run

Anda dapat menggunakan Cloud Run untuk membangun dan men-deploy aplikasi yang berjalan dengan andal meskipun menangani beban berat dan dengan jumlah data yang besar.

Tutorial ini menggunakan Cloud Run untuk men-deploy server.

  1. Di Cloud Shell, publikasikan aplikasi Anda:

    dotnet publish -c Release
    
  2. Gunakan Cloud Build untuk membangun container Docker dan memublikasikan ke Container Registry:

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

  3. Jalankan container dengan Cloud Run:

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

    Catat URL di output:

    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. Untuk melihat aplikasi aktif, buka URL yang Anda salin dari langkah sebelumnya.

Menghapus sesi

Anda dapat menghapus data sesi di konsolGoogle Cloud atau menerapkan strategi penghapusan otomatis. Jika Anda menggunakan solusi penyimpanan untuk sesi seperti Memcache atau Redis, sesi yang sudah berakhir akan otomatis dihapus.

Men-debug aplikasi

Jika Anda tidak dapat terhubung ke aplikasi Cloud Run, periksa hal berikut:

  1. Periksa apakah perintah deployment gcloud berhasil diselesaikan dan tidak menghasilkan error. Jika ada error (misalnya, message=Build failed), perbaiki, lalu coba men-deploy aplikasi Cloud Run lagi.
  2. Lihat panduan Cloud Run untuk melihat log.

Pembersihan

Menghapus project

  1. Di Konsol Google Cloud , buka halaman Manage resources.

    Buka Kelola resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah berikutnya