ربط ميزة "استضافة التطبيقات" من Firebase بشبكة VPC

يمكن أن تتصل الخلفية في Firebase App Hosting بشبكة سحابة إلكترونية خاصة افتراضية (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 for Redis من تطبيق Next.js

تُستخدَم أنظمة التخزين المؤقت، مثل Redis أو Memcached، بشكل شائع لإنشاء طبقة تخزين مؤقت سريع للبيانات في أحد التطبيقات. يوضّح لك هذا المثال كيفية إعداد Memorystore لـ Redis في مشروع Google Cloud نفسه الذي يتضمّن الخلفية Firebase App Hosting والربط به باستخدام الخروج المباشر من شبكة VPC.

الخطوة 0: إنشاء مثيل Memorystore for Redis

  1. انتقِل إلى Memorystore for Redis في وحدة تحكّم Google Cloud.
    • تأكَّد من اختيار المشروع نفسه الذي تستخدمه في 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.
  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.
  2. يمكنك الاتصال بخدمة 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 من تطبيقك

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

    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 لتحديد localhost حتى تتمكّن من التطوير على الجهاز المحلي باستخدام تثبيت محلي لـ Redis.

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

    env:
      - variable: REDISHOST
        value: 127.0.0.1