Łączenie Hostingu aplikacji Firebase z siecią VPC

Backend Firebase App Hosting może łączyć się z siecią prywatnego środowiska wirtualnego w chmurze (VPC). Dzięki temu backend Firebase App Hosting moż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 Memorystore, Compute Engine czy wewnętrzne mikroserwisy Kubernetes.

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

Wybieranie sposobu łączenia się z siecią VPC

Skonfiguruj w: apphosting.yaml

Aby skonfigurować dostęp, użyj mapowania vpcAccess w pliku apphosting.yaml. Użyj pełnej i jednoznacznej nazwy sieci/oprogramowania sprzęgającego lub identyfikatora. Używanie identyfikatorów umożliwia przenoszenie danych między środowiskami testowymi i środowiskami produkcyjnymi z różnymi oprogramowaniami sprzęgającymi i sieciami.

Konfiguracja bezpośredniego połączenia VPC dla ruchu wychodzącego (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

Konfiguracja bezserwerowego oprogramowania sprzęgającego (apphosting.yaml):

runConfig:
  vpcAccess:
    egress: ALL_TRAFFIC
    connector: connector-id

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

Systemy buforowania, takie jak Redis czy Memcached, są powszechnie używane do tworzenia szybkiej warstwy buforowania danych dla aplikacji. Ten przykład pokazuje, 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 ruchu wychodzącego 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 Firebase App Hosting.
    • Jeśli nie możesz uzyskać dostępu do tej strony, sprawdź, czy w projekcie są włączone płatności i czy masz włączony interfejs 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.
    • W selektorze typu wybierz Podstawowy. Abonament podstawowy oznacza samodzielny węzeł Redis, w przeciwieństwie do abonamentu standardowego, który używa węzła repliki do tworzenia kopii zapasowych danych.
    • Wybierz region backendu App Hosting w selektorze Region. Upewnij się, że ta wartość odpowiada regionowi backendu.
    • W selektorze stref wybierz any (dowolna).
    • W polu Rozmiar wpisz 5. Spowoduje to ustawienie pojemności instancji na 5 GB.
    • W sekcji Wersja wybierz 7.0 (lub domyślną zalecaną wersję).
    • W selektorze Autoryzowana sieć wybierz default.

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. Ustaw konfigurację bezpośredniego połączenia 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 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 z 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 module obsługi tras 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({
            socket: {
              host: REDISHOST,
              port: Number(REDISPORT),
            },
          })
            .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ę do lokalnego programowania

Emulator Firebase App Hosting może zastępować wartości za pomocą apphosting.emulator.yaml. Tutaj możesz zmienić wartość REDISHOST, aby wskazywała na host lokalny, co pozwoli Ci programować lokalnie przy użyciu lokalnej instalacji Redis.

  1. Instalowanie Redis na komputerze lokalnym
  2. Utwórz lub zmodyfikuj plik apphosting.emulator.yaml, aby odwoływał się do instancji lokalnej:

    env:
      - variable: REDISHOST
        value: 127.0.0.1