Серверная часть 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.
- Перейдите на страницу Memorystore для Redis в консоли Google Cloud .
- Убедитесь, что выбран тот же проект, который вы используете для Firebase App Hosting .
- Если вы не можете получить доступ к этой странице, убедитесь, что для вашего проекта включена оплата и включен API Memorystore .
- Выберите Создать экземпляр .
- Настройте новый экземпляр с предпочитаемыми вами настройками. Вот несколько примеров значений, которые вы можете использовать:
- Введите
my-redis-cache
под идентификатором экземпляра . - Войдите в
Redis cache
в разделе «Отображаемое имя» . - Выберите «Базовый» под переключателем уровня. Базовый уровень обозначает автономный узел Redis, в отличие от стандартного уровня, который использует узел реплики для резервного копирования ваших данных.
- Выберите регион серверной части App Hosting в меню выбора региона . Обязательно установите это значение в соответствии с регионом вашего бэкэнда.
- Выберите любую из селектора зон.
- Введите
5
в разделе Емкость . Это установит емкость вашего экземпляра на 5 ГБ. - Выберите
5.0
в разделе «Версия (рекомендуется)». - Выберите значение по умолчанию в селекторе авторизованной сети .
- Введите
Шаг 1. Обновите apphosting.yaml
, указав идентификатор сети VPC.
- Посетите страницу сетей VPC в консоли Google Cloud .
- Найдите идентификатор сети VPC для вашего экземпляра Memorystore для Redis (часто это значение
default
). Установите конфигурацию прямого выхода VPC в
apphosting.yaml
, используя идентификатор сети VPC:runConfig: vpcAccess: egress: PRIVATE_RANGES_ONLY # Default value networkInterfaces: - network: my-network-id
Шаг 2. Добавьте переменные среды, которые направляют ваше приложение в Redis.
- Найдите информацию о подключении (хост и порт) на вкладке «Подключения» вашего экземпляра Memorystore для 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 из своего приложения.
Установите пакет redis npm:
npm install redis@latest
Получите доступ к кешу 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.
- Установите Redis на свой локальный компьютер
Создайте или отредактируйте
apphosting.emulators.yaml
, чтобы он ссылался на ваш локальный экземпляр:env: - variable: REDISHOST value: 127.0.0.1