Бэкенд 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 for Redis из приложения Next.js
Системы кеширования, такие как Redis или Memcached, обычно используются для создания быстрого уровня кеширования данных для приложения. В этом примере показано, как настроить Memorystore для Redis в том же проекте Google Cloud, что и ваш бэкенд Firebase App Hosting, и подключиться к нему с помощью прямого исходящего трафика VPC.
Шаг 0. Создайте экземпляр Memorystore for Redis
- Перейдите на страницу Memorystore for Redis в консоли Google Cloud.
- Убедитесь, что выбран тот же проект, который вы используете для Firebase App Hosting.
- Если у вас нет доступа к этой странице, убедитесь, что для проекта включены платежные функции и Memorystore API.
- Нажмите Create Instance (Создать экземпляр).
- Задайте нужные настройки для нового экземпляра. Вот некоторые примеры значений:
- В поле Instance ID (Идентификатор экземпляра) введите
my-redis-cache. - В поле Отображаемое название введите
Redis cache. - В селекторе уровней выберите Базовый. Базовый уровень обозначает отдельный узел Redis, в отличие от стандартного уровня, который использует узел реплики для резервного копирования ваших данных.
- Выберите регион серверной части App Hosting в меню Region (Регион). Убедитесь, что это значение соответствует региону вашего бэкенда.
- В селекторе зон выберите любую.
- В поле Вместимость введите
5. В результате емкость экземпляра будет установлена на уровне 5 ГБ. - В разделе Версия выберите
7.0(или рекомендуемую версию по умолчанию). - В меню Авторизованная сеть выберите вариант По умолчанию.
- В поле Instance ID (Идентификатор экземпляра) введите
Шаг 1. Укажите идентификатор сети VPC в переменной apphosting.yaml
- Перейдите на страницу VPC networks (Сети VPC) в консоли Google Cloud.
- Найдите идентификатор сети VPC для своего экземпляра Memorystore for Redis (часто это
default). Задайте конфигурацию прямого исходящего трафика VPC в
apphosting.yaml, используя идентификатор сети VPC:runConfig: vpcAccess: egress: PRIVATE_RANGES_ONLY # Default value networkInterfaces: - network: my-network-id
Шаг 2. Добавьте переменные среды, которые направляют приложение в Redis
- Информацию о подключении (хост и порт) можно найти на вкладке Connections (Подключения) экземпляра Memorystore for Redis в консоли Google Cloud.
Подключитесь к 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 в приложении
Установите пакет npm redis:
npm install redis@latestДоступ к кэшу Redis из кода. Используйте переменные среды, настроенные на предыдущем шаге. Например, вот как можно читать из кеша в обработчике маршрутов Next.js:
src/lib/redis.jsimport { 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({ socket: { host: REDISHOST, port: Number(REDISPORT), }, }) .on("error", (err) => console.error("Redis Client Error", err)) .connect(); } return redisClient; }src/app/counter/route.jsimport { 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.
- Установите Redis на локальный компьютер
Создайте или измените
apphosting.emulator.yaml, чтобы сослаться на локальный экземпляр:env: - variable: REDISHOST value: 127.0.0.1