Ваш бэкенд Firebase App Hosting может подключаться к сети Virtual Private Cloud (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
- Перейдите на страницу Memorystore для Redis в консоли Google Cloud .
- Убедитесь, что выбран тот же проект, который вы используете для Firebase App Hosting .
- Если вы не можете получить доступ к этой странице, убедитесь, что для вашего проекта включена функция выставления счетов и включен API Memorystore .
- Выберите Создать экземпляр .
- Настройте новый экземпляр с вашими предпочтительными параметрами. Вот несколько примеров значений, которые вы можете использовать:
- Введите
my-redis-cache
в поле Instance ID . - Введите
Redis cache
в поле Отображаемое имя . - Выберите Basic под селектором уровней. Basic уровень обозначает автономный узел Redis, в отличие от стандартного уровня, который использует узел-реплику для резервного копирования ваших данных.
- Выберите регион вашего бэкенда App Hosting из селектора Region . Обязательно установите это значение, чтобы оно соответствовало региону вашего бэкенда.
- Выберите любую зону из селектора.
- Введите
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
, чтобы оно указывало на localhost, чтобы вы могли разрабатывать локально, используя локальную установку Redis.
- Установите Redis на локальную машину
Создайте или отредактируйте
apphosting.emulators.yaml
для ссылки на ваш локальный экземпляр:env: - variable: REDISHOST value: 127.0.0.1