Collegare Firebase App Hosting a una rete VPC

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

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

Scegli come connetterti a una rete VPC

  • VPC diretto in uscita: più semplice, più veloce e meno costoso. Utilizza un indirizzo IP per container. Consigliato per la maggior parte dei casi d'uso.
  • Connettori serverless: raggruppa gli indirizzi IP per le applicazioni più grandi. Richiede il pagamento per la VM sottostante. Per i dettagli sui prezzi, consulta "Accesso VPC serverless" nella pagina dei prezzi di VPC.

Configura in apphosting.yaml

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

Configurazione del traffico VPC diretto in uscita (apphosting.yaml):

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

Configurazione del connettore serverless (apphosting.yaml):

runConfig:
  vpcAccess:
    egress: ALL_TRAFFIC
    connector: connector-id

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

I sistemi di memorizzazione nella cache come Redis o Memcached sono di uso comune per creare un livello di memorizzazione nella cache dei dati veloce per un'app. Questo esempio mostra come configurare Memorystore for Redis nello stesso progetto Google Cloud del tuo backend Firebase App Hosting e connetterti utilizzando il traffico in uscita VPC diretto.

Passaggio 0: crea un'istanza Memorystore for Redis

  1. Vai alla pagina Memorystore for Redis nella console Google Cloud.
    • Assicurati che sia selezionato lo stesso progetto che utilizzi per Firebase App Hosting.
    • Se non riesci ad accedere a questa pagina, assicurati che la fatturazione sia abilitata per il tuo progetto e di aver abilitato 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 nel selettore del livello. Il livello base indica un nodo Redis autonomo, a differenza del livello standard, che utilizza un nodo di replica per eseguire il backup dei dati.
    • Scegli la regione del backend 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à. In questo modo, la capacità dell'istanza viene impostata su 5 GB.
    • Seleziona 7.0 (o la versione consigliata predefinita) in Versione.
    • Scegli default dal selettore Rete autorizzata.

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

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

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

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

  1. Trova le informazioni 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 di host e 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 potresti leggere da una cache in un gestore di route 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({
            socket: {
              host: REDISHOST,
              port: Number(REDISPORT),
            },
          })
            .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ò eseguire l'override dei valori utilizzando apphosting.emulator.yaml. Qui puoi modificare il valore di REDISHOST in modo che punti a localhost, così puoi sviluppare localmente utilizzando un'installazione locale di Redis.

  1. Installa Redis sulla tua macchina locale
  2. Crea o modifica apphosting.emulator.yaml per fare riferimento alla tua istanza locale:

    env:
      - variable: REDISHOST
        value: 127.0.0.1