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

Серверная часть Firebase App Hosting может подключаться к сети виртуального частного облака (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 и подключиться к нему с помощью прямого выхода VPC .

Шаг 0. Создайте экземпляр Memorystore для Redis.

  1. Перейдите на страницу Memorystore для Redis в консоли Google Cloud .
    • Убедитесь, что выбран тот же проект, который вы используете для Firebase App Hosting .
    • Если вы не можете получить доступ к этой странице, убедитесь, что для вашего проекта включена оплата и включен API Memorystore .
  2. Выберите Создать экземпляр .
  3. Настройте новый экземпляр с предпочитаемыми вами настройками. Вот несколько примеров значений, которые вы можете использовать:
    • Введите my-redis-cache под идентификатором экземпляра .
    • Войдите в Redis cache в разделе «Отображаемое имя» .
    • Выберите «Базовый» под переключателем уровня. Базовый уровень обозначает автономный узел Redis, в отличие от стандартного уровня, который использует узел реплики для резервного копирования ваших данных.
    • Выберите регион серверной части App Hosting в меню выбора региона . Обязательно установите это значение в соответствии с регионом вашего бэкэнда.
    • Выберите любую из селектора зон.
    • Введите 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 , чтобы оно указывало на локальный хост, чтобы вы могли разрабатывать локально, используя локальную установку Redis.

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

    env:
      - variable: REDISHOST
        value: 127.0.0.1