אפשר לשלב בין Cloud Run לבין Firebase Hosting כדי ליצור ולהציג את התוכן הדינמי או כדי ליצור ממשקי API ל-REST בתור מיקרו-שירותים.
באמצעות Cloud Run, אפשר לפרוס אפליקציה שארוזה בקובץ אימג' של קונטיינר. לאחר מכן, באמצעות Firebase Hosting, אפשר להפנות בקשות HTTPS להפעלת האפליקציה שמופעלת בתוך קונטיינר.
- Cloud Run תומך בכמה שפות (כולל Go, Node.js, Python ו-Java), כך שאתם יכולים להשתמש בשפת התכנות ובמסגרת שתבחרו.
- Cloud Run מתבצעת התאמה אוטומטית לעומס (auto-scaling) והרחבה אופקית של תמונת הקונטיינר כדי לטפל בבקשות שהתקבלו, ואז הקטנה כשאין יותר ביקוש.
- משלמים רק על השימוש במעבד, בזיכרון ובחיבור לרשת במהלך הטיפול בבקשות.
תרחישי שימוש לדוגמה ודוגמאות ל-Cloud Run שמשולב עם Firebase Hosting זמינים בסקירה הכללית בנושא שרתים וירטואליים.
במדריך הזה נסביר איך:
- כתיבת אפליקציית Hello World פשוטה
- העברת אפליקציה לקונטיינר והעלאה שלה אל Artifact Registry
- פריסת קובץ האימג' של הקונטיינר ב-Cloud Run
- הפניית בקשות Hosting ישירות לאפליקציה שמופעלת בתוך קונטיינר
כדי לשפר את הביצועים של הצגת תוכן דינמי, אפשר לשנות את הגדרות המטמון.
לפני שמתחילים
לפני שמשתמשים ב-Cloud Run, צריך להשלים כמה משימות ראשוניות, כולל הגדרת חשבון Cloud Billing, הפעלת Cloud Run API והתקנת כלי שורת הפקודה gcloud.
הגדרת חיוב לפרויקט
Cloud Run מציע מכסת שימוש ללא תשלום, אבל עדיין צריך חשבון Cloud Billing שמשויך לפרויקט Firebase כדי להשתמש ב-Cloud Run או לנסות אותו.
הפעלת ה-API והתקנת ה-SDK
מפעילים את Cloud Run API ב-Google APIs Console:
פותחים את הדף Cloud Run API ב-Google APIs Console.
כשמתבקשים, בוחרים את הפרויקט ב-Firebase.
לוחצים על הפעלה בדף של Cloud Run API.
מתקינים ומפעילים את Cloud SDK.
בודקים שהכלי
gcloudמוגדר לפרויקט הנכון:gcloud config list
שלב 1: כותבים את האפליקציה לדוגמה
שימו לב ש-Cloud Run תומך בשפות רבות אחרות בנוסף לשפות שמוצגות בדוגמה הבאה.
Go
יוצרים ספרייה חדשה בשם
helloworld-go, ואז עוברים לספרייה הזו:mkdir helloworld-go
cd helloworld-go
יוצרים קובץ חדש בשם
helloworld.goומוסיפים את הקוד הבא:הקוד הזה יוצר שרת אינטרנט בסיסי שמקשיב ליציאה שמוגדרת על ידי משתנה הסביבה
PORT.
האפליקציה מוכנה להעברה לקונטיינר ולהעלאה אל Artifact Registry.
Node.js
יוצרים ספרייה חדשה בשם
helloworld-nodejsואז עוברים אליה:mkdir helloworld-nodejs
cd helloworld-nodejs
יוצרים קובץ
package.jsonעם התוכן הבא:יוצרים קובץ חדש בשם
index.jsומוסיפים את הקוד הבא:הקוד הזה יוצר שרת אינטרנט בסיסי שמקשיב ליציאה שמוגדרת על ידי משתנה הסביבה
PORT.
האפליקציה מוכנה להעברה לקונטיינר ולהעלאה אל Artifact Registry.
Python
יוצרים ספרייה חדשה בשם
helloworld-pythonואז עוברים אליה:mkdir helloworld-python
cd helloworld-python
יוצרים קובץ חדש בשם
app.pyומוסיפים את הקוד הבא:הקוד הזה יוצר שרת אינטרנט בסיסי שמקשיב ליציאה שמוגדרת על ידי משתנה הסביבה
PORT.
האפליקציה מוכנה להעברה לקונטיינר ולהעלאה אל Artifact Registry.
Java
מתקינים Java SE 8 או גרסה מתקדמת יותר של JDK ו-CURL.
הערה: אנחנו צריכים לעשות את זה רק כדי ליצור את פרויקט האינטרנט החדש בשלב הבא. קובץ ה-Dockerfile, שמתואר בהמשך, יטען את כל התלויות לתוך הקונטיינר.
מהמסוף, יוצרים פרויקט אינטרנט חדש וריק באמצעות פקודות cURL ואז פקודות unzip:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d name=helloworld \ -d artifactId=helloworld \ -o helloworld.zipunzip helloworld.zip
ייווצר פרויקט SpringBoot.
מעדכנים את המחלקה
SpringBootApplicationבקובץsrc/main/java/com/example/helloworld/HelloworldApplication.javaעל ידי הוספת@RestControllerלטיפול במיפוי/, ומוסיפים גם שדה@Valueכדי לספק את משתנה הסביבהTARGET:הקוד הזה יוצר שרת אינטרנט בסיסי שמקשיב ליציאה שמוגדרת על ידי משתנה הסביבה
PORT.
האפליקציה מוכנה להעברה לקונטיינר ולהעלאה אל Artifact Registry.
שלב 2: יצירת קונטיינר לאפליקציה והעלאה שלו אל Artifact Registry
כדי להפוך את אפליקציית הדוגמה לקונטיינר, יוצרים קובץ חדש בשם
Dockerfileבאותה תיקייה שבה נמצאים קובצי המקור. מעתיקים את התוכן הבא לקובץ.Go
Node.js
Python
Java
כדי ליצור את קובץ האימג' בקונטיינר באמצעות Cloud Build, מריצים את הפקודה הבאה מהספרייה שמכילה את קובץ Dockerfile:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
אם הפעולה תצליח, תוצג הודעה על הצלחה עם שם התמונה
(gcr.io/PROJECT_ID/helloworld).
תמונת הקונטיינר מאוחסנת עכשיו ב-Artifact Registry ואפשר לעשות בה שימוש חוזר אם רוצים.
שימו לב: במקום Cloud Build, אתם יכולים להשתמש בגרסה של Docker שהתקנתם באופן מקומי כדי ליצור את הקונטיינר באופן מקומי.
שלב 3: פריסת תמונת המאגר ב-Cloud Run
מבצעים פריסה באמצעות הפקודה הבאה:
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
כשמוצגת בקשה:
- בוחרים אזור (לדוגמה
us-central1) - מאשרים את שם השירות (לדוגמה,
helloworld) - משיבים
Yלallow unauthenticated invocations
- בוחרים אזור (לדוגמה
מחכים כמה רגעים עד שהפריסה תושלם. אם הפעולה בוצעה ללא שגיאות, כתובת ה-URL של השירות תוצג בשורת הפקודה. לדוגמה:
https://helloworld-RANDOM_HASH-us-central1.a.run.app פותחים את כתובת ה-URL של השירות בדפדפן אינטרנט כדי להיכנס למאגר שהופעל.
בשלב הבא מוסבר איך לגשת לאפליקציה הזו שמבוססת על קונטיינר מכתובת URL של Firebase Hosting כדי שהיא תוכל ליצור תוכן דינמי לאתר שלכם שמארח ב-Firebase.
שלב 4: הפניית בקשות אירוח לאפליקציה בקונטיינר
בעזרת כללי שכתוב, אפשר להפנות בקשות שתואמות לדפוסים ספציפיים ליעד יחיד.
בדוגמה הבאה אנחנו מראים איך להפנות את כל הבקשות מהדף /helloworld באתר Hosting כדי להפעיל את מופע מאגר התגים helloworld.
חשוב לוודא ש:
שאתם משתמשים בגרסה העדכנית של Firebase CLI.
הפעלת את Firebase Hosting.
הוראות מפורטות להתקנת ה-CLI ולאתחול Hosting זמינות במדריך למתחילים בנושא Hosting.
פותחים את קובץ
firebase.json.מוסיפים את ההגדרה
rewriteבקטעhosting:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/helloworld", "run": { "serviceId": "helloworld", // "service name" (from when you deployed the container image) "region": "us-central1", // optional (if omitted, default is us-central1) "pinTag": true // optional (see note below) } } ] }
כדי לפרוס את הגדרות האירוח באתר, מריצים את הפקודה הבאה מהרמה הבסיסית (root) של ספריית הפרויקט:
firebase deploy --only hosting
עכשיו אפשר להגיע למאגר התגים באמצעות כתובות ה-URL הבאות:
תת-הדומיינים שלכם ב-Firebase:
PROJECT_ID.web.app/ו-PROJECT_ID.firebaseapp.com/דומיינים מותאמים אישית שמקושרים:
CUSTOM_DOMAIN/
Hostingבדף ההגדרה של כללי השכתוב יש פרטים נוספים. אפשר גם לקרוא על סדר העדיפויות של התגובות להגדרות שונות של Hosting.
בדיקה מקומית
במהלך הפיתוח, אתם יכולים להריץ ולבדוק את קובץ האימג' בקונטיינר באופן מקומי. הוראות מפורטות מופיעות במסמכי התיעוד של Cloud Run.
השלבים הבאים
הגדרת שמירה במטמון של תוכן דינמי ב-CDN גלובלי.
אינטראקציה עם שירותים אחרים של Firebase באמצעות Firebase Admin SDK.
Cloud Runמידע נוסף, כולל מדריכים מפורטים להגדרה, לניהול ולהגדרה של מאגרי תגים.
כדאי לעיין בתמחור ובמכסות והמגבלות של Cloud Run.