您的 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
中进行配置
使用 apphosting.yaml
文件中的 vpcAccess
映射来配置访问权限。请使用完全限定的广告联盟名称或 ID。使用 ID 可在具有不同连接器/网络的预演环境和生产环境之间实现可移植性。
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
示例:从 Next.js 应用连接到 Memorystore for Redis
Redis 或 Memcached 等缓存系统通常用于为应用构建快速的数据缓存层。此示例展示了如何在与 Firebase App Hosting 后端相同的 Google Cloud 项目中设置 Memorystore for Redis,并使用直接 VPC 出站流量连接到它。
第 0 步:创建 Memorystore for Redis 实例
- 前往 Google Cloud 控制台中的 Memorystore for Redis 页面。
- 请务必选择您用于 Firebase App Hosting 的同一项目。
- 如果您无法访问此页面,请确保已为您的项目启用结算功能,并且已启用 Memorystore API。
- 选择创建实例。
- 使用您的首选设置配置新实例。以下是可用的示例值:
- 在实例 ID 下输入
my-redis-cache
。 - 在显示名下输入
Redis cache
。 - 选择层级选择器下的基本。与使用副本节点来备份数据的标准层级相反,基本层级指定独立的 Redis 节点。
- 从区域选择器中选择 App Hosting 后端所在的区域。请务必将此值设置为与后端所在的区域一致。
- 从可用区选择器中选择任意。
- 在容量下输入
5
。这会将您的实例容量设置为 5 GB。 - 选择版本下的
5.0
(推荐)。 - 从已获授权的网络选择器中选择默认。
- 在实例 ID 下输入
第 1 步:将 apphosting.yaml
更新为您的 VPC 网络 ID
- 访问 Google Cloud 控制台中的 VPC 网络页面。
- 找到 Memorystore for Redis 实例的 VPC 网络 ID(通常为
default
)。 使用 VPC 网络 ID 在
apphosting.yaml
中设置直接 VPC 出站流量配置:runConfig: vpcAccess: egress: PRIVATE_RANGES_ONLY # Default value networkInterfaces: - network: my-network-id
第 2 步:添加将应用定向到 Redis 的环境变量
- 在 Google Cloud 控制台中,找到 Memorystore for Redis 实例的“连接”标签页,然后在其中查找连接信息(主机和端口)。
使用
REDISPORT
和REDISHOST
环境变量连接到 Redis。使用 Google Cloud 控制台中的主机和端口值在apphosting.yaml
中设置这些值: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