Firebase App Hosting mit einem VPC-Netzwerk verbinden

Ihr Firebase App Hosting-Backend kann eine Verbindung zu einem VPC-Netzwerk (Virtual Private Cloud) herstellen. So kann Ihr Firebase App Hosting-Backend auf Backenddienste zugreifen, auf die über öffentliche IP-Adressen nicht zugegriffen werden kann, z. B. Cloud SQL, Spanner, Cloud Memorystore, Compute Engine oder interne Kubernetes-Mikroservices.

Der VPC-Zugriff ist nur zur Laufzeit (über Ihren Cloud Run-Container) und nicht zur Buildzeit (Cloud Build) verfügbar.

In apphosting.yaml konfigurieren

Verwenden Sie die vpcAccess-Zuordnung in Ihrer apphosting.yaml-Datei, um den Zugriff zu konfigurieren. Verwenden Sie entweder einen voll qualifizierten Netzwerknamen oder eine ID. Die Verwendung von IDs ermöglicht die Portabilität zwischen Staging- und Produktionsumgebungen mit unterschiedlichen Konnektoren/Netzwerken.

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

Beispiel: Verbindung von einer Next.js-App zu Memorystore for Redis herstellen

Caching-Systeme wie Redis oder Memcached werden häufig verwendet, um eine schnelle Daten-Caching-Ebene für eine App zu erstellen. In diesem Beispiel wird gezeigt, wie Sie Memorystore for Redis im selben Google Cloud-Projekt wie Ihr Firebase App Hosting-Backend einrichten und über einen direkten VPC-Ausgang eine Verbindung dazu herstellen.

Schritt 0: Memorystore for Redis-Instanz erstellen

  1. Rufen Sie in der Google Cloud Console die Seite Memorystore for Redis auf.
    • Achten Sie darauf, dass dasselbe Projekt ausgewählt ist, das Sie für Firebase App Hosting verwenden.
    • Wenn Sie nicht auf diese Seite zugreifen können, prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist und ob Sie die Memorystore API aktiviert haben.
  2. Wählen Sie Instanz erstellen aus.
  3. Konfigurieren Sie die neue Instanz mit Ihren bevorzugten Einstellungen. Hier sind einige Beispielwerte, die Sie verwenden können:
    • Geben Sie unter Instanz-ID my-redis-cache ein.
    • Geben Sie unter Anzeigename Redis cache ein.
    • Wählen Sie unter „Stufe auswählen“ die Option Basis aus. Die Basis-Stufe bezeichnet einen eigenständigen Redis-Knoten, im Gegensatz zur Standardstufe, die zur Sicherung Ihrer Daten einen Replikatknoten verwendet.
    • Wählen Sie in der Auswahl Region die Region Ihres App Hosting-Backends aus. Achten Sie darauf, dass dieser Wert mit der Region Ihres Backends übereinstimmt.
    • Wählen Sie in der Zonenauswahl beliebig aus.
    • Geben Sie unter Kapazität den Wert 5 ein. Dadurch wird die Instanzkapazität auf 5 GB festgelegt.
    • Wählen Sie unter Version die Option 5.0 aus (empfohlen).
    • Wählen Sie in der Auswahl Autorisiertes Netzwerk die Option default aus.

Schritt 1: apphosting.yaml durch Ihre VPC-Netzwerk-ID ersetzen

  1. Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.
  2. Suchen Sie die VPC-Netzwerk-ID Ihrer Memorystore for Redis-Instanz. Häufig ist das default.
  3. Konfigurieren Sie die ausgehende VPC-Traffic-Konfiguration in apphosting.yaml mit der VPC-Netzwerk-ID:

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

Schritt 2: Umgebungsvariablen hinzufügen, die Ihre App an Redis weiterleiten

  1. Verbindungsinformationen (Host und Port) finden Sie in der Google Cloud-Konsole auf dem Tab „Verbindungen“ Ihrer Memorystore for Redis-Instanz.
  2. Stellen Sie mit den Umgebungsvariablen REDISPORT und REDISHOST eine Verbindung zu Redis her. Legen Sie diese in apphosting.yaml mit den Host- und Portwerten aus der Google Cloud-Konsole fest:

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

Schritt 3: Redis über Ihre App verwenden

  1. Installieren Sie das npm-Paket redis:

    npm install redis@latest

  2. Über den Code auf den Redis-Cache zugreifen Verwenden Sie die im vorherigen Schritt konfigurierten Umgebungsvariablen. So können Sie beispielsweise in einem Next.js-Routen-Handler aus einem Cache lesen:

    • 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 });
      }
      

Schritt 4 (optional): App für die lokale Entwicklung konfigurieren

Der Firebase App Hosting-Emulator kann Werte mit apphosting.emulator.yaml überschreiben. Hier können Sie den Wert von REDISHOST so ändern, dass er auf den localhost verweist, damit Sie lokal mit einer lokalen Redis-Installation entwickeln können.

  1. Redis auf Ihrem lokalen Computer installieren
  2. Erstellen oder bearbeiten Sie apphosting.emulators.yaml, um auf Ihre lokale Instanz zu verweisen:

    env:
      - variable: REDISHOST
        value: 127.0.0.1