במדריך הזה יוצרים מלאי של שירותי Cloud Run באמצעות Google Cloud CLI בתוך שירות Cloud Run. אתם יכולים ליישם את מה שתלמדו במדריך הזה בסקריפטים קיימים של פעולות ב-Cloud, או לבנות הוכחת היתכנות לפני שתשתמשו בספריות לקוח כדי לבנות שירות חזק יותר.
משתמשים ב-CLI של gcloud כמו בכל סקריפט מעטפת בתוך שירות אינטרנט, כמו שמוצג במדריך למתחילים בנושא מעטפת. ב-Cloud Run, שני הכלים פועלים עם שירותים על ידי אימות אוטומטי באמצעות זהות השירות של Cloud Run. Google Cloudכל ההרשאות שניתנות לזהות השירות זמינות ל-CLI של gcloud.
ה-CLI של gcloud מסוגל לאסוף מידע ולנהל משאבים במגוון רחב של שירותים Google Cloud , ולכן האתגר בשימוש בו בשירות אינטרנט הוא צמצום הסיכון לשימוש לרעה ביכולות האלה על ידי המתקשר. ללא אמצעי בקרה לאבטחה, אתם עלולים ליצור סיכון לשירותים או למשאבים אחרים שפועלים באותו פרויקט, בכך שתאפשרו פעילות זדונית מקרית או מכוונת. דוגמאות לסיכונים כאלה:
- הפעלת האפשרות לגלות כתובות IP של מכונות וירטואליות פרטיות
- הפעלת גישה לנתונים פרטיים ממסד נתונים באותו פרויקט
- הפעלת מחיקה של שירותים אחרים שפועלים
במדריך הזה יש כמה שלבים שמראים איך להטיל אמצעי בקרה כדי לצמצם את הסיכונים, כמו ציון הפקודה gcloud שתופעל בקוד, במקום להשאיר אותה פתוחה כקלט של משתמשים.
כתיבת סקריפטים באמצעות כלי שורת הפקודה בתוך שירות Cloud Run דומה לשימוש בשורת הפקודה באופן מקומי. ההבדל העיקרי הוא ההגבלות הנוספות שצריך להוסיף סביב הלוגיקה של הסקריפט הראשי.
מטרות
- לכתוב ולבנות קונטיינר בהתאמה אישית באמצעות Dockerfile
- כתיבה, פיתוח ופריסה של שירות Cloud Run
- שימוש ב-CLI של gcloud בצורה בטוחה בשירות אינטרנט
- יצירת דוח של שירותי Cloud Run ושמירה שלו ב-Cloud Storage
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
מפעילים את ממשקי ה-API של Artifact Registry, Cloud Build, Cloud Run ו-Cloud Storage.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים- מתקינים ומפעילים את ה-CLI של gcloud.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להשלמת המדריך, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- עריכה ב-Cloud Build (
roles/cloudbuild.builds.editor) - אדמין ב-Cloud Run (
roles/run.admin) - יצירת חשבונות שירות (
roles/iam.serviceAccountCreator) - אדמין IAM בפרויקט (
roles/resourcemanager.projectIamAdmin) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) - צרכן שימוש בשירות (
roles/serviceusage.serviceUsageConsumer) - אדמין באחסון (
roles/storage.admin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
הגדרת ברירות מחדל ב-gcloud
כדי להגדיר את gcloud עם ערכי ברירת מחדל לשירות Cloud Run:
מגדירים את פרויקט ברירת המחדל:
gcloud config set project PROJECT_ID
מחליפים את PROJECT_ID בשם הפרויקט שיצרתם לצורך המדריך הזה.
מגדירים את gcloud לאזור שבחרתם:
gcloud config set run/region REGION
מחליפים את REGION באזור נתמך ב-Cloud Run לבחירתכם.
מיקומים של Cloud Run
Cloud Run הוא שירות אזורי, כלומר התשתית שמריצה את שירותי Cloud Run ממוקמת באזור ספציפי ומנוהלת על ידי Google כך שתהיה זמינה באופן יתירתי בכל התחומים באותו אזור.
הקריטריונים העיקריים לבחירת האזור שבו יפעלו שירותי Cloud Run הם זמן האחזור, הזמינות או העמידות שנדרשים לכם.
בדרך כלל אפשר לבחור את האזור הקרוב ביותר למשתמשים, אבל כדאי לקחת בחשבון את המיקום של מוצרים Google Cloud
אחרים שבהם נעשה שימוש בשירות Cloud Run.
השימוש במוצרים של Google Cloud Google Cloud יחד בכמה מיקומים יכול להשפיע על זמן האחזור ועל העלות של השירות.
Cloud Run זמין באזורים הבאים:
בכפוף לתמחור ברמה 1
asia-east1(טייוואן)asia-northeast1(טוקיו)-
asia-northeast2(אוסקה) asia-south1(מומבאי, הודו)-
asia-southeast3(בנגקוק) europe-north1(פינלנד)רמה נמוכה של CO2
europe-north2(שטוקהולם)רמה נמוכה של CO2
europe-southwest1(מדריד)רמה נמוכה של CO2
europe-west1(בלגיה)רמה נמוכה של CO2
europe-west4(הולנד)רמה נמוכה של CO2
europe-west8(מילאנו)europe-west9(פריז)רמה נמוכה של CO2
me-west1(תל אביב)northamerica-south1(מקסיקו)us-central1(אייווה)רמה נמוכה של CO2
us-east1(דרום קרוליינה)-
us-east4(צפון וירג'יניה) us-east5(Columbus)us-south1(דאלאס)רמה נמוכה של CO2
us-west1(אורגון)רמה נמוכה של CO2
בכפוף לתמחור ברמה 2
africa-south1(יוהנסבורג)asia-east2(הונג קונג)asia-northeast3(סיאול, קוריאה הדרומית)asia-southeast1(סינגפור)asia-southeast2(ג'אקארטה)asia-south2(דלהי, הודו)-
australia-southeast1(סידני) australia-southeast2(מלבורן)europe-central2(ורשה, פולין)-
europe-west10(Berlin) europe-west12(טורינו)europe-west2(לונדון, בריטניה)רמה נמוכה של CO2
-
europe-west3(פרנקפורט, גרמניה) europe-west6(ציריך, שווייץ)רמה נמוכה של CO2
-
me-central1(דוחה) -
me-central2(דמאם) northamerica-northeast1(מונטריאול)רמה נמוכה של CO2
northamerica-northeast2(טורונטו)רמה נמוכה של CO2
southamerica-east1(סאו פאולו, ברזיל)רמה נמוכה של CO2
southamerica-west1(סנטיאגו, צ'ילה)רמה נמוכה של CO2
-
us-west2(לוס אנג'לס) -
us-west3(סולט לייק סיטי) -
us-west4(לאס וגאס)
אם כבר יצרתם שירות Cloud Run, תוכלו לראות את האזור בלוח הבקרה של Cloud Run בGoogle Cloud מסוף.
אחזור של דוגמת הקוד
כדי לאחזר את דוגמת קוד לשימוש:
משכפלים את מאגר האפליקציה לדוגמה ומעבירים אותו למכונה המקומית:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples.git
אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
עוברים לספרייה שמכילה את הקוד לדוגמה של Cloud Run:
cd cloud-run-samples/gcloud-report/
בדיקת הקוד
בקטע הזה מופיע מידע על דוגמת הקוד שאותרה.
יצירת דוח והעלאה שלו ל-Cloud Storage
סקריפט מעטפת זה יוצר דוח של שירותי Cloud Run בפרויקט ובאזור הנוכחיים, ומעלה את התוצאה ל-Cloud Storage. הפונקציה מפרטת את השירותים שהשם שלהם מכיל את הארגומנט search של המחרוזת שסופקה.
הסקריפט משתמש בפקודה gcloud run services list, בgcloudאפשרויות מתקדמות של פורמט ובמצב העתקה של gcloudהעברת סטרימינג.
אפשר להריץ את הסקריפט הזה בבטחה כשירות, כי הפעלות חוזרות שלו מעדכנות את הדוח בלי לגרום לעלויות נוספות. סקריפטים אחרים שמשתמשים ב-CLI של gcloud יכולים להיות יקרים יותר אם מפעילים אותם שוב ושוב, למשל אם הם יוצרים משאבי Cloud חדשים או מבצעים משימות יקרות. סקריפטים אידמפוטנטיים, שמניבים את אותה תוצאה בהפעלות חוזרות, בטוחים יותר להפעלה כשירות.
הפעלת הסקריפט בבקשת HTTP
קוד Go זה מגדיר שירות אינטרנט שמריץ סקריפט מעטפת כדי ליצור דוח. מכיוון ששאילתת החיפוש היא קלט של משתמשים, הקוד מאמת אותה כדי לוודא שהיא מכילה רק אותיות, מספרים או מקפים, וכך למנוע פקודות זדוניות כקלט. הקבוצה הזו של תווים מצומצמת מספיק כדי למנוע מתקפות של החדרת פקודות.
שירות האינטרנט מעביר את פרמטר החיפוש כארגומנט לסקריפט מעטפת.
בקובץ go.mod מוצהרים יחסי התלות של האפליקציה במודול Go:
הגדרת סביבת המאגר
קובץ ה-Dockerfile מגדיר איך הסביבה מורכבת בשביל השירות.
הוא דומה לקובץ Dockerfile מהמדריך המהיר helloworld-shell, אבל תמונת הקונטיינר הסופית מבוססת על תמונת Google Cloud CLI gcloud. כך השירות יכול להשתמש ב-gcloud בלי שתצטרכו לבצע שלבי התקנה והגדרה מותאמים אישית עבור Google Cloud CLI.
יצירת מאגר רגיל ב-Artifact Registry
יוצרים מאגר רגיל של Artifact Registry לאחסון קובץ האימג' של הקונטיינר:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=REGION
מחליפים את:
- REPOSITORY בשם ייחודי למאגר.
- REGION עם Google Cloud האזור של Artifact Registry.
הגדרת קטגוריה של Cloud Storage
יוצרים קטגוריה של Cloud Storage להעלאת דוחות:
gcloud storage buckets create gs://REPORT_ARCHIVE_BUCKET
מחליפים את REPORT_ARCHIVE_BUCKET בשם ייחודי לקטגוריה.
הגדרת הזהות בשירות
כדי להגביל את ההרשאות שיש לשירות לגשת לתשתית אחרת, אתם יוצרים זהות שירות ומגדירים את הרשאות ה-IAM הספציפיות שנדרשות לביצוע העבודה.
במקרה הזה, ההרשאות הנדרשות הן הרשאה לקריאת שירותים של Cloud Run והרשאה לקריאה וכתיבה בקטגוריה של Cloud Storage.
יוצרים חשבון שירות:
gcloud iam service-accounts create gcloud-report-identity
נותנים לחשבון השירות הרשאה לקרוא שירותי Cloud Run:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:gcloud-report-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/run.viewer
נותנים לחשבון השירות הרשאה לקרוא ולכתוב בקטגוריה של Cloud Storage:
gcloud storage buckets add-iam-policy-binding gs://REPORT_ARCHIVE_BUCKET \ --member=serviceAccount:gcloud-report-identity@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/storage.objectUser
הגישה המוגבלת של זהות השירות המותאמת הזו מונעת מהשירות לגשת למשאבים אחרים של Google Cloud .
משלוח השירות
קוד המשלוח כולל שלושה שלבים:
- יצירת קובץ אימג' של קונטיינר באמצעות Cloud Build
- העלאת קובץ האימג' של הקונטיינר אל Artifact Registry
- פריסת קובץ האימג' של הקונטיינר ב-Cloud Run.
כדי לשלוח את הקוד:
יוצרים את הקונטיינר ומפרסמים אותו ב-Artifact Registry:
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/gcloud-report
מחליפים את:
- PROJECT_ID במזהה הפרויקט ב- Google Cloud
- REPOSITORY בשם המאגר ב-Artifact Registry.
- REGION עם Google Cloud האזור של Artifact Registry.
gcloud-reportהוא השם של השירות.אם הפעולה תצליח, תוצג הודעה עם המזהה, זמן היצירה ושם התמונה. התמונה מאוחסנת ב-Artifact Registry ואפשר לעשות בה שימוש חוזר אם צריך.
מריצים את הפקודה הבאה כדי לפרוס את השירות:
gcloud run deploy gcloud-report \ --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/gcloud-report \ --update-env-vars GCLOUD_REPORT_BUCKET=REPORT_ARCHIVE_BUCKET \ --service-account gcloud-report-identity \ --no-allow-unauthenticated
מחליפים את:
- PROJECT_ID במזהה הפרויקט ב- Google Cloud .
- REPOSITORY בשם המאגר ב-Artifact Registry.
- REGION עם האזור Google Cloud של השירות.
gcloud-reportהוא חלק משם הקונטיינר ומשם השירות. קובץ האימג' של הקונטיינר נפרס בשירות ובאזור (Cloud Run) שהגדרתם קודם בקטע הגדרת gcloud.הדגל
--no-allow-unauthenticatedמגביל את הגישה הציבורית לשירות. אם השירות פרטי, אפשר להסתמך על האימות המובנה של Cloud Run כדי לחסום בקשות לא מורשות. לפרטים נוספים על אימות שמבוסס על ניהול זהויות והרשאות גישה (IAM), אפשר לעיין במאמר ניהול גישה באמצעות IAM.מחכים עד שהפריסה תסתיים. הפעולה עשויה להימשך כחצי דקה. אם הפעולה בוצעה ללא שגיאות, כתובת ה-URL של השירות מוצגת בשורת הפקודה.
אם רוצים לפרוס עדכון קוד בשירות, חוזרים על השלבים הקודמים. כל פריסה לשירות יוצרת גרסה חדשה ומתחילה להציג תנועה באופן אוטומטי כשהיא מוכנה.
במאמר ניהול גישה באמצעות IAM מוסבר איך להעניק Google Cloud למשתמשים גישה להפעלת השירות הזה. לעורכים ולבעלים של הפרויקט יש גישה אוטומטית.
יצירת דוח
כדי ליצור דוח של שירותי Cloud Run:
משתמשים ב-curl כדי לשלוח בקשה מאומתת:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
מחליפים את SERVICE_URL בכתובת ה-URL ש-Cloud Run מספק אחרי השלמת הפריסה.
אם יצרתם פרויקט חדש ופעלתם לפי ההוראות במדריך הזה, הפלט ייראה בערך כך:
Wrote report to gs://REPORT_ARCHIVE_BUCKET/report-.-DATE.txt
הערך
.בשם הקובץ הוא ארגומנט החיפוש שמוגדר כברירת מחדל, כפי שצוין בקוד המקור.כדי להשתמש בתכונת החיפוש, מוסיפים ארגומנט
searchלבקשה:curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL?search=gcloud
הפלט שיוחזר מהשאילתה הזו ייראה בערך כך:
Wrote report to gs://REPORT_ARCHIVE_BUCKET/report-gcloud-DATE.txt
מאחזרים את הקובץ באמצעות ה-CLI של gcloud באופן מקומי:
gcloud storage cp gs://REPORT_FILE_NAME .
הסימן
.בפקודה מציין את ספריית העבודה הנוכחית.מחליפים את REPORT_FILE_NAME בשם האובייקט ב-Cloud Storage שמופיע בפלט מהשלב הקודם.
פותחים את הקובץ כדי לראות את הדוח. הוא אמור להיראות כך:
שיפור החוסן לעתיד
אם אתם מתכוונים להמשיך לפתח את השירות הזה, כדאי לשקול לכתוב אותו מחדש בשפת תכנות חזקה יותר ולהשתמש ב-Cloud Run Admin API ובספריית הלקוח של Cloud Storage.
כדי לבדוק את הקריאות ל-API שמתבצעות (ולראות פרטים מסוימים של אימות), מוסיפים --log-http לפקודות של ה-CLI של gcloud.
אוטומציה של הפעולה הזו
עכשיו אפשר להפעיל את הדוח של שירותי Cloud Run באמצעות בקשת HTTP, ולכן אפשר להשתמש באוטומציה כדי ליצור דוחות כשצריך אותם:
- הפעלת השירות הזה לפי לוח זמנים באמצעות Cloud Scheduler
- יצירת הדוח כמשימה בתור או קביעת מועד עתידי באמצעות Google Tasks
הסרת המשאבים
כדי להימנע מחיובים נוספים בחשבון Google Cloud , מוחקים את כל המשאבים שהצבתם באמצעות המדריך הזה.
מחיקת הפרויקט
אם יצרתם פרויקט חדש בשביל המדריך הזה, מוחקים את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שהוספתם במדריך הזה, תצטרכו למחוק את המשאבים שיצרתם לצורך המדריך.
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת משאבי הדרכה
מוחקים את שירות Cloud Run שפרסתם במדריך הזה. שירותי Cloud Run לא צוברים עלויות עד שהם מקבלים בקשות.
כדי למחוק את שירות Cloud Run, מריצים את הפקודה הבאה:
gcloud run services delete SERVICE-NAME
מחליפים את SERVICE-NAME בשם השירות.
אפשר גם למחוק שירותים של Cloud Run מGoogle Cloud המסוף.
מסירים את הגדרת ברירת המחדל של האזור
gcloudשהוספתם במהלך ההגדרה של המדריך:gcloud config unset run/regionמסירים את הגדרות הפרויקט:
gcloud config unset projectמחיקת משאבים אחרים Google Cloud שנוצרו במדריך הזה:
המאמרים הבאים
- כדי לצמצם את יחסי התלות של השירות, מחליפים את ה-CLI של gcloud בקריאות ל-API: העלאת אובייקטים, הפניית Cloud Run Admin API
- כדי לשפר עוד יותר את האבטחה, אפשר להשתמש באמצעי בקרה לכניסה לרשת כדי להגביל את הגישה לשירות.
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.