Подключите хостинг приложений 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 , и подключиться к нему с помощью Direct VPC egress .

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

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