Подключите хостинг приложений Firebase к сети VPC

Ваш бэкенд Firebase App Hosting может подключаться к сети Virtual Private Cloud (VPC) . Это позволяет вашему бэкенду Firebase App Hosting получать доступ к бэкенд-сервисам, недоступным с использованием публичных IP-адресов, таким как Cloud SQL, Spanner, Cloud Memorystore, Compute Engine или внутренние микросервисы Kubernetes.

Доступ к VPC возможен только во время выполнения (из контейнера Cloud Run ), а не во время сборки ( Cloud Build ).

Настроить в apphosting.yaml

Используйте сопоставление vpcAccess в файле 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

Пример: подключение к Memorystore для Redis из приложения Next.js

Системы кэширования, такие как Redis или Memcached, обычно используются для создания быстрого слоя кэширования данных для приложения. В этом примере показано, как настроить Memorystore для Redis в том же проекте Google Cloud , что и ваш бэкэнд Firebase App Hosting и подключиться к нему с помощью Direct VPC egress .

Шаг 0: Создайте хранилище памяти для экземпляра Redis

  1. Перейдите на страницу Memorystore для Redis в консоли Google Cloud .
    • Убедитесь, что выбран тот же проект, который вы используете для Firebase App Hosting .
    • Если вы не можете получить доступ к этой странице, убедитесь, что для вашего проекта включена функция выставления счетов и включен API Memorystore .
  2. Выберите Создать экземпляр .
  3. Настройте новый экземпляр с вашими предпочтительными параметрами. Вот несколько примеров значений, которые вы можете использовать:
    • Введите my-redis-cache в поле Instance ID .
    • Введите Redis cache в поле Отображаемое имя .
    • Выберите Basic под селектором уровней. Basic уровень обозначает автономный узел Redis, в отличие от стандартного уровня, который использует узел-реплику для резервного копирования ваших данных.
    • Выберите регион вашего бэкенда App Hosting из селектора Region . Обязательно установите это значение, чтобы оно соответствовало региону вашего бэкенда.
    • Выберите любую зону из селектора.
    • Введите 5 в поле Емкость . Это установит емкость вашего экземпляра на 5 ГБ.
    • В разделе «Версия» выберите 5.0 (рекомендуется).
    • Выберите значение по умолчанию в селекторе авторизованных сетей .

Шаг 1: Обновите apphosting.yaml , указав свой сетевой идентификатор VPC.

  1. Посетите страницу сетей VPC в консоли Google Cloud .
  2. Найдите идентификатор сети VPC для вашего экземпляра Memorystore для Redis (часто он будет иметь default ).
  3. Настройте прямую конфигурацию выхода VPC в apphosting.yaml , используя идентификатор сети VPC:

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

Шаг 2: Добавьте переменные среды, которые направляют ваше приложение в Redis

  1. Информацию о подключении (хост и порт) можно найти на вкладке «Подключения» вашего экземпляра Memorystore для Redis в консоли Google Cloud .
  2. Подключитесь к Redis с помощью переменных среды REDISPORT и REDISHOST . Установите их в apphosting.yaml , используя значения хоста и порта из консоли Google Cloud :

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

Шаг 3: Используйте Redis из вашего приложения

  1. Установите пакет redis npm:

    npm install redis@latest

  2. Получите доступ к вашему кэшу redis из вашего кода. Используйте переменные среды, настроенные на предыдущем шаге. Например, вот как можно прочитать из кэша в обработчике маршрутов 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 });
      }
      

Шаг 4 (необязательно): Настройте приложение для локальной разработки

Эмулятор Firebase App Hosting может переопределять значения с помощью apphosting.emulator.yaml . Здесь вы можете изменить значение REDISHOST , чтобы оно указывало на localhost, чтобы вы могли разрабатывать локально, используя локальную установку Redis.

  1. Установите Redis на локальную машину
  2. Создайте или отредактируйте apphosting.emulators.yaml для ссылки на ваш локальный экземпляр:

    env:
      - variable: REDISHOST
        value: 127.0.0.1