اتصال Firebase App Hosting به شبکه 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 به‌عنوان پس‌زمینه Firebase App Hosting خود راه‌اندازی کنید و بااستفاده از خروجی مستقیم VPC به آن متصل شوید.

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

  1. به صفحه Memorystore برای Redis در کنسول Google Cloud بروید.
    • مطمئن شوید همان پروژه‌ای که برای Firebase App Hosting استفاده می‌کنید انتخاب شده باشد.
    • اگر نمی‌توانید به این صفحه دسترسی پیدا کنید، مطمئن شوید صورت‌حساب برای پروژه‌تان فعال باشد و Memorystore API را فعال کرده باشید.
  2. ایجاد نمونه را انتخاب کنید.
  3. نمونه جدید را با تنظیمات دلخواهتان پیکربندی کنید. در اینجا چند مقدار نمونه آورده شده است که می‌توانید استفاده کنید:
    • my-redis-cache را در بخش شناسه نمونه وارد کنید.
    • Redis cache را در بخش نام نمایشی وارد کنید.
    • پایه را در زیر انتخابگر سطح انتخاب کنید. سطح پایه یک گره Redis مستقل را تعیین می‌کند، برخلاف سطح استاندارد که از یک گره کپی برای پشتیبان‌گیری از داده‌های شما استفاده می‌کند.
    • منطقه باطن App Hosting خود را از انتخابگر منطقه انتخاب کنید. حتماً این مقدار را طوری تنظیم کنید که با منطقه باطن شما مطابقت داشته باشد.
    • هرکدام را از انتخابگر منطقه انتخاب کنید.
    • 5 را در بخش ظرفیت وارد کنید. با این کار، ظرفیت نمونه شما روی ۵ گیگابایت تنظیم می‌شود.
    • 7.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 متصل شوید. این موارد را در apphosting.yaml بااستفاده از مقادیر میزبان و درگاه از کنسول Google Cloud تنظیم کنید:

    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({
            socket: {
              host: REDISHOST,
              port: Number(REDISPORT),
            },
          })
            .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 را تغییر دهید تا به میزبان محلی اشاره کند و بتوانید بااستفاده از نصب محلی Redis، به‌صورت محلی توسعه دهید.

  1. نصب Redis در ماشین محلی
  2. apphosting.emulator.yaml را ایجاد یا ویرایش کنید تا به نمونه محلی‌تان ارجاع دهد:

    env:
      - variable: REDISHOST
        value: 127.0.0.1