เชื่อมต่อโฮสติ้งแอป 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

กำหนดค่าใน 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

การกำหนดค่าเครื่องมือเชื่อมต่อแบบ Serverless (apphosting.yaml):

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

ตัวอย่าง: เชื่อมต่อกับ Memorystore สำหรับ Redis จากแอป Next.js

โดยทั่วไปแล้ว ระบบแคช เช่น Redis หรือ Memcached มักใช้เพื่อสร้างเลเยอร์แคชข้อมูลที่รวดเร็วสำหรับแอป ตัวอย่างนี้จะแสดงวิธีตั้งค่า Memorystore สำหรับ Redis ในโปรเจ็กต์ Google Cloud เดียวกันกับแบ็กเอนด์ Firebase App Hosting และ เชื่อมต่อกับ Memorystore โดยใช้ ขาออก VPC โดยตรง

ขั้นตอนที่ 0: สร้างอินสแตนซ์ Memorystore สำหรับ Redis

  1. ไปที่หน้า Memorystore สำหรับ Redis ในคอนโซลGoogle Cloud
    • ตรวจสอบว่าได้เลือกโปรเจ็กต์เดียวกับที่ใช้สำหรับ Firebase App Hosting แล้ว
    • หากเข้าถึงหน้านี้ไม่ได้ ให้ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับ โปรเจ็กต์และได้เปิดใช้ Memorystore API แล้ว
  2. เลือกสร้างอินสแตนซ์
  3. กำหนดค่าอินสแตนซ์ใหม่ด้วยการตั้งค่าที่ต้องการ ตัวอย่างค่าที่คุณใช้ได้มีดังนี้
    • ป้อน my-redis-cache ในส่วนรหัสอินสแตนซ์
    • ป้อน Redis cache ในส่วนชื่อที่แสดง
    • เลือกพื้นฐาน ในตัวเลือกระดับ ระดับพื้นฐานกำหนดโหนด Redis แบบสแตนด์อโลน ซึ่งแตกต่างจากระดับมาตรฐานที่ใช้โหนดจำลองเพื่อสำรองข้อมูล
    • เลือกภูมิภาคของแบ็กเอนด์ App Hosting จากตัวเลือกภูมิภาค ตรวจสอบว่าได้ตั้งค่านี้ให้ตรงกับภูมิภาคของแบ็กเอนด์
    • เลือกใดก็ได้ จากตัวเลือกโซน
    • ป้อน 5 ในส่วนความจุ ซึ่งจะตั้งค่าความจุของอินสแตนซ์เป็น 5 GB
    • เลือก 5.0 ในส่วนเวอร์ชัน (แนะนำ)
    • เลือกค่าเริ่มต้น จากตัวเลือกเครือข่ายที่ได้รับอนุญาต

ขั้นตอนที่ 1: อัปเดต apphosting.yaml ด้วยรหัสเครือข่าย VPC

  1. ไปที่ หน้าเครือข่าย VPC ในคอนโซล Google Cloud
  2. ค้นหารหัสเครือข่าย VPC สำหรับอินสแตนซ์ Memorystore สำหรับ Redis (มักจะเป็น default)
  3. ตั้งค่าการกำหนดค่าขาออก VPC โดยตรงใน apphosting.yaml โดยใช้รหัสเครือข่าย VPC ดังนี้

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

ขั้นตอนที่ 2: เพิ่มตัวแปรสภาพแวดล้อมที่นำแอปไปยัง Redis

  1. ค้นหาข้อมูลการเชื่อมต่อ (โฮสต์และพอร์ต) ในแท็บ "การเชื่อมต่อ" ของ อินสแตนซ์ Memorystore สำหรับ 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. ติดตั้งแพ็กเกจ 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 });
      }
      

ขั้นตอนที่ 4 (ไม่บังคับ): กำหนดค่าแอปสำหรับการพัฒนาในเครื่อง

โปรแกรมจำลอง Firebase App Hosting สามารถลบล้างค่าได้โดยใช้ apphosting.emulator.yaml ในที่นี้ คุณสามารถเปลี่ยนค่า REDISHOST ให้ชี้ไปยัง localhost เพื่อให้คุณพัฒนาในเครื่องได้โดยใช้การติดตั้ง Redis ในเครื่อง

  1. ติดตั้ง Redis ในเครื่อง
  2. สร้างหรือแก้ไข apphosting.emulators.yaml เพื่ออ้างอิงอินสแตนซ์ในเครื่อง ดังนี้

    env:
      - variable: REDISHOST
        value: 127.0.0.1