Firebase ऐप्लिकेशन होस्टिंग को VPC नेटवर्क से कनेक्ट करना

आपका Firebase App Hosting बैकएंड, वर्चुअल प्राइवेट क्लाउड (VPC) नेटवर्क से कनेक्ट हो सकता है. इससे, आपके Firebase App Hosting बैकएंड को Cloud SQL, Spanner, Cloud Memorystore, Compute Engine, या Kubernetes की इंटरनल माइक्रोसेवाओं जैसी उन बैकएंड सेवाओं को ऐक्सेस करने की अनुमति मिलती है जिन्हें सार्वजनिक आईपी पतों का इस्तेमाल करके ऐक्सेस नहीं किया जा सकता.

वीपीसी ऐक्सेस की सुविधा, सिर्फ़ रनटाइम (Cloud Run कंटेनर से) के दौरान उपलब्ध होती है. यह बिल्ड प्रोसेस में लगने वाले समय (Cloud Build) के दौरान उपलब्ध नहीं होती.

वीपीसी नेटवर्क से कनेक्ट करने का तरीका चुनना

  • डायरेक्ट वीपीसी इग्रेस: यह तरीका आसान, तेज़, और सस्ता है. इसमें हर कंटेनर के लिए एक आईपी पते का इस्तेमाल किया जाता है. ज़्यादातर इस्तेमाल के मामलों के लिए, इस तरीके का सुझाव दिया जाता है.
  • सर्वरलेस कनेक्टर: बड़े ऐप्लिकेशन के लिए, आईपी पतों के पूल का इस्तेमाल किया जाता है. इसके लिए, अंडरलाइन करने वाली वीएम के लिए पेमेंट करना ज़रूरी है. कीमत की जानकारी के लिए, वीपीसी की कीमत वाले पेज पर "सर्वर के बिना वीपीसी ऐक्सेस करने की सुविधा" सेक्शन देखें.

apphosting.yaml में कॉन्फ़िगर करना

ऐक्सेस कॉन्फ़िगर करने के लिए, अपनी 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

सर्वरलेस कनेक्टर का कॉन्फ़िगरेशन (apphosting.yaml):

runConfig:
  vpcAccess:
    egress: ALL_TRAFFIC
    connector: connector-id

उदाहरण: Next.js ऐप्लिकेशन से Memorystore for Redis से कनेक्ट करना

किसी ऐप्लिकेशन के लिए, डेटा कैशिंग की तेज़ लेयर बनाने के लिए, Redis या Memcached जैसे कैशिंग सिस्टम का इस्तेमाल आम तौर पर किया जाता है. इस उदाहरण में, आपको यह दिखाया गया है कि Memorystore for Redis को उसी Google Cloud प्रोजेक्ट में कैसे सेट अप किया जाए जिसका इस्तेमाल आपके Firebase App Hosting बैकएंड के तौर पर किया जा रहा है. साथ ही, Direct VPC egress का इस्तेमाल करके, उससे कैसे कनेक्ट किया जाए.

शून्यवां चरण: Memorystore for Redis का इंस्टेंस बनाना

  1. Google Cloud Console में, Memorystore for Redis पेज पर जाएं.Google Cloud
    • पक्का करें कि Firebase App Hosting के लिए इस्तेमाल किया जा रहा वही प्रोजेक्ट चुना गया हो.
    • अगर आपको इस पेज को ऐक्सेस करने में समस्या आ रही है, तो पक्का करें कि आपके प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो और आपने Memorystore API चालू किया हो.
  2. इंस्टेंस बनाएं को चुनें.
  3. अपनी पसंद की सेटिंग के साथ नया इंस्टेंस कॉन्फ़िगर करें. यहां कुछ उदाहरण दिए गए हैं जिनका इस्तेमाल किया जा सकता है:
    • इंस्टेंस आईडी में, my-redis-cache डालें.
    • डिसप्ले नाम में, Redis cache डालें.
    • टियर सिलेक्टर में, बेसिक चुनें. बेसिक टियर, स्टैंडअलोन Redis नोड को दिखाता है. वहीं, स्टैंडर्ड टियर, आपके डेटा का बैकअप लेने के लिए रेप्लिका नोड का इस्तेमाल करता है.
    • App Hosting बैकएंड का रीजन, रीजन सिलेक्टर में जाकर चुनें. पक्का करें कि यह वैल्यू, आपके बैकएंड के रीजन से मेल खाती हो.
    • ज़ोन सिलेक्टर में जाकर, कोई भी चुनें.
    • कैपेसिटी में, 5 डालें. इससे, आपके इंस्टेंस की कैपेसिटी 5 जीबी सेट हो जाती है.
    • वर्शन में, 5.0 चुनें. हमारा सुझाव है कि आप यह वर्शन चुनें.
    • अनुमति वाला नेटवर्क सिलेक्टर में जाकर, डिफ़ॉल्ट चुनें.

पहला चरण: apphosting.yaml को अपने वीपीसी नेटवर्क आईडी से अपडेट करना

  1. Google Cloud Console में, वीपीसी नेटवर्क पेज पर जाएं.Google Cloud
  2. Memorystore for Redis के अपने इंस्टेंस के लिए, वीपीसी नेटवर्क आईडी ढूंढें. यह अक्सर default होता है.
  3. वीपीसी नेटवर्क आईडी का इस्तेमाल करके, apphosting.yaml में डायरेक्ट वीपीसी इग्रेस का कॉन्फ़िगरेशन सेट करें:

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

दूसरा चरण: एनवायरमेंट वैरिएबल जोड़ना, ताकि आपका ऐप्लिकेशन Redis पर डायरेक्ट हो

  1. Google Cloud Console में, Memorystore for Redis के अपने इंस्टेंस के "कनेक्शन" टैब में, कनेक्शन की जानकारी (होस्ट और पोर्ट) ढूंढें.Google Cloud
  2. REDISPORT और REDISHOST एनवायरमेंट वैरिएबल की मदद से, Redis से कनेक्ट करें. Google Cloud Console से मिली होस्ट और पोर्ट वैल्यू का इस्तेमाल करके, इन्हें 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. 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 });
      }
      

चौथा चरण (ज़रूरी नहीं): स्थानीय डेवलपमेंट के लिए, अपने ऐप्लिकेशन को कॉन्फ़िगर करना

एम्युलेटर, apphosting.emulator.yaml का इस्तेमाल करके वैल्यू को बदल सकता है.Firebase App Hosting यहां, REDISHOST की वैल्यू को लोकलहोस्ट पर पॉइंट करने के लिए बदला जा सकता है, ताकि Redis के लोकल इंस्टॉलेशन का इस्तेमाल करके, स्थानीय तौर पर डेवलपमेंट किया जा सके.

  1. अपने कंप्यूटर पर Redis इंस्टॉल करें
  2. अपने लोकल इंस्टेंस का रेफ़रंस देने के लिए, apphosting.emulators.yaml बनाएं या उसमें बदलाव करें:

    env:
      - variable: REDISHOST
        value: 127.0.0.1