ה-backend של Firebase App Hosting יכול להתחבר לרשת ענן וירטואלי פרטי (VPC). כך הקצה העורפי של Firebase App Hosting יכול לגשת לשירותים בקצה העורפי שאי אפשר לגשת אליהם באמצעות כתובות IP ציבוריות, כמו Cloud SQL, Spanner, Cloud Memorystore, Compute Engine או מיקרו-שירותים פנימיים של Kubernetes.
הגישה ל-VPC זמינה רק בזמן הריצה (מהקונטיינר של Cloud Run), ולא בזמן ה-build (Cloud Build).
איך בוחרים את אופן החיבור לרשת VPC
- Direct VPC Egress: פשוט, מהיר וזול יותר. משתמש בכתובת IP אחת לכל קונטיינר. מומלץ לרוב תרחישי השימוש.
- מחברים ללא שרת (serverless): מאגרים של כתובות IP לאפליקציות גדולות יותר. נדרש תשלום על ה-VM הבסיסי. לפרטים על המחירים, קראו את הקטע "חיבור לרשת (VPC) מאפליקציית serverless" בדף התמחור של VPC.
הגדרה ב-apphosting.yaml
כדי להגדיר את הגישה, משתמשים במיפוי vpcAccess בקובץ apphosting.yaml.
צריך להשתמש בשם מלא או במזהה של הרשת או המחבר. שימוש במזהים מאפשר ניידות בין סביבות Staging וסביבות ייצור עם מחברים או רשתות שונים.
הגדרת תעבורת נתונים יוצאת (egress) ב-Direct 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 for Redis מאפליקציית Next.js
מערכות לשמירה במטמון כמו Redis או Memcached משמשות בדרך כלל ליצירת שכבת שמירת נתונים מהירה במטמון לאפליקציה. בדוגמה הזו מוסבר איך להגדיר את Memorystore for Redis באותו פרויקט ב-Google Cloud כמו בקצה העורפי של Firebase App Hosting, ולהתחבר אליו באמצעות תעבורת נתונים יוצאת ישירה של VPC.
שלב 0: יצירת מכונה של Memorystore for Redis
- נכנסים לדף Memorystore for Redis במסוף Google Cloud.
- מוודאים שבחרתם את אותו פרויקט שבו אתם משתמשים ב-Firebase App Hosting.
- אם אתם לא מצליחים לגשת לדף הזה, ודאו שהחיוב מופעל בפרויקט ושהפעלתם את Memorystore API.
- לוחצים על Create Instance.
- מגדירים את המכונה החדשה לפי ההגדרות הרצויות. הנה כמה דוגמאות לערכים שאפשר להשתמש בהם:
- מזינים את הערך
my-redis-cacheבשדה Instance ID. - מזינים
Redis cacheבקטע שם לתצוגה. - בוחרים באפשרות בסיסי מתחת לבחירת הרמה. המסלול הבסיסי מיועד לצומת Redis עצמאי, בניגוד למסלול הרגיל שמשתמש בצומת רפליקה כדי לגבות את הנתונים.
- בוחרים את האזור של הקצה העורפי של App Hosting בבורר Region. חשוב להגדיר את הערך הזה כך שיתאים לאזור של הקצה העורפי.
- בוחרים באפשרות any בבורר האזורים.
- מזינים
5בקטע קיבולת. הפעולה הזו מגדירה את קיבולת המכונה ל-5GB. - בקטע Version, בוחרים באפשרות
7.0(או בגרסה המומלצת שמוגדרת כברירת מחדל). - בוחרים באפשרות default בבורר Authorized network.
- מזינים את הערך
שלב 1: מעדכנים את apphosting.yaml במזהה של רשת ה-VPC
- נכנסים לדף רשתות VPC במסוף Google Cloud.
- מאתרים את המזהה של רשת ה-VPC של המכונה של Memorystore for Redis (בדרך כלל הוא יהיה
default). מגדירים את תצורת Direct VPC egress ב-
apphosting.yamlבאמצעות מזהה רשת ה-VPC:runConfig: vpcAccess: egress: PRIVATE_RANGES_ONLY # Default value networkInterfaces: - network: my-network-id
שלב 2: מוסיפים משתני סביבה שמפנים את האפליקציה ל-Redis
- במסוף Google Cloud, בכרטיסייה Connections של המכונה של Memorystore for Redis, מאתרים את פרטי החיבור (המארח והיציאה).
מתחברים ל-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 מהאפליקציה
מתקינים את חבילת ה-npm של redis:
npm install redis@latestגישה למטמון Redis מהקוד. משתמשים במשתני הסביבה שהוגדרו בשלב הקודם. לדוגמה, כך אפשר לקרוא ממטמון ב-Next.js route handler:
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({ socket: { host: REDISHOST, port: Number(REDISPORT), }, }) .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 כך שיצביע על המארח המקומי, כדי שתוכלו לפתח באופן מקומי באמצעות התקנה מקומית של Redis.
- התקנת Redis במחשב המקומי
יוצרים או עורכים את
apphosting.emulator.yamlכדי להפנות למכונה המקומית:env: - variable: REDISHOST value: 127.0.0.1