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

आपका Firebase App Hosting बैकएंड, वर्चुअल प्राइवेट क्लाउड (वीपीसी) नेटवर्क से कनेक्ट हो सकता है. इससे आपके 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 जैसे कैश मेमोरी सिस्टम का इस्तेमाल, आम तौर पर किसी ऐप्लिकेशन के लिए तेज़ी से डेटा कैश करने वाली लेयर बनाने के लिए किया जाता है. इस उदाहरण में, Google Cloud प्रोजेक्ट में Memorystore for Redis को सेट अप करने का तरीका बताया गया है. यह वही प्रोजेक्ट है जिसमें आपका Firebase App Hosting बैकएंड है. साथ ही, डायरेक्ट वीपीसी इग्रेस का इस्तेमाल करके, इससे कनेक्ट करने का तरीका भी बताया गया है.

सबसे पहले: Memorystore for Redis इंस्टेंस बनाना

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

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

  1. 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 कंसोल में, Memorystore for Redis इंस्टेंस के "कनेक्शन" टैब में कनेक्शन की जानकारी (होस्ट और पोर्ट) ढूंढें.
  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. 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({
            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