אפשר להתאים בין Cloud Run ל-Firebase Hosting כדי ליצור תוכן דינמי ולהציג אותו, או כדי ליצור ממשקי API ל-REST כמיקרו-שירותים.
באמצעות Cloud Run אפשר לפרוס אפליקציה ארוזת בקובץ אימג' בקונטיינר. לאחר מכן, תוכלו להשתמש ב-Firebase Hosting כדי להפנות בקשות HTTPS להפעלת האפליקציה בקונטיינר.
- Cloud Run תומך במספר שפות (כולל Go, Node.js, Python ו-Java), כך שתוכלו להשתמש בשפת התכנות ובמסגרת התכנות שבחרתם.
- Cloud Run מתאים את התמונה בקונטיינר באופן אוטומטי ואופקי כדי לטפל בבקשות שהתקבלו, ואז מקטין את התמונה כשהביקוש יורד.
- אתם משלמים רק על השימוש במעבד, בזיכרון וברשתות במהלך הטיפול בבקשות.
תרחישים לדוגמה ודוגמאות ל-Cloud Run בשילוב עם Firebase Hosting זמינים בסקירה הכללית שלנו בנושא שירותים ללא שרת.
במדריך הזה נסביר איך:
- כתיבת אפליקציה פשוטה מסוג Hello World
- ארגון אפליקציה בקונטיינר והעלאה שלה אל Artifact Registry
- פריסת קובץ האימג' של הקונטיינר ב-Cloud Run
- הפניית בקשות Hosting לאפליקציה בקונטיינר
חשוב לזכור: כדי לשפר את הביצועים של הצגת תוכן דינמי, אפשר לשנות את הגדרות המטמון.
לפני שמתחילים
לפני שמשתמשים ב-Cloud Run, צריך להשלים כמה משימות ראשוניות, כולל הגדרת חשבון Cloud Billing, הפעלת ה-API של Cloud Run והתקנת הכלי של שורת הפקודה gcloud
.
הגדרת חיוב לפרויקט
ב-Cloud Run יש מכסה לשימוש בחינם, אבל עדיין צריך חשבון Cloud Billing שמשויך לפרויקט Firebase כדי להשתמש ב-Cloud Run או לנסות אותו.
הפעלת ה-API והתקנת ה-SDK
מפעילים את ה-API של Cloud Run במסוף Google APIs:
פותחים את דף ה-API של Cloud Run במסוף Google APIs.
כשמוצגת בקשה, בוחרים את פרויקט Firebase.
לוחצים על Enable בדף ה-API של Cloud Run.
מתקינים ומפעילים את Cloud SDK.
בודקים שהכלי
gcloud
מוגדר לפרויקט הנכון:gcloud config list
שלב 1: כותבים את האפליקציה לדוגמה
חשוב לזכור ש-Cloud Run תומך בשפות רבות אחרות, בנוסף לשפות שמוצגות בדוגמה הבאה.
יוצרים ספרייה חדשה בשם
helloworld-go
, ואז עוברים אליה:mkdir helloworld-go
cd helloworld-go
יוצרים קובץ חדש בשם
helloworld.go
ומוסיפים את הקוד הבא:הקוד הזה יוצר שרת אינטרנט בסיסי שמקשיב ביציאה שמוגדרת על ידי משתנה הסביבה
PORT
.
האפליקציה מוכנה להעלאה ל-Artifact Registry בקונטיינר.
יוצרים ספרייה חדשה בשם
helloworld-nodejs
, ואז עוברים אליה:mkdir helloworld-nodejs
cd helloworld-nodejs
יוצרים קובץ
package.json
עם התוכן הבא:יוצרים קובץ חדש בשם
index.js
ומוסיפים את הקוד הבא:הקוד הזה יוצר שרת אינטרנט בסיסי שמקשיב ביציאה שמוגדרת על ידי משתנה הסביבה
PORT
.
האפליקציה מוכנה להעלאה ל-Artifact Registry בקונטיינרים.
יוצרים ספרייה חדשה בשם
helloworld-python
, ואז עוברים אליה:mkdir helloworld-python
cd helloworld-python
יוצרים קובץ חדש בשם
app.py
ומוסיפים את הקוד הבא:הקוד הזה יוצר שרת אינטרנט בסיסי שמקשיב ביציאה שמוגדרת על ידי משתנה הסביבה
PORT
.
האפליקציה מוכנה להעלאה ל-Artifact Registry בקונטיינרים.
מתקינים את JDK של Java SE מגרסה 8 ואילך ואת CURL.
שימו לב שאנחנו צריכים לעשות זאת רק כדי ליצור את פרויקט האינטרנט החדש בשלב הבא. קובץ ה-Dockerfile, שמתואר בהמשך, יטמיע את כל יחסי התלות בקונטיינר.
במסוף, יוצרים פרויקט אינטרנט ריק חדש באמצעות הפקודות cURL ואז unzip:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d name=helloworld \ -d artifactId=helloworld \ -o helloworld.zip
unzip helloworld.zip
הפקודה הזו יוצרת פרויקט SpringBoot.
מעדכנים את הכיתה
SpringBootApplication
בקובץsrc/main/java/com/example/helloworld/HelloworldApplication.java
על ידי הוספת@RestController
לטיפול במיפוי/
, וגם הוספת השדה@Value
כדי לספק את משתנה הסביבהTARGET
:הקוד הזה יוצר שרת אינטרנט בסיסי שמקשיב ביציאה שמוגדרת על ידי משתנה הסביבה
PORT
.
האפליקציה מוכנה להעלאה ל-Artifact Registry בקונטיינר.
שלב 2: הכנסת אפליקציה לקונטיינר והעלאה שלה אל Artifact Registry
כדי לארוז את האפליקציה לדוגמה בקונטיינר, יוצרים קובץ חדש בשם
Dockerfile
באותה תיקייה שבה נמצאים קובצי המקור. מעתיקים את התוכן הבא לקובץ.כדי ליצור את קובץ האימג' בקונטיינר באמצעות 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
אזורי Cloud Run מותרים
כדי לקבל את הביצועים הטובים ביותר, כדאי למקם את שירות Cloud Run באותו מיקום פיזי עם Hosting באזורים הבאים:
us-west1
us-central1
us-east1
europe-west1
asia-east1
יש תמיכה בכתיבת מחדש של Cloud Run מ-Hosting באזורים הבאים:
asia-east1
asia-east2
asia-northeast1
asia-northeast2
asia-northeast3
asia-south1
asia-south2
asia-southeast1
asia-southeast2
australia-southeast1
australia-southeast2
europe-central2
europe-north1
europe-southwest1
europe-west1
europe-west12
europe-west2
europe-west3
europe-west4
europe-west6
europe-west8
europe-west9
me-central1
me-west1
northamerica-northeast1
northamerica-northeast2
southamerica-east1
southamerica-west1
us-central1
us-east1
us-east4
us-east5
us-south1
us-west1
us-west2
us-west3
us-west4
us-west1
us-central1
us-east1
europe-west1
asia-east1
פורסים באמצעות הפקודה הבאה:
gcloud run deploy --image gcr.io/
PROJECT_ID /helloworldכשמופיעה בקשה:
- בוחרים אזור (לדוגמה
us-central1
) - מאשרים את שם השירות (לדוגמה,
helloworld
) - משיבים
Y
כדי לאפשר הפעלות לא מאומתות
- בוחרים אזור (לדוגמה
ממתינים כמה רגעים עד שהפריסה תושלם. אם הפעולה מסתיימת ללא שגיאות, כתובת ה-URL של השירות תוצג בשורת הפקודה. לדוגמה:
https://helloworld-RANDOM_HASH-us-central1.a.run.app כדי להיכנס לקונטיינר שנפרס, פותחים את כתובת ה-URL של השירות בדפדפן אינטרנט.
בשלב הבא נסביר איך לגשת לאפליקציה בקונטיינר מכתובת URL מסוג Firebase Hosting כדי שתוכל ליצור תוכן דינמי לאתר שמתארח ב-Firebase.
שלב 4: הפניית בקשות אירוח לאפליקציה בקונטיינרים
בעזרת כללי כתיבה מחדש, אפשר להפנות בקשות שתואמות לדפוסים ספציפיים ליעד יחיד.
בדוגמה הבאה מוסבר איך להפנות את כל הבקשות מהדף /helloworld
באתר Hosting כדי להפעיל את המכונה של הקונטיינר helloworld
ולהריץ אותה.
חשוב לוודא ש:
שאתם משתמשים בגרסה האחרונה של CLI של Firebase.
ביצעתם את האיפוס של 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) } } ] }
כדי לפרוס את הגדרות האירוח באתר, מריצים את הפקודה הבאה מהשורש של תיקיית הפרויקט:
firebase deploy --only hosting
איך pinTag
פועל בתוך הבלוק run
בעזרת התכונה הזו, תוכלו לוודא שהגרסה של השירות Cloud Run ליצירת התוכן הדינמי של האתר תישאר מסונכרנת עם המשאבים הסטטיים של Hosting וההגדרות של Hosting. בנוסף, התכונה הזו מאפשרת לכם לראות תצוגה מקדימה של הטקסטים ששיניתם ל-Cloud Run בערוצי התצוגה המקדימה של Hosting.
אם מוסיפים את
"pinTag": true
לבלוקrun
של קובץ התצורהhosting.rewrites
, המשאבים וההגדרות הסטטיים של Hosting יהיו מוצמדים לגרסה האחרונה של שירות Cloud Run, בזמן הפריסה. אם תחזירו לגרסה קודמת של האתר, גם הגרסה של השירות Cloud Run שתוייג כ'מוצמדת' תוחזר לגרסה הקודמת.התכונה הזו מבוססת על תגי Cloud Run, שמספרם מוגבל ל-1,000 תגים לכל שירות ול-2,000 תגים לכל אזור. כלומר, אחרי מאות פריסות, יכול להיות שהגרסאות הישנות ביותר של האתר יפסיקו לפעול.
עכשיו אפשר לגשת לקונטיינר דרך כתובות ה-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