يمكن للواجهة الخلفية لخدمة 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 for Redis في المشروع نفسه الذي تستخدمه للواجهة الخلفية و الاتصال به باستخدام الخروج المباشر من سحابة VPC.Google CloudFirebase App Hosting
الخطوة 0: إنشاء مثيل Memorystore for Redis
- انتقِل إلى صفحة
Memorystore for Redis
في الـ Google Cloud console.
- تأكَّد من اختيار المشروع نفسه الذي تستخدمه لخدمة Firebase App Hosting هو محدّد.
- إذا لم تتمكّن من الوصول إلى هذه الصفحة، تأكَّد من تفعيل الفوترة لمشروعك ومن تفعيل Memorystore API.
- انقر على إنشاء مثيل.
- اضبط المثيل الجديد باستخدام الإعدادات المفضّلة لديك. في ما يلي بعض القيم النموذجية التي يمكنك استخدامها:
- أدخِل
my-redis-cacheضِمن رقم تعريف المثيل. - أدخِل
Redis cacheضِمن الاسم المعروض. - اختَر أساسي ضِمن أداة اختيار المستوى. يشير المستوى الأساسي إلى عقدة Redis مستقلة، على عكس المستوى العادي الذي يستخدم عقدة طبق الأصل لإجراء نسخ احتياطي لبياناتك.
- اختَر منطقة الواجهة الخلفية لخدمة App Hosting من أداة اختيار المنطقة. احرص على ضبط هذه القيمة لتتطابق مع منطقة الواجهة الخلفية.
- اختَر أيّ من أداة اختيار المنطقة.
- أدخِل
5ضِمن السعة. يضبط ذلك سعة مثيلك على 5 غيغابايت. - اختَر
5.0ضِمن الإصدار (الإعداد المُقترَح). - اختَر الإعدادات التلقائية من أداة اختيار الشبكة المفوّضة.
- أدخِل
الخطوة 1: تعديل apphosting.yaml باستخدام رقم تعريف شبكة سحابة VPC
- انتقِل إلى صفحة شبكات سحابة VPC في Google Cloud Console.
- ابحث عن رقم تعريف شبكة سحابة 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 Console.
اتصِل بـ Redis باستخدام متغيّرات البيئة
REDISPORTوREDISHOST. اضبط هذه المتغيّرات فيapphosting.yamlباستخدام قيم المضيف والمنفذ من Google Cloud console: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.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(REDISPORT, REDISHOST) .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 للإشارة إلى المضيف المحلي حتى تتمكّن من التطوير محليًا باستخدام تثبيت محلي لـ Redis.
- ثبِّت Redis على جهازك المحلي.
أنشئ ملف
apphosting.emulators.yamlأو عدِّله للإشارة إلى مثيلك المحلي:env: - variable: REDISHOST value: 127.0.0.1