Collegare Firebase App Hosting a una rete VPC

Il backend Firebase App Hosting può connettersi a una rete Virtual Private Cloud (VPC). In questo modo, il backend Firebase App Hosting può accedere ai servizi di backend non accessibili tramite 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).

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: connettersi 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 nella cache rapido per un'app. Questo esempio mostra come configurare Memorystore for Redis nello stesso progetto Google Cloud del backend Firebase App Hosting e connettersi utilizzando l'uscita VPC diretta.

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 Basic 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 opzione dal selettore di 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 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. Trova l'ID rete VPC per l'istanza Memorystore for Redis (spesso è default).
  3. Imposta la configurazione di VPC diretto in uscita in apphosting.yaml utilizzando l'ID di 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. Imposta questi valori 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(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 punti a localhost, 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