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 backend di Firebase App Hosting può accedere ai servizi di backend non accessibili tramite indirizzi IP pubblici, come Cloud SQL, Spanner, Cloud Memorystore, Compute Engine o microservizi interni di Kubernetes.

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

Scegli come connetterti a una rete VPC

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

Configura in apphosting.yaml

Utilizza il vpcAccess mapping 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 gli ambienti di staging e di produzione con connettori/reti diversi.

Configurazione di 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: connetti 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 nella cache dei dati veloce per un'app. Questo esempio mostra come configurare Memorystore for Redis nello stesso Google Cloud progetto del tuo Firebase App Hosting backend e come connetterti utilizzando VPC diretto in uscita.

Passaggio 0: crea un'istanza di 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 di 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 backend.
    • Scegli qualsiasi dal selettore della zona.
    • Inserisci 5 in Capacità. In questo modo, la capacità dell'istanza viene impostata su 5 GB.
    • Seleziona 5.0 in Versione (opzione consigliata).
    • Scegli default dal selettore Rete autorizzata.

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

  1. Visita la pagina Reti VPC nella console Google Cloud.
  2. Trova l'ID della rete VPC per l'istanza di Memorystore for Redis (spesso sarà default).
  3. Imposta la configurazione di 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 le variabili di ambiente che indirizzano l'app a Redis

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

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

Passaggio 3: utilizza Redis dall'app

  1. Installa il pacchetto npm Redis:

    npm install redis@latest

  2. Accedi alla cache Redis dal 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(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 });
      }
      

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

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

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

    env:
      - variable: REDISHOST
        value: 127.0.0.1