מזהה אזור
REGION_ID הוא קוד מקוצר ש-Google מקצה על סמך האזור שבוחרים כשיוצרים את האפליקציה. הקוד לא תואם למדינה או למחוז, למרות שחלק ממזהי האזורים עשויים להיראות דומים לקודים נפוצים של מדינות ומחוזות. באפליקציות שנוצרו אחרי פברואר 2020, REGION_ID.r נכלל בכתובות URL של App Engine. באפליקציות קיימות שנוצרו לפני התאריך הזה, מזהה האזור הוא אופציונלי בכתובת ה-URL.
במדריך הזה מוסבר איך להעביר אפליקציית App Engine קיימת שמחוברת למופע Cloud SQL עם כתובת IP ציבורית.
באופן כללי, השלבים במדריך הזה מדגימים איך אפשר לפרוס את אותו קוד מקור של אפליקציה ב-Cloud Run, ואז להגדיר אותו כך שישתמש באותו משתמש של מסד נתונים ב-Cloud SQL כדי להתחבר למכונה ולמסד הנתונים הקיימים.
השלבים במדריך הזה לא כוללים הסבר על שימוש בחיבור IP פרטי פנימי, כי כדי להשתמש בו צריך קודם לשנות את קוד האפליקציה. אבל אחרי שפורסים את האפליקציה ב-Cloud Run, אפשר לפעול לפי השלבים במאמר חיבור ל-Cloud SQL מ-Cloud Run כדי ללמוד על הדרישות ועל אופן השימוש בכתובות IP פרטיות.
כדי להבין יותר על הדמיון וההבדלים בין App Engine לבין Cloud Run, כולל היתרונות של מעבר ל-Cloud Run, אפשר לעיין בסיכום ההשוואה.
לפני שמתחילים
מוודאים ש-Cloud Run עומד בדרישות האפליקציה. כדאי לעיין בהשוואה בין App Engine לבין Cloud Run כדי לבדוק אם משאבי Cloud Run, כמו מעבד (CPU) וזיכרון, עונים על הצרכים שלכם.
צריך גישה למכונה של Cloud SQL, כולל שם המשתמש והסיסמה של מסד הנתונים לחיבור האפליקציה. Cloud Run משתמש בהצפנה ומתחבר דרך שרת ה-proxy ל-Cloud SQL Auth באמצעות שקעי Unix או מחברים של Cloud SQL.
מפעילים את Cloud Run Admin API ואת Artifact Registry API.
בודקים את ההבדלים הבאים ב-Cloud Run:
ב-Cloud Run משתמשים במונח
Revisionבמקום במונחVersionכדי לייצג כל פעם שפורסים שינויים בשירות ספציפי. כשפורסים את האפליקציה בשירות ב-Cloud Run בפעם הראשונה, נוצרת הגרסה הראשונה שלה. כל פריסה עוקבת של שירות יוצרת גרסה נוספת. מידע נוסף על פריסה ב-Cloud Runאפשר לפרוס את קוד המקור ב-Cloud Run באמצעות Google Cloud CLI או מסוף Google Cloud כדי להגדיר ולנהל את הגדרות האפליקציות. ב-Cloud Run לא נדרשת הגדרה מבוססת-קובץ, אבל יש תמיכה בהגדרת YAML, ואפשר להשתמש ב
app2runכדי לתרגם את הקובץ הקיים של App Engine ל-Cloud Run.כל שירות שפורסים ב-Cloud Run משתמש בדומיין run.app בכתובת ה-URL כדי לגשת לשירות באופן ציבורי.
בניגוד לשירותי App Engine שמוגדרים כציבוריים כברירת מחדל, שירותי Cloud Run מוגדרים כפרטיים כברירת מחדל, וצריך להגדיר אותם כדי לאפשר גישה ציבורית (ללא אימות).
Cloud Run לא תומך בשירותים בחבילה מדור קודם של App Engine.
במדריך הזה אנחנו יוצאים מנקודת הנחה שהאפליקציה שלכם ב-App Engine פועלת ללא שגיאות.
התפקידים הנדרשים
אתם יכולים ליצור חשבון שירות חדש או להמשיך להשתמש באותו חשבון שירות ב-Cloud Run שמנוהל על ידי המשתמש, שבו אתם משתמשים ב-App Engine. אתם או האדמין שלכם צריכים להעניק לחשבון הפריסה ולחשבון השירות של Cloud Build את תפקידי ה-IAM הבאים.
לוחצים כדי לראות את התפקידים הנדרשים לחשבון הפריסה
כדי לקבל את ההרשאות שנדרשות לבנייה ולפריסה ממקור, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- Cloud Run Source Developer (
roles/run.sourceDeveloper) בפרויקט - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) בפרויקט - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות של שירות Cloud Run
לחצו כדי לראות את התפקידים הנדרשים לחשבון השירות של Cloud Build
Cloud Build משתמש אוטומטית בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine כחשבון השירות שמוגדר כברירת מחדל ב-Cloud Build כדי לבנות את קוד המקור ואת משאב Cloud Run, אלא אם משנים את ההתנהגות הזו. כדי ש-Cloud Build יוכל לבצע build של המקורות, צריך לבקש מהאדמין להקצות את התפקיד Cloud Run Builder (roles/run.builder) לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine בפרויקט:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.builder
מחליפים את PROJECT_NUMBER במספר הפרויקט ואת PROJECT_ID במזהה הפרויקט. Google CloudGoogle Cloudהוראות מפורטות לאיתור מזהה הפרויקט ומספר הפרויקט מופיעות במאמר יצירה וניהול של פרויקטים.
הענקת תפקיד ה-builder ב-Cloud Run לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine לוקחת כמה דקות עד שהיא מופצת.
רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
כדי להתחבר ל-Cloud SQL באמצעות כתובת IP ציבורית, צריך להיות לכם אחד מהתפקידים הבאים:
- Cloud SQL Client (מומלץ)
- Cloud SQL Admin
- הרשאות מקבילות ב-Cloud SQL
העברת האפליקציה ל-Cloud Run
אין צורך לבצע שינויים בקוד כדי לפרוס את אפליקציית App Engine ב-Cloud Run.
בשלבים הבאים תפרסו את האפליקציה לשירות חדש ב-Cloud Run ותגדירו את השירות כך שיתחבר ל-Cloud SQL.
בדומה לסביבה הגמישה של App Engine, Cloud Run תומך בפריסות מבוססות קונטיינר ובפריסות מבוססות מקור. צריכה להיות לכם גישה לקובץ אימג' של קונטיינר או למאגר קוד המקור, בהתאם לשיטת הפריסה שבה אתם משתמשים.
פריסת קובצי אימג' של קונטיינרים
אם שירותי App Engine נפרסים באמצעות קונטיינר שנבנה באופן ידני, אפשר להשתמש באותו קובץ אימג' של קונטיינר כדי לפרוס את השירות ב-Cloud Run. כדי לפרוס את קובץ האימג' של הקונטיינר של App Engine ב-Cloud Run:
רושמים את כתובת ה-URL של המאגר שבו נמצא קובץ אימג' של קונטיינר. זו אותה כתובת URL שאתם מציינים בדגל
--image-urlכשאתם פורסים ב-App Engine.פורסים את קובץ האימג' של הקונטיינר:
console
נכנסים לדף Cloud Run במסוף Google Cloud .
לוחצים על יצירת שירות.
לוחצים על הלחצן Select בשדה Container image URL (כתובת URL של קובץ אימג' של קונטיינר) ובוחרים את קובץ האימג' של הקונטיינר שפרסתם עבור App Engine.
מזינים שם לשירות. בוחרים שם ייחודי שמייצג את האפליקציה שפורסתם.
בקטע Authentication, בוחרים באפשרות Allow unauthenticated invocations.
צריך ליצור ב-Cloud Run את אותם משתני סביבה שהגדרתם בקובץ
app.yamlשל אפליקציית App Engine. מרחיבים את הקטע Container, Networking, Security (קונטיינר, רשת, אבטחה) ויוצרים את משתני הסביבה הבאים בלחיצה על Add Variable (הוספת משתנה) בקטע Environment variables (משתני סביבה):כדי להוסיף שקעי Unix:
INSTANCE_UNIX_SOCKET: /cloudsql/INSTANCE_CONNECTION_NAMEלמחברי Cloud SQL מוסיפים:
INSTANCE_CONNECTION_NAME:INSTANCE_CONNECTION_NAMEמחליפים את INSTANCE_CONNECTION_NAME במזהה הפרויקט, באזור ובמופע שלכם, לפי הפורמט של
project:region:instance-id. אפשר למצוא אותו בדף Overview של המופע במסוףGoogle Cloud .החיבורים האלה מוצפנים אוטומטית ללא צורך בהגדרה נוספת.
DB_NAME: שם מסד הנתונים.
DB_USER: שם המשתמש של המשתמש במסד הנתונים.
DB_PASS: הסיסמה שציינתם כשיצרתם את מסד הנתונים.
בקטע Cloud SQL connections (חיבורי Cloud SQL), לוחצים על הלחצן Add Connection (הוספת חיבור) ובוחרים את המופע שיצרתם קודם ל-App Engine.
לוחצים על פריסה. אחרי פריסת שירות Cloud Run, כתובת URL תופיע בחלק העליון של הדף פרטי השירות. לוחצים על הקישור URL כדי לראות את האפליקציה שנפרסה ב-Cloud Run ומחוברת ל-Cloud SQL.
gcloud
מריצים את הפקודה הבאה כדי ליצור שירות חדש ב-Cloud Run.צריך להגדיר את דגלי התצורה כך שיכללו את אותם משתני סביבה של חיבור SQL שהוגדרו בקובץ
app.yamlשל אפליקציית App Engine:gcloud run deploy run-sql --image IMAGE \ --allow-unauthenticated \ --add-cloudsql-instances INSTANCE_CONNECTION_NAME\ --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \ --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \ --set-env-vars DB_NAME="DB_NAME" \ --set-env-vars DB_USER="DB_USER" \ --set-env-vars DB_PASS="DB_PASS"מחליפים את:
- IMAGE עם התמונה שאתם פורסים
INSTANCE_CONNECTION_NAME עם שם החיבור של המופע של Cloud SQL, או רשימה של שמות חיבורים שמופרדים באמצעות פסיקים. אפשר למצוא את
INSTANCE_CONNECTION_NAMEעל ידי הרצת הפקודה:gcloud instances describe INSTANCE_NAMEDB_NAME בשם של מסד הנתונים.
DB_USER מחליפים בשם המשתמש של מסד הנתונים.
DB_PASS מחליפים בסיסמה של משתמש מסד הנתונים.
פריסת קוד מקור
Cloud Run משתמש באופן פנימי ב-buildpacks וב-Cloud Build כדי ליצור באופן אוטומטי קובצי אימג' של קונטיינרים מקוד המקור שלכם, ולא דורש מכם ליצור קונטיינר באופן ידני או לציין קובץ Docker. עם זאת, אם קיים Dockerfile, המערכת תשתמש בו. פריסת שירות Cloud Run מקוד מקור מתבצעת באמצעות Artifact Registry, ולכן התכונה הזו זמינה רק באזורים שנתמכים על ידי Artifact Registry.
כדי לפרוס את אותו קוד מקור שפרסתם בעבר ב-App Engine:
עוברים לספריית קובצי המקור שבה נמצא קוד המקור של האפליקציה.
cd YOUR_APPENGINE_CODE_DIRפריסה ב-Cloud Run.
כדי ליצור את קוד המקור ולפרוס את האפליקציה, מריצים את פקודת הפריסה עם הדגל
--source. צריך להגדיר את דגלי ההגדרה כך שיכללו את אותם משתני סביבה של חיבור SQL שהוגדרו בקובץapp.yamlשל אפליקציית App Engine:gcloud run deploy run-sql --source . \ --allow-unauthenticated \ --add-cloudsql-instances INSTANCE_CONNECTION_NAME\ --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \ --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \ --set-env-vars DB_NAME="DB_NAME" \ --set-env-vars DB_USER="DB_USER" \ --set-env-vars DB_PASS="DB_PASS"מחליפים את INSTANCE_CONNECTION_NAME בשם החיבור של מכונת Cloud SQL, או ברשימה של שמות חיבורים שמופרדים באמצעות פסיקים. אפשר למצוא את
INSTANCE_CONNECTION_NAMEעל ידי הרצת הפקודה:gcloud instances describe INSTANCE_NAME- DB_NAME בשם של מסד הנתונים.
- DB_USER מחליפים בשם המשתמש של מסד הנתונים.
- DB_PASS מחליפים בסיסמה של משתמש מסד הנתונים.
כשמוצגת בקשה, מזינים את שם השירות.
אם מופיעות בקשות להתקנת ממשקי API נדרשים, משיבים
yכשמופיעה בקשה. צריך לעשות את זה רק פעם אחת לכל פרויקט. מחכים לסיום ה-build והפריסה. בסיום התהליך, מוצגת הודעה שדומה להודעה הבאה:Service [my-app] revision [my-app-00000-xxx] has been deployed and is serving 100 percent of traffic. Service URL: https://sample.run.appמידע נוסף על פריסת קוד מקור ב-Cloud Run זמין במאמר פריסה מקוד מקור.
השלבים הבאים
- כדאי לעיין בשיטות מומלצות ל-Cloud SQL כדי להבין איך להתחבר למכונה של Cloud SQL מ-Cloud Run.
- כאן מוסבר איך לאחסן תלויות בשירות שדורש מפתחות API, סיסמאות או מידע רגיש אחר באמצעות מנהל סודות.
- איך מנהלים את שירותי Cloud Run
- כדי להבין את הדרישות וההתנהגויות של קונטיינרים ב-Cloud Run, אפשר לעיין בחוזה של זמן הריצה של קונטיינרים ב-Cloud Run.