Łą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 backendFirebase App Hosting może uzyskiwać dostęp do usług backendowych, do których nie można uzyskać dostępu za pomocą 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 wykonywania (z kontenera Cloud Run), a nie w czasie kompilacji (Cloud Build).

Konfiguracja w apphosting.yaml

Aby skonfigurować dostęp, użyj mapowania vpcAccess w pliku apphosting.yaml. Użyj pełnej nazwy sieci lub identyfikatora. Korzystanie z identyfikatorów umożliwia przenoszenie danych między środowiskiem testowym a produkcyjnym z różnymi złączami/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 czy Memcached, są często 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 VPC.

Krok 0. Utwórz instancję Memorystore for Redis

  1. W konsoli Google Cloud otwórz stronę Memorystore for Redis.
    • Upewnij się, że wybrany jest ten sam projekt, którego używasz w przypadku Firebase App Hosting.
    • Jeśli nie możesz otworzyć tej strony, sprawdź, czy w projekcie jest włączone rozliczanie i czy masz włączony interfejs Memorystore API.
  2. Kliknij Utwórz instancję.
  3. Skonfiguruj nową instancję, korzystając z preferowanych ustawień. 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.
    • W selektorze typów wybierz Podstawowy. Poziom podstawowy oznacza samodzielny węzeł Redis, w przeciwieństwie do poziomu standardowego, który używa węzła repliki do tworzenia kopii zapasowych danych.
    • W selektorze Region wybierz region backendu App Hosting. Upewnij się, że ta wartość jest zgodna z regionem backendu.
    • W selektorze stref wybierz dowolną.
    • W polu Rozmiar wpisz 5. Spowoduje to ustawienie pojemności instancji na 5 GB.
    • W sekcji Wersja kliknij 5.0 (zalecane).
    • 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 (często będzie to default).
  3. Skonfiguruj bezpośrednie wyjście 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 je w konsoli apphosting.yaml, używając wartości hosta i portu z konsoli Google Cloud:

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

Krok 3. Użyj 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 odczytu z pamięci podręcznej w obiekcie obsługującym trasę w 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ę na potrzeby lokalnego środowiska programistycznego

Emulator Firebase App Hosting może zastąpić wartości za pomocą parametru apphosting.emulator.yaml. Tutaj możesz zmienić wartość REDISHOST, aby wskazywała localhost, dzięki czemu będziesz mieć możliwość tworzenia lokalnie za pomocą lokalnej instalacji Redis.

  1. Instalowanie Redis na komputerze lokalnym
  2. Utwórz lub zmodyfikuj apphosting.emulators.yaml, aby wskazać lokalną instancję:

    env:
      - variable: REDISHOST
        value: 127.0.0.1