Menghubungkan Firebase App Hosting ke jaringan VPC

Backend Firebase App Hosting Anda dapat terhubung ke jaringan Virtual Private Cloud (VPC). Hal ini memungkinkan backend Firebase App Hosting Anda mengakses layanan backend yang tidak dapat diakses menggunakan alamat IP publik, seperti Cloud SQL, Spanner, Cloud Memorystore, Compute Engine, atau microservice internal Kubernetes.

Akses VPC hanya tersedia saat runtime (dari penampung Cloud Run Anda), bukan pada waktu build (Cloud Build).

Mengonfigurasi di apphosting.yaml

Gunakan pemetaan vpcAccess di file apphosting.yaml untuk mengonfigurasi akses. Gunakan nama jaringan atau ID yang sepenuhnya memenuhi syarat. Penggunaan ID memungkinkan portabilitas antara lingkungan staging dan produksi dengan konektor/jaringan yang berbeda.

runConfig:
  vpcAccess:
    egress: PRIVATE_RANGES_ONLY # Default value
    networkInterfaces:
      # Specify at least one of network and/or subnetwork
      - network: my-network-id
        subnetwork: my-subnetwork-id

Contoh: terhubung ke Memorystore for Redis dari aplikasi Next.js

Sistem penyimpanan cache seperti Redis atau Memcached biasanya digunakan untuk membuat lapisan penyimpanan cache data yang cepat untuk aplikasi. Contoh ini menunjukkan cara menyiapkan Memorystore for Redis dalam project Google Cloud yang sama dengan backend Firebase App Hosting Anda dan terhubung ke sana menggunakan Egress VPC langsung.

Langkah 0: Buat instance Memorystore for Redis

  1. Buka halaman Memorystore for Redis di konsol Google Cloud.
    • Pastikan project yang sama dengan yang Anda gunakan untuk Firebase App Hosting dipilih.
    • Jika Anda tidak dapat mengakses halaman ini, pastikan penagihan diaktifkan untuk project Anda dan Anda telah mengaktifkan Memorystore API.
  2. Pilih Create Instance.
  3. Konfigurasikan instance baru dengan setelan yang Anda pilih. Berikut beberapa contoh nilai yang dapat Anda gunakan:
    • Masukkan my-redis-cache di bagian Instance ID.
    • Masukkan Redis cache di bagian Nama tampilan.
    • Pilih Dasar di bagian pemilih tingkat. Tingkat dasar menetapkan node Redis mandiri, tidak seperti tingkat standar, yang menggunakan node replika untuk mencadangkan data Anda.
    • Pilih region backend App Hosting dari pemilih Region. Pastikan untuk menetapkan nilai ini agar cocok dengan region backend Anda.
    • Pilih any dari pemilih zona.
    • Masukkan 5 di bagian Capacity. Tindakan ini akan menetapkan kapasitas instance Anda ke 5 GB.
    • Pilih 5.0 di bagian Version (direkomendasikan).
    • Pilih default dari pemilih Authorized network.

Langkah 1: Perbarui apphosting.yaml dengan ID jaringan VPC Anda

  1. Buka halaman jaringan VPC di konsol Google Cloud.
  2. Temukan ID jaringan VPC untuk instance Memorystore for Redis Anda (biasanya default).
  3. Tetapkan konfigurasi traffic keluar VPC langsung di apphosting.yaml menggunakan ID jaringan VPC:

    runConfig:
      vpcAccess:
        egress: PRIVATE_RANGES_ONLY # Default value
      networkInterfaces:
        - network: my-network-id
    

Langkah 2: Tambahkan variabel lingkungan yang mengarahkan aplikasi Anda ke Redis

  1. Temukan informasi koneksi (host dan port) di tab "Connections" pada instance Memorystore for Redis di Google Cloud console.
  2. Menghubungkan ke Redis dengan variabel lingkungan REDISPORT dan REDISHOST. Tetapkan nilai ini di apphosting.yaml menggunakan nilai host dan port dari konsol Google Cloud:

    env:
      # Sample only. Use actual values provided by Memorystore
      - variable: REDISPORT
        value: 6379
      - variable: REDISHOST
        value: 10.127.16.3
    

Langkah 3: Gunakan redis dari aplikasi Anda

  1. Instal paket npm redis:

    npm install redis@latest

  2. Akses cache redis dari kode Anda. Gunakan variabel lingkungan yang dikonfigurasi pada langkah sebelumnya. Misalnya, berikut adalah cara membaca dari cache di pengendali rute Next.js:

    • src/lib/redis.js

      import { createClient } from "redis";
      
      // Set these environment variables in apphosting.yaml
      const REDISHOST = process.env.REDISHOST;
      const REDISPORT = process.env.REDISPORT;
      
      let redisClient;
      
      export async function getClient(req, res) {
        // Only connect if a connection isn't already available
        if (!redisClient) {
          redisClient = await createClient(REDISPORT, REDISHOST)
            .on("error", (err) => console.error("Redis Client Error", err))
            .connect();
        }
      
        return redisClient;
      }
      
    • src/app/counter/route.js

      import { getClient } from "@/lib/redis.js";
      
      export async function GET(request) {
        const redisClient = await getClient();
        const count = await redisClient.get("counter");
      
        return Response.json({ count });
      }
      
      export async function POST(request) {
        const redisClient = await getClient();
        const count = await redisClient.incr("counter");
      
        return Response.json({ count });
      }
      

Langkah 4 (opsional): Konfigurasikan aplikasi Anda untuk pengembangan lokal

Emulator Firebase App Hosting dapat mengganti nilai menggunakan apphosting.emulator.yaml. Di sini, Anda dapat mengubah nilai REDISHOST agar mengarah ke localhost sehingga Anda dapat mengembangkan secara lokal menggunakan penginstalan Redis lokal.

  1. Menginstal Redis di komputer lokal
  2. Buat atau edit apphosting.emulators.yaml untuk mereferensikan instance lokal Anda:

    env:
      - variable: REDISHOST
        value: 127.0.0.1