Łączenie Hostingu aplikacji Firebase z siecią VPC

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

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

Wybierz sposób łączenia się z siecią VPC

  • Bezpośredni ruch wychodzący VPC: prostszy, szybszy i tańszy. Używa 1 adresu IP na kontener. Zalecany do większości zastosowań.
  • Łączniki bezserwerowe: pulują adresy IP na potrzeby większych aplikacji. Wymagają płatności za bazową maszynę wirtualną. Szczegółowe informacje o cenach znajdziesz w sekcji „Bezserwerowy dostęp do VPC” na stronie z cennikiem VPC.

Konfigurowanie w apphosting.yaml

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

Konfiguracja bezpośredniego ruchu wychodzącego VPC (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 łącznika bezserwerowego (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 w aplikacji. W tym przykładzie pokazujemy, jak skonfigurować Memorystore for Redis w tym samym Google Cloud projekcie co backend i połączyć się z nim przy użyciu Direct VPC egress.Firebase App Hosting

Krok 0. Utwórz instancję Memorystore for Redis

  1. W konsoli otwórz stronę Memorystore for Redis.Google Cloud
    • Upewnij się, że wybrany jest ten sam projekt, którego używasz na potrzeby Firebase App Hosting jest wybrany.
    • Jeśli nie możesz otworzyć tej strony, sprawdź, czy w projekcie włączono płatności i czy włączono interfejs Memorystore API.
  2. Kliknij Utwórz instancję.
  3. Skonfiguruj nową instancję, używając 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 typu wybierz Podstawowy. 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.
    • W selektorze Region wybierz region backendu App Hosting. Pamiętaj, aby ustawić tę wartość tak, aby pasowała do regionu backendu.
    • W selektorze strefy wybierz dowolny.
    • W polu Rozmiar wpisz 5. Ustawia to rozmiar instancji na 5 GB.
    • W sekcji Wersja wybierz 5.0 (zalecane).
    • W selektorze Autoryzowana sieć wybierz default.

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

  1. W konsoli otwórz stronę Sieci VPC .Google Cloud
  2. Znajdź identyfikator sieci VPC dla instancji Memorystore for Redis (często jest to default).
  3. Skonfiguruj bezpośredni ruch wychodzący VPC w pliku 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 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żyj Redis w aplikacji

  1. Zainstaluj pakiel 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, jak można odczytać dane z pamięci podręcznej w obsłudze 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ę na potrzeby lokalnego programowania

Emulator Firebase App Hosting może zastępować wartości za pomocą apphosting.emulator.yaml. W tym pliku możesz zmienić wartość REDISHOST, aby wskazywała localhost, dzięki czemu możesz programować lokalnie, używając lokalnej instalacji Redis.

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

    env:
      - variable: REDISHOST
        value: 127.0.0.1