ربط ميزة "استضافة التطبيقات" من 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
للاطّلاع على تفاصيل الأسعار.
استخدِم عملية الربط 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 for Redis في مشروع Google Cloud نفسه الذي يتضمّن الخلفية Firebase App Hosting وكيفية الاتصال به باستخدام الخروج المباشر من شبكة VPC.
الخطوة 0: إنشاء مثيل Memorystore for Redis
- انتقِل إلى صفحة
Memorystore for Redis
في وحدة تحكّم Google Cloud.
- تأكَّد من اختيار المشروع نفسه الذي تستخدمه في Firebase App Hosting.
- إذا لم يكن بإمكانك الوصول إلى هذه الصفحة، تأكَّد من تفعيل الفوترة لمشروعك ومن تفعيل واجهة برمجة التطبيقات Memorystore API.
- انقر على إنشاء مثيل.
- اضبط المثيل الجديد باستخدام الإعدادات المفضّلة لديك. في ما يلي بعض الأمثلة على القيم التي يمكنك استخدامها:
- أدخِل
my-redis-cache
ضمن رقم تعريف المثيل.
- أدخِل
Redis cache
ضمن الاسم المعروض.
- اختَر أساسي ضمن أداة اختيار المستوى. تشير الفئة الأساسية إلى عقدة Redis مستقلة، على عكس الفئة العادية التي تستخدم عقدة طبق الأصل لإنشاء نسخة احتياطية من بياناتك.
- اختَر منطقة الخلفية App Hosting من أداة اختيار المنطقة.
احرص على ضبط هذه القيمة لتتطابق مع منطقة الخلفية.
- اختَر أي من أداة اختيار المنطقة.
- أدخِل
5
ضمن السعة. يؤدي ذلك إلى ضبط سعة الجهاز الظاهري على 5 غيغابايت.
- انقر على
5.0
ضِمن الإصدار (يُنصح به).
- اختَر الإعدادات التلقائية من أداة اختيار الشبكة المعتمَدة.
الخطوة 1: تعديل apphosting.yaml
باستخدام معرّف شبكة السحابة الخاصة الافتراضية (VPC)
- انتقِل إلى
صفحة شبكات السحابة الخاصة الافتراضية (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
- ابحث عن معلومات الاتصال (المضيف والمنفذ) في علامة التبويب "عمليات الربط" الخاصة بمثيل 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 من تطبيقك
ثبِّت حزمة 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
إنّ محتوى هذه الصفحة مرخّص بموجب ترخيص Creative Commons Attribution 4.0 ما لم يُنصّ على خلاف ذلك، ونماذج الرموز مرخّصة بموجب ترخيص Apache 2.0. للاطّلاع على التفاصيل، يُرجى مراجعة سياسات موقع Google Developers. إنّ Java هي علامة تجارية مسجَّلة لشركة Oracle و/أو شركائها التابعين.
تاريخ التعديل الأخير: 2025-08-08 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2025-08-08 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["\u003cbr /\u003e\n\nYour Firebase App Hosting backend can connect to a [Virtual Private Cloud\n(VPC)](https://cloud.google.com/vpc/docs) network. This allows your\nFirebase App Hosting backend to access backend services not accessible using\npublic IP addresses, such as Cloud SQL, Spanner, Cloud Memorystore,\nCompute Engine, or Kubernetes internal microservices.\n\nVPC access is only available at runtime (from your Cloud Run\ncontainer), not at build time (Cloud Build).\n\nChoose how to connect to a VPC network\n\n- [Direct VPC\n Egress](https://cloud.google.com/run/docs/configuring/vpc-direct-vpc): Simpler, faster, and less expensive. Uses one IP address per container. Recommended for most use cases.\n- [Serverless\n Connectors](https://cloud.google.com/vpc/docs/serverless-vpc-access): Pools IP addresses for larger applications. Requires payment for the underlying VM. See \"Serverless VPC Access\" in the [VPC pricing page](https://cloud.google.com/vpc/network-pricing) for pricing details.\n\nConfigure in `apphosting.yaml`\n\nUse the `vpcAccess` mapping in your `apphosting.yaml` file to configure access.\nUse either a fully qualified network/connector name or an ID. Using IDs allows\nfor portability between staging and production environments with different\nconnectors/networks.\n\nDirect VPC Egress Configuration (`apphosting.yaml`): \n\n runConfig:\n vpcAccess:\n egress: PRIVATE_RANGES_ONLY # Default value\n networkInterfaces:\n # Specify at least one of network and/or subnetwork\n - network: my-network-id\n subnetwork: my-subnetwork-id\n\nServerless Connector Configuration (`apphosting.yaml`): \n\n runConfig:\n vpcAccess:\n egress: ALL_TRAFFIC\n connector: connector-id\n\nExample: connect to Memorystore for Redis from a Next.js app\n\nCaching systems like Redis or Memcached are commonly used to build a fast data\ncaching layer for an app. This example shows you how to set up\n[Memorystore for Redis](https://cloud.google.com/memorystore/docs/redis/memorystore-for-redis-overview)\nin the same Google Cloud project as your Firebase App Hosting backend and\nconnect to it using\n[Direct VPC egress](https://cloud.google.com/run/docs/configuring/vpc-direct-vpc).\n\nStep 0: Create a Memorystore for Redis instance **Note:** you may also be prompted to create a [service connection policy](https://cloud.google.com/vpc/docs/about-service-connection-policies) as part of this setup.\n\n1. Go to the [*Memorystore for Redis* page](https://console.cloud.google.com/memorystore/redis/instances) in the Google Cloud console.\n - Make sure the same project you're using for Firebase App Hosting is selected.\n - If you can't access this page, make sure billing is enabled for your project and that you've enabled the [Memorystore API](https://console.cloud.google.com/apis/dashboard).\n2. Select **Create Instance**.\n3. Configure the new instance with your preferred settings. Here are some example values you can use:\n - Enter `my-redis-cache` under **Instance ID**.\n - Enter `Redis cache` under **Display name**.\n - Choose **Basic** under the tier selector. Basic tier designates a standalone Redis node, as opposed to standard tier, which uses a replica node to backup your data.\n - Choose your App Hosting backend's region from the **Region** selector. **Be sure to set this value to match the region of your backend.**\n - Choose **any** from the zone selector.\n - Enter `5` under **Capacity**. This sets your instance capacity to 5 GB.\n - Select `5.0` under **Version** (recommended).\n - Choose **default** from the **Authorized network** selector.\n\nStep 1: Update `apphosting.yaml` with your VPC network ID\n\n1. Visit the [VPC networks page](/docs/app-hosting/console.cloud.google.com/networking/networks/list) in the Google Cloud console.\n2. Find the VPC network ID for your Memorystore for Redis instance (it will often be `default`).\n3. Set direct VPC egress configuration in `apphosting.yaml` using the VPC\n network ID:\n\n runConfig:\n vpcAccess:\n egress: PRIVATE_RANGES_ONLY # Default value\n networkInterfaces:\n - network: my-network-id\n\nStep 2: Add environment variables that direct your app to Redis\n\n1. Find connection information (host and port) in the \"Connections\" tab of your Memorystore for Redis instance in the Google Cloud console.\n2. Connect to Redis with `REDISPORT` and `REDISHOST` environment variables. Set\n these in `apphosting.yaml` using the host and port values from the\n Google Cloud console:\n\n env:\n # Sample only. Use actual values provided by Memorystore\n - variable: REDISPORT\n value: 6379\n - variable: REDISHOST\n value: 10.127.16.3\n\nStep 3: Use redis from your app\n\n1. Install the [redis](https://www.npmjs.com/package/redis) npm package:\n\n `npm install redis@latest`\n2. Access your redis cache from your code. Use the environment variables\n configured in the previous step. For example, here's how you might read from\n a cache in a Next.js route handler:\n\n - `src/lib/redis.js`\n\n import { createClient } from \"redis\";\n\n // Set these environment variables in apphosting.yaml\n const REDISHOST = process.env.REDISHOST;\n const REDISPORT = process.env.REDISPORT;\n\n let redisClient;\n\n export async function getClient(req, res) {\n // Only connect if a connection isn't already available\n if (!redisClient) {\n redisClient = await createClient(REDISPORT, REDISHOST)\n .on(\"error\", (err) =\u003e console.error(\"Redis Client Error\", err))\n .connect();\n }\n\n return redisClient;\n }\n\n - `src/app/counter/route.js`\n\n import { getClient } from \"@/lib/redis.js\";\n\n export async function GET(request) {\n const redisClient = await getClient();\n const count = await redisClient.get(\"counter\");\n\n return Response.json({ count });\n }\n\n export async function POST(request) {\n const redisClient = await getClient();\n const count = await redisClient.incr(\"counter\");\n\n return Response.json({ count });\n }\n\nStep 4 (optional): Configure your app for local development\n\nThe Firebase App Hosting emulator can override values using\n`apphosting.emulator.yaml`. Here, you can change the value of `REDISHOST` to\npoint to the localhost so that you can develop locally using a local\ninstallation of Redis.\n\n1. [Install Redis on your local machine](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/)\n2. Create or edit `apphosting.emulators.yaml` to reference your local instance:\n\n env:\n - variable: REDISHOST\n value: 127.0.0.1"]]