Menggunakan Remote Config di lingkungan server

Firebase Remote Config kini mendukung konfigurasi sisi server menggunakan Firebase Admin Node.js SDK v12.1.0+. Kemampuan baru ini mendukung Anda untuk mengelola perilaku dan konfigurasi aplikasi sisi server secara dinamis menggunakan Remote Config. Hal ini mencakup implementasi serverless seperti Cloud Functions.

Tidak seperti SDK klien Firebase, yang mengambil konfigurasi khusus klien yang diperoleh dari template Remote Config, Remote Config SDK sisi server mendownload template Remote Config lengkap dari Firebase. Server Anda kemudian dapat mengevaluasi template dengan setiap permintaan masuk dan menggunakan logikanya sendiri untuk memberikan respons yang disesuaikan dengan latensi yang sangat rendah.

Dengan Remote Config sisi server, Anda dapat:

  • Tentukan parameter konfigurasi untuk aplikasi yang berjalan di atau diakses melalui server Anda, sehingga memungkinkan kasus penggunaan seperti mengonfigurasi parameter dan perintah model AI dari jarak jauh, serta integrasi lainnya, untuk memastikan kunci API Anda tetap aman.
  • Sesuaikan parameter secara dinamis sebagai respons terhadap perubahan lingkungan Anda atau perubahan aplikasi lainnya, seperti memperbarui parameter LLM dan endpoint model.
  • Kontrol biaya dengan mengupdate API yang dipanggil server Anda dari jarak jauh.
  • Buat konfigurasi kustom dengan cepat untuk klien yang mengakses server Anda.
  • Mencatat klien mana yang menerima parameter value dan menggunakannya di Cloud Functions sebagai bagian dari sistem verifikasi hak.

Anda dapat men-deploy Remote Config sisi server di Cloud Run, Cloud Functions, atau lingkungan server yang dihosting sendiri.

Sebelum memulai

Ikuti petunjuk dalam artikel Menambahkan Firebase Admin SDK ke server untuk membuat project Firebase, menyiapkan akun layanan, dan menambahkan Firebase Admin Node.js SDK ke server.

Langkah 1: Lakukan inisialisasi Firebase Admin Node.js SDK dan beri otorisasi permintaan API

Jika Anda menginisialisasi Admin SDK tanpa parameter, SDK akan menggunakan Kredensial Default Aplikasi Google dan membaca opsi dari variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS. Misalnya, untuk menginisialisasi SDK dan menambahkan Remote Config:

import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";

// Initialize Firebase
const firebaseApp = initializeApp();

Langkah 2: Identifikasi parameter value default untuk aplikasi server

Identifikasi variabel di aplikasi yang ingin Anda perbarui secara dinamis dengan Remote Config. Kemudian, pertimbangkan variabel mana yang harus ditetapkan secara default di aplikasi Anda dan nilai defaultnya. Tindakan ini akan memastikan aplikasi Anda berhasil berjalan meskipun koneksinya ke server backend Remote Config terputus.

Misalnya, jika Anda menulis aplikasi server yang mengelola fungsi AI generatif, Anda dapat menetapkan nama model default, prompt preamble, dan konfigurasi AI generatif, seperti berikut:

Nama parameter Deskripsi Type Nilai default
model_name Nama API Model String gemini-1.5-pro
preamble_prompt Minta untuk menambahkan kueri pengguna String I'm a developer who wants to learn about Firebase and you are a helpful assistant who knows everything there is to know about Firebase!
generation_config Parameter yang akan dikirim ke model JSON {"stopSequences": ["I hope this helps"], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}

Langkah 3: Konfigurasikan aplikasi server Anda

Setelah Anda menentukan parameter yang ingin digunakan dengan Remote Config, konfigurasikan aplikasi Anda untuk menetapkan value default, mengambil template Remote Config khusus server, dan menggunakan value-nya. Langkah-langkah berikut menjelaskan cara mengonfigurasi aplikasi Node.js.

  1. Mengakses dan memuat template.

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = rc.initServerTemplate();
    
    // Load Remote Config
    await template.load();
    

    Jika menggunakan Node.js dalam Cloud Functions, Anda dapat menggunakan getServerTemplate asinkron untuk mengambil dan memuat template dalam satu langkah:

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = await rc.getServerTemplate();
    
  2. Untuk memastikan aplikasi Anda berhasil berjalan meskipun koneksinya ke server backend Remote Config terganggu, tambahkan value default untuk setiap parameter ke aplikasi Anda. Untuk melakukannya, tambahkan defaultConfig di dalam fungsi template initServerTemplate atau getServerTemplate Anda:

    const template = rc.initServerTemplate({
      defaultConfig: {
        model_name: "gemini-pro",
        generation_config: '{"stopSequences": [], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}',
        preamble_prompt: "I'm a developer who wants to learn about Firebase and you are a helpful assistant who knows everything there is to know about Firebase!"
      },
    });
    
    // Load Remote Config
    await template.load();
    
  3. Setelah template dimuat, gunakan template.evaluate() untuk mengimpor parameter dan nilai dari template:

    // Add template parameters to config
    const config = template.evaluate();
    
  4. Secara opsional, jika Anda menetapkan kondisi persentase di template Remote Config, tentukan dan berikan randomizationId yang ingin Anda gunakan untuk mengevaluasi kondisi dalam fungsi template.evaluate().

    Misalnya, Anda dapat menetapkan ID penginstalan Firebase sebagai randomizationId, atau ID pengguna, untuk memastikan setiap pengguna yang menghubungi server Anda ditambahkan ke grup acak yang tepat. Contoh berikut adalah contoh dasar, tetapi Anda dapat mengonfigurasi server untuk menghasilkan randomizationIds yang berbeda untuk permintaan klien yang berbeda, guna memastikan bahwa pengguna mendapatkan nilai yang konsisten dari Remote Config berdasarkan keanggotaan mereka dalam grup kondisi persentase.

    Untuk informasi selengkapnya tentang kondisi persentase, lihat Pengguna dalam persentase acak.

    // Set the randomizationId
    const randomizationId = "2ac93c28-c459-4760-963d-a3974ec26c04"
    
    // Add template parameters to `config`. Evaluates the
    // template and returns the parameter value assigned to
    // the group assigned to the {randomizationId}.
    const config = template.evaluate({
      randomizationId
    });
    
  5. Selanjutnya, ekstrak nilai parameter yang Anda perlukan dari konstanta konfigurasi. Gunakan getters untuk mentransmisikan nilai dari Remote Config ke format yang diharapkan. Jenis-jenis berikut ini didukung:

    • Boolean: getBoolean
    • Objek: getValue
    • Nomor: getNumber
    • String: getString

    Misalnya, jika Anda mengimplementasikan Vertex AI di server dan ingin mengubah model serta parameter model, Anda mungkin perlu mengonfigurasi parameter untuk model_name dan generationConfig. Berikut adalah contoh cara mengakses nilai Remote Config:

    // Replace defaults with values from Remote Config.
    const generationConfig =
      JSON.parse(
        config.getString('generation_config'));
    
    const is_ai_enabled = config.getBool('is_ai_enabled');
    
    const model = config.getString('model_name');
    
    // Generates a prompt comprised of the Remote Config
    // parameter and prepends it to the user prompt
    const prompt = `${config.getString('preamble_prompt')} ${req.query.prompt}`;
    
  6. Jika server Anda berjalan lama, bukan lingkungan serverless, gunakan setInterval untuk memuat ulang template secara berkala guna memastikan bahwa Anda mengambil template terbaru secara berkala dari server Remote Config.

Langkah 4: Menetapkan parameter value khusus server di Remote Config

Selanjutnya, buat template server Remote Config dan konfigurasikan parameter serta nilai yang akan digunakan dalam aplikasi Anda.

Untuk membuat template Remote Config khusus server:

  1. Buka halaman parameter Remote Config Firebase console dan, dari pemilih Klien/Server, pilih Server.
  2. Tetapkan parameter Remote Config dengan nama dan jenis data yang sama seperti parameter yang Anda tetapkan di aplikasi dan berikan nilai. Nilai ini akan menggantikan defaultConfig yang ditetapkan dalam Mengonfigurasi aplikasi server saat mengambil dan mengevaluasi template, serta menetapkan nilai ini ke variabel.
  3. Jika ingin, tetapkan kondisi persentase untuk menerapkan nilai secara persisten ke sampel acak instance. Untuk mengetahui informasi selengkapnya tentang kondisi persentase, lihat Pengguna dalam persentase acak.
  4. Setelah selesai menambahkan parameter, klik Publikasikan perubahan.
  5. Tinjau perubahan, lalu klik Publikasikan perubahan lagi.

Langkah 5: Deploy sebagai Cloud Function atau gunakan Cloud Run

Jika aplikasi server Anda ringan dan berbasis peristiwa, Anda harus mempertimbangkan untuk men-deploy kode sebagai Cloud Function. Misalnya, Anda memiliki aplikasi yang menyertakan dialog karakter yang didukung oleh API AI generatif seperti Google AI dan Vertex AI. Dalam hal ini, Anda dapat menghosting logika penayangan LLM di Cloud Function yang dipanggil oleh aplikasi secara on demand. Pelajari cara men-deploy aplikasi Anda sebagai Cloud Function di bagian Memulai: menulis, menguji, dan men-deploy fungsi pertama Anda.

Jika aplikasi Anda dimaksudkan untuk berjalan lama (misalnya, aplikasi web dengan aset), Anda dapat mempertimbangkan Cloud Run. Untuk men-deploy aplikasi server dengan Cloud Run, ikuti panduan di Panduan Memulai: Men-deploy layanan Node.js ke Cloud Run.

Untuk mengetahui informasi selengkapnya tentang kasus penggunaan terbaik untuk Cloud Run dan Cloud Functions, lihat Cloud Functions vs. Cloud Run: kapan harus menggunakan salah satunya.