ربط ميزة "استضافة التطبيقات" من 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 للحصول على تفاصيل الأسعار.

ضبط الإعدادات في 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

  1. انتقِل إلى صفحة Memorystore for Redis في الـ Google Cloud console.
    • تأكَّد من اختيار المشروع نفسه الذي تستخدمه لخدمة Firebase App Hosting هو محدّد.
    • إذا لم تتمكّن من الوصول إلى هذه الصفحة، تأكَّد من تفعيل الفوترة لمشروعك ومن تفعيل Memorystore API.
  2. انقر على إنشاء مثيل.
  3. اضبط المثيل الجديد باستخدام الإعدادات المفضّلة لديك. في ما يلي بعض القيم النموذجية التي يمكنك استخدامها:
    • أدخِل my-redis-cache ضِمن رقم تعريف المثيل.
    • أدخِل Redis cache ضِمن الاسم المعروض.
    • اختَر أساسي ضِمن أداة اختيار الطبقة. تشير الطبقة الأساسية إلى عقدة Redis مستقلة، على عكس الطبقة العادية التي تستخدِم عقدة طبق الأصل لإجراء نسخ احتياطي لبياناتك.
    • اختَر منطقة الواجهة الخلفية لخدمة App Hosting من أداة اختيار المنطقة. احرص على ضبط هذه القيمة لتتطابق مع منطقة الواجهة الخلفية.
    • اختَر أي من أداة اختيار المنطقة.
    • أدخِل 5 ضِمن السعة. يضبط ذلك سعة مثيلك على 5 غيغابايت.
    • اختَر 5.0 ضِمن الإصدار (الإعداد المُقترَح).
    • اختَر الإعدادات التلقائية من أداة اختيار الشبكة المفوّضة.

الخطوة 1: تعديل apphosting.yaml باستخدام رقم تعريف شبكة VPC

  1. انتقِل إلى صفحة شبكات VPC في Google Cloud Console.
  2. ابحث عن رقم تعريف شبكة VPC لمثيل Memorystore for Redis (سيكون غالبًا default).
  3. اضبط إعدادات الخروج المباشر من سحابة VPC في apphosting.yaml باستخدام رقم تعريف شبكة VPC:

    runConfig:
      vpcAccess:
        egress: PRIVATE_RANGES_ONLY # Default value
      networkInterfaces:
        - network: my-network-id
    

الخطوة 2: إضافة متغيّرات البيئة التي توجّه تطبيقك إلى Redis

  1. ابحث عن معلومات الاتصال (المضيف والمنفذ) في علامة التبويب "عمليات الربط" لمثيل Memorystore for Redis في Google Cloud Console.
  2. اتصِل بـ 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 من تطبيقك

  1. ثبِّت حزمة redis npm:

    npm install redis@latest

  2. يمكنك الوصول إلى ذاكرة التخزين المؤقت في 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.

  1. ثبِّت Redis على جهازك المحلي.
  2. أنشئ ملف apphosting.emulators.yaml أو عدِّله للإشارة إلى مثيلك المحلي:

    env:
      - variable: REDISHOST
        value: 127.0.0.1