Collegare Firebase App Hosting a una rete VPC

Il backend di Firebase App Hosting può connettersi a una rete Virtual Private Cloud (VPC). In questo modo, il backendFirebase App Hosting può accedere ai servizi di backend non accessibili utilizzando indirizzi IP pubblici, come Cloud SQL, Spanner, Cloud MemorystoreCompute Engine o i microservizi interni di Kubernetes.

L'accesso al VPC è disponibile solo in fase di runtime (dal contenitore Cloud Run), non in fase di compilazione (Cloud Build).

Configura in apphosting.yaml

Utilizza la mappatura vpcAccess nel file apphosting.yaml per configurare l'accesso. Utilizza un nome di rete completo o un ID. L'utilizzo degli ID consente la portabilità tra gli ambienti di gestione temporanea e di produzione con connettori/reti diversi.

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

Esempio: connettiti a Memorystore for Redis da un'app Next.js

I sistemi di memorizzazione nella cache come Redis o Memcached vengono comunemente utilizzati per creare un livello di memorizzazione rapida dei dati per un'app. Questo esempio mostra come configurare Memorystore for Redis nello stesso progetto Google Cloud del backend Firebase App Hosting e collegarti utilizzando l'egresso diretto VPC.

Passaggio 0: crea un'istanza Memorystore for Redis

  1. Vai alla pagina Memorystore for Redis nella console Google Cloud.
    • Assicurati di selezionare lo stesso progetto che utilizzi per Firebase App Hosting.
    • Se non riesci ad accedere a questa pagina, assicurati che la fatturazione sia attivata per il tuo progetto e che tu abbia attivato l'API Memorystore.
  2. Seleziona Crea istanza.
  3. Configura la nuova istanza con le impostazioni che preferisci. Ecco alcuni valori di esempio che puoi utilizzare:
    • Inserisci my-redis-cache in ID istanza.
    • Inserisci Redis cache in Nome visualizzato.
    • Scegli Base sotto il selettore del livello. Il livello di base designa un nodo Redis autonomo, a differenza del livello standard, che utilizza un nodo replica per eseguire il backup dei dati.
    • Scegli la regione del backend di App Hosting dal selettore Regione. Assicurati di impostare questo valore in modo che corrisponda alla regione del tuo backend.
    • Scegli Qualsiasi dal selettore delle zone.
    • Inserisci 5 in Capacità. La capacità dell'istanza viene impostata su 5 GB.
    • Seleziona 5.0 in Versione (opzione consigliata).
    • Scegli predefinita dal selettore Rete autorizzata.

Passaggio 1: aggiorna apphosting.yaml con l'ID rete VPC

  1. Visita la pagina Reti VPC nella console Google Cloud.
  2. Individua l'ID rete VPC per l'istanza Memorystore for Redis (spesso sarà default).
  3. Imposta la configurazione del traffico in uscita VPC diretto in apphosting.yaml utilizzando l'ID rete VPC:

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

Passaggio 2: aggiungi le variabili di ambiente che indirizzano l'app a Redis

  1. Trova i dati di connessione (host e porta) nella scheda "Connessioni" dell'istanza Memorystore for Redis nella console Google Cloud.
  2. Connettiti a Redis con le variabili di ambiente REDISPORT e REDISHOST. Impostali in apphosting.yaml utilizzando i valori dell'host e della porta della console Google Cloud:

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

Passaggio 3: utilizza Redis dalla tua app

  1. Installa il pacchetto npm redis:

    npm install redis@latest

  2. Accedi alla cache Redis dal tuo codice. Utilizza le variabili di ambiente configurate nel passaggio precedente. Ad esempio, ecco come leggere da una cache in un gestore di route di 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 });
      }
      

(Facoltativo) Passaggio 4: configura l'app per lo sviluppo locale

L'emulatore Firebase App Hosting può sostituire i valori utilizzando apphosting.emulator.yaml. Qui puoi modificare il valore di REDISHOST in modo che rimandi all'host locale, in modo da poter sviluppare localmente utilizzando un'installazione locale di Redis.

  1. Installa Redis sulla tua macchina locale
  2. Crea o modifica apphosting.emulators.yaml per fare riferimento all'istanza locale:

    env:
      - variable: REDISHOST
        value: 127.0.0.1