Łączenie Hostingu aplikacji Firebase z siecią VPC

Twój backend Firebase App Hosting może łączyć się z siecią prywatnego środowiska wirtualnego w chmurze (VPC). Dzięki temu backend Firebase App Hostingmoże uzyskiwać dostęp do usług backendu, które nie są dostępne przy użyciu publicznych adresów IP, takich jak Cloud SQL, Spanner, Cloud MemorystoreCompute Engine czy wewnętrzne mikrousługi Kubernetes.

Dostęp do VPC jest dostępny tylko w czasie działania (z kontenera Cloud Run), a nie w czasie kompilacji (Cloud Build).

Skonfiguruj w domenie apphosting.yaml

Aby skonfigurować dostęp, użyj mapowania vpcAccess w pliku apphosting.yaml. Użyj pełnej i jednoznacznej nazwy sieci lub identyfikatora. Używanie identyfikatorów umożliwia przenoszenie danych między środowiskami testowym i produkcyjnym z różnymi łącznikami lub sieciami.

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

Przykład: łączenie się z Memorystore for Redis z aplikacji Next.js

Systemy buforowania, takie jak Redis lub Memcached, są powszechnie używane do tworzenia szybkiej warstwy buforowania danych dla aplikacji. W tym przykładzie pokazujemy, jak skonfigurować Memorystore for Redis w tym samym projekcie Google Cloud co backend Firebase App Hosting i połączyć się z nim za pomocą bezpośredniego wyjścia z sieci VPC.

Krok 0. Utwórz instancję Memorystore for Redis

  1. Otwórz stronę Memorystore for Redis w konsoli Google Cloud.
    • Upewnij się, że wybrany jest ten sam projekt, którego używasz w przypadku Firebase App Hosting.
    • Jeśli nie możesz uzyskać dostępu do tej strony, sprawdź, czy w projekcie włączono płatności i czy włączono Memorystore API.
  2. Kliknij Utwórz instancję.
  3. Skonfiguruj nową instancję z preferowanymi ustawieniami. Oto kilka przykładowych wartości, których możesz użyć:
    • W polu Identyfikator instancji wpisz my-redis-cache.
    • W polu Wyświetlana nazwa wpisz Redis cache.
    • Wybierz Podstawowy w selektorze typów. Typ podstawowy oznacza samodzielny węzeł Redis, w przeciwieństwie do typu standardowego, który używa węzła repliki do tworzenia kopii zapasowych danych.
    • Wybierz region backendu App Hosting w selektorze Region. Ustaw tę wartość tak, aby pasowała do regionu backendu.
    • W selektorze stref wybierz dowolną strefę.
    • W polu Rozmiar wpisz 5. Pojemność instancji zostanie ustawiona na 5 GB.
    • W sekcji Wersja (zalecane) kliknij 5.0.
    • W selektorze Autoryzowana sieć wybierz domyślna.

Krok 1. Zaktualizuj apphosting.yaml, podając identyfikator sieci VPC

  1. Otwórz stronę Sieci VPC w konsoli Google Cloud.
  2. Znajdź identyfikator sieci VPC instancji Memorystore for Redis (zwykle jest to default).
  3. Skonfiguruj bezpośrednie połączenie VPC w apphosting.yaml, używając identyfikatora sieci VPC:

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

Krok 2. Dodaj zmienne środowiskowe, które kierują aplikację do Redis

  1. Informacje o połączeniu (host i port) znajdziesz na karcie „Połączenia” instancji Memorystore for Redis w konsoli Google Cloud.
  2. Połącz się z Redis za pomocą zmiennych środowiskowych REDISPORT i REDISHOST. Ustaw te wartości w apphosting.yaml, używając wartości hosta i portu z Google Cloud konsoli:

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

Krok 3. Używaj Redis w aplikacji

  1. Zainstaluj pakiet npm redis:

    npm install redis@latest

  2. Uzyskaj dostęp do pamięci podręcznej redis z poziomu kodu. Użyj zmiennych środowiskowych skonfigurowanych w poprzednim kroku. Oto przykład odczytywania danych z pamięci podręcznej w programie obsługi trasy 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 });
      }
      

Krok 4 (opcjonalny). Skonfiguruj aplikację pod kątem lokalnego środowiska programistycznego

Firebase App HostingEmulator może zastępować wartości za pomocąapphosting.emulator.yaml. W tym miejscu możesz zmienić wartość REDISHOST, aby wskazywała host lokalny, dzięki czemu możesz tworzyć aplikacje lokalnie za pomocą lokalnej instalacji Redis.

  1. Instalowanie Redis na komputerze lokalnym
  2. Utwórz lub edytuj apphosting.emulators.yaml, aby odwołać się do lokalnej instancji:

    env:
      - variable: REDISHOST
        value: 127.0.0.1