แบ็กเอนด์ 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 1 รายการต่อคอนเทนเนอร์ แนะนำให้ใช้กับกรณีการใช้งานส่วนใหญ่
- เครื่องมือเชื่อมต่อ แบบ Serverless: รวมที่อยู่ IP สำหรับแอปพลิเคชันขนาดใหญ่ ต้องชำระเงินสำหรับ VM ที่เกี่ยวข้อง ดูรายละเอียดราคาได้ที่ "การเข้าถึง VPC แบบ Serverless" ใน หน้าการกำหนดราคา 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
- ไปที่หน้า
Memorystore สำหรับ Redis
ในคอนโซลGoogle Cloud
- ตรวจสอบว่าได้เลือกโปรเจ็กต์เดียวกับที่ใช้สำหรับ Firebase App Hosting แล้ว
- หากเข้าถึงหน้านี้ไม่ได้ ให้ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับ โปรเจ็กต์และได้เปิดใช้ Memorystore API แล้ว
- เลือกสร้างอินสแตนซ์
- กำหนดค่าอินสแตนซ์ใหม่ด้วยการตั้งค่าที่ต้องการ ตัวอย่างค่าที่คุณใช้ได้มีดังนี้
- ป้อน
my-redis-cacheในส่วนรหัสอินสแตนซ์ - ป้อน
Redis cacheในส่วนชื่อที่แสดง - เลือกพื้นฐาน ในตัวเลือกระดับ ระดับพื้นฐานกำหนดโหนด Redis แบบสแตนด์อโลน ซึ่งแตกต่างจากระดับมาตรฐานที่ใช้โหนดจำลองเพื่อสำรองข้อมูล
- เลือกภูมิภาคของแบ็กเอนด์ App Hosting จากตัวเลือกภูมิภาค ตรวจสอบว่าได้ตั้งค่านี้ให้ตรงกับภูมิภาคของแบ็กเอนด์
- เลือกใดก็ได้ จากตัวเลือกโซน
- ป้อน
5ในส่วนความจุ ซึ่งจะตั้งค่าความจุของอินสแตนซ์เป็น 5 GB - เลือก
5.0ในส่วนเวอร์ชัน (แนะนำ) - เลือกค่าเริ่มต้น จากตัวเลือกเครือข่ายที่ได้รับอนุญาต
- ป้อน
ขั้นตอนที่ 1: อัปเดต apphosting.yaml ด้วยรหัสเครือข่าย VPC
- ไปที่ หน้าเครือข่าย VPC ในคอนโซล Google Cloud
- ค้นหารหัสเครือข่าย VPC สำหรับอินสแตนซ์ Memorystore สำหรับ Redis (มักจะเป็น
default) ตั้งค่าการกำหนดค่าขาออก VPC โดยตรงใน
apphosting.yamlโดยใช้รหัสเครือข่าย VPC ดังนี้runConfig: vpcAccess: egress: PRIVATE_RANGES_ONLY # Default value networkInterfaces: - network: my-network-id
ขั้นตอนที่ 2: เพิ่มตัวแปรสภาพแวดล้อมที่นำแอปไปยัง Redis
- ค้นหาข้อมูลการเชื่อมต่อ (โฮสต์และพอร์ต) ในแท็บ "การเชื่อมต่อ" ของ อินสแตนซ์ Memorystore สำหรับ Redis ในคอนโซล Google Cloud
เชื่อมต่อกับ 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 จากแอป
ติดตั้งแพ็กเกจ redis npm ดังนี้
npm install redis@latestเข้าถึงแคช Redis จากโค้ด ใช้ตัวแปรสภาพแวดล้อมที่กำหนดค่าไว้ในขั้นตอนก่อนหน้า ตัวอย่างเช่น วิธีอ่านจากแคชในตัวจัดการเส้นทาง Next.js มีดังนี้
src/lib/redis.jsimport { 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.jsimport { 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 ในเครื่อง
- ติดตั้ง Redis ในเครื่อง
สร้างหรือแก้ไข
apphosting.emulators.yamlเพื่ออ้างอิงอินสแตนซ์ในเครื่อง ดังนี้env: - variable: REDISHOST value: 127.0.0.1