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

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

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

Выберите способ подключения к сети VPC.

  • Прямой исходящий трафик VPC : проще, быстрее и дешевле. Использует один IP-адрес на контейнер. Рекомендуется для большинства сценариев использования.
  • Бессерверные коннекторы : объединяют IP-адреса для более крупных приложений. Требует оплаты за базовую виртуальную машину. Подробную информацию о ценах см. в разделе «Доступ к VPC без серверов» на странице цен VPC .

Настройте в файле apphosting.yaml

Используйте сопоставление vpcAccess в файле apphosting.yaml для настройки доступа. Используйте либо полное имя сети/коннектора, либо идентификатор. Использование идентификаторов обеспечивает переносимость между тестовой и производственной средами с различными коннекторами/сетями.

Прямая настройка исходящего трафика 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

Конфигурация бессерверного коннектора ( apphosting.yaml ):

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

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

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

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

  1. Перейдите на страницу Memorystore for 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 for Redis (часто это будет default ).
  3. Настройте конфигурацию прямого исходящего трафика VPC в файле apphosting.yaml , используя идентификатор сети VPC:

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

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

  1. Информацию о подключении (хост и порт) можно найти на вкладке «Подключения» вашего экземпляра Memorystore for 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