میزبانی برنامه Firebase را به یک شبکه VPC متصل کنید

بک‌اند Firebase App Hosting شما می‌تواند به یک شبکه Virtual Private Cloud (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 برای Redis از یک برنامه Next.js

سیستم‌های ذخیره‌سازی مانند Redis یا Memcached معمولاً برای ساخت یک لایه ذخیره‌سازی سریع داده برای یک برنامه استفاده می‌شوند. این مثال به شما نشان می‌دهد که چگونه Memorystore را برای Redis در همان پروژه Google Cloud که backend Firebase App Hosting شما است، راه‌اندازی کنید و با استفاده از Direct VPC egress به آن متصل شوید.

مرحله ۰: ایجاد یک Memorystore برای نمونه Redis

  1. به صفحه Memorystore for Redis در کنسول Google Cloud بروید.
    • مطمئن شوید که همان پروژه‌ای که برای Firebase App Hosting استفاده می‌کنید، انتخاب شده باشد.
    • اگر نمی‌توانید به این صفحه دسترسی پیدا کنید، مطمئن شوید که پرداخت برای پروژه شما فعال شده است و Memorystore API را نیز فعال کرده‌اید.
  2. ایجاد نمونه را انتخاب کنید.
  3. نمونه جدید را با تنظیمات دلخواه خود پیکربندی کنید. در اینجا چند نمونه از مقادیری که می‌توانید استفاده کنید، آورده شده است:
    • my-redis-cache در قسمت Instance ID وارد کنید.
    • در قسمت Display name، Redis cache وارد کنید.
    • در قسمت انتخابگر سطح، Basic را انتخاب کنید. سطح Basic یک گره Redis مستقل را تعیین می‌کند، برخلاف سطح Standard که از یک گره replica برای پشتیبان‌گیری از داده‌های شما استفاده می‌کند.
    • منطقه‌ی بک‌اند App Hosting خود را از انتخابگر منطقه انتخاب کنید. حتماً این مقدار را طوری تنظیم کنید که با منطقه‌ی بک‌اند شما مطابقت داشته باشد.
    • هر کدام را از انتخابگر منطقه انتخاب کنید.
    • 5 در قسمت Capacity وارد کنید. این کار ظرفیت نمونه شما را روی ۵ گیگابایت تنظیم می‌کند.
    • در قسمت «نسخه (توصیه می‌شود)» 5.0 انتخاب کنید.
    • از انتخابگر شبکه مجاز، پیش‌فرض را انتخاب کنید.

مرحله ۱: 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
    

مرحله ۲: متغیرهای محیطی که برنامه شما را به Redis هدایت می‌کنند را اضافه کنید

  1. اطلاعات اتصال (میزبان و پورت) را در تب «اتصالات» نمونه Memorystore for Redis خود در کنسول Google Cloud پیدا کنید.
  2. با استفاده از متغیرهای محیطی 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
    

مرحله ۳: استفاده از 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 });
      }
      

مرحله ۴ (اختیاری): پیکربندی برنامه برای توسعه محلی

شبیه‌ساز Firebase App Hosting می‌تواند با استفاده از apphosting.emulator.yaml مقادیر را لغو کند. در اینجا، می‌توانید مقدار REDISHOST را به localhost تغییر دهید تا بتوانید با استفاده از نصب محلی Redis، به صورت محلی توسعه دهید.

  1. نصب Redis روی دستگاه محلی شما
  2. برای ارجاع به نمونه محلی خود، apphosting.emulators.yaml ایجاد یا ویرایش کنید:

    env:
      - variable: REDISHOST
        value: 127.0.0.1