במדריך הזה נסביר איך ליצור שירות Cloud Run בהתאמה אישית, שממיר פרמטר קלט של תיאור תרשים לדיאגרמה בפורמט התמונה PNG. הוא משתמש ב-Graphviz ומותקן כחבילת מערכת בסביבת הקונטיינר של השירות.
כדי לשרת בקשות, Graphviz משתמש בכלי שירות של שורת הפקודה.
מטרות
- כותבים ויוצרים קונטיינר בהתאמה אישית באמצעות Dockerfile.
- כתיבה, פיתוח ופריסה של שירות Cloud Run
- שימוש בכלי Graphviz dot ליצירת דיאגרמות
- כדי לבדוק את השירות, מפרסמים דיאגרמה בתחביר DOT מהאוסף או דיאגרמה שאתם יצרתם.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Cloud de Confiance by S3NS, והשימוש בהם כרוך בתשלום:
לפני שמתחילים
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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 Cloud de Confiance project.
- הפעלת Cloud Run Admin API
- מתקינים ומפעילים את ה-CLI של gcloud.
- מעדכנים את הרכיבים:
gcloud components update
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להשלמת המדריך, בקשו מהאדמין לתת לכם את התפקידים הבאים ב-IAM ברמת הפרויקט:
- עריכה ב-Cloud Build (
roles/cloudbuild.builds.editor) - אדמין ב-Cloud Run (
roles/run.admin) - יצירת חשבונות שירות (
roles/iam.serviceAccountCreator) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) - Service Usage Consumer (
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 הם עמידה בדרישות של זמן אחזור, זמינות או עמידות.
בדרך כלל אפשר לבחור את האזור הכי קרוב למשתמשים, אבל כדאי להביא בחשבון את המיקום של המוצרים Cloud de Confianceהאחרים שמשמשים את שירות Cloud Run.
שימוש במוצרי Cloud de Confiance ביחד בכמה מיקומים יכול להשפיע על זמן האחזור של השירות וגם על העלות.
אפשר להשתמש ב-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(מילאנו)רמה נמוכה של CO2
-
europe-west9(פריז)רמה נמוכה של CO2
me-west1(תל אביב)northamerica-south1(מקסיקו)us-central1(אייווה)רמה נמוכה של CO2
us-east1(קרוליינה הדרומית)us-east4(צפון וירג'יניה)us-east5(קולומבוס)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(ורשה, פולין)רמה נמוכה של CO2
europe-west10(ברלין)-
europe-west12(טורינו)רמה נמוכה של CO2
-
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 במסוףCloud de Confiance .
אחזור של דוגמת הקוד
כדי לאחזר את דוגמת הקוד לשימוש:
משכפלים את המאגר של האפליקציה לדוגמה ומעבירים אותו למכונה המקומית:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
אפשר גם להוריד את הדוגמה כקובץ ZIP ולחלץ אותו.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
אפשר גם להוריד את הדוגמה כקובץ ZIP ולחלץ אותו.
המשך
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
אפשר גם להוריד את הדוגמה כקובץ ZIP ולחלץ אותו.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
אפשר גם להוריד את הדוגמה כקובץ ZIP ולחלץ אותו.
עוברים לספרייה שמכילה את הקוד לדוגמה של Cloud Run:
Node.js
cd nodejs-docs-samples/run/system-package/
Python
cd python-docs-samples/run/system-package/
Go
cd golang-samples/run/system_package/
Java
cd java-docs-samples/run/system-package/
המחשת הארכיטקטורה
הארכיטקטורה הבסיסית נראית כך:
המשתמש שולח בקשת HTTP לשירות Cloud Run, שמפעיל כלי של Graphviz כדי להפוך את הבקשה לתמונה. התמונה הזו נשלחת למשתמש כתגובת HTTP.
הסבר על הקוד
הגדרת הסביבה באמצעות Dockerfile
ה-Dockerfile ספציפי לשפה ולסביבת ההפעלה הבסיסית, כמו Ubuntu, שבה השירות ישתמש.
השירות הזה דורש חבילת מערכת אחת או יותר שלא זמינה כברירת מחדל.
פותחים את
Dockerfileבכלי לעריכת טקסט.מחפשים את דף החשבון של
Dockerfileב-RUN. ההצהרה הזו מאפשרת להריץ פקודות shell שרירותיות כדי לשנות את הסביבה. אם ל-Dockerfileיש כמה שלבים, שמזוהים על ידי מציאת כמה הצהרותFROM, הוא יימצא בשלב האחרון.החבילות הספציפיות שנדרשות והמנגנון להתקנה שלהן משתנים בהתאם למערכת ההפעלה שמוצהרת בתוך הקונטיינר.
כדי לקבל הוראות למערכת ההפעלה או לתמונת הבסיס, לוחצים על הכרטיסייה המתאימה.
Debian/Ubuntu Alpine ב-Alpine נדרשת חבילה שנייה לתמיכה בגופנים.כדי לזהות את מערכת ההפעלה של קובץ האימג' של הקונטיינר, בודקים את השם בהצהרה
FROMאו בקובץ README שמשויך לקובץ האימג' הבסיסי. לדוגמה, אם אתם מרחיבים מ-node, תוכלו למצוא את התיעוד ואת ה-Dockerfileההורה ב-Docker Hub.כדי לבדוק את ההתאמה האישית, יוצרים את קובץ האימג' באמצעות
docker buildבאופן מקומי או באמצעות Cloud Build.
טיפול בבקשות נכנסות
השירות לדוגמה משתמש בפרמטרים מבקשת ה-HTTP הנכנסת כדי להפעיל קריאת מערכת שמריצה את פקודת השירות המתאימה של dot.
ב-HTTP handler שבהמשך, פרמטר קלט של תיאור תרשים נשלף מהמשתנה dot של מחרוזת השאילתה.
תיאורי תרשימים יכולים לכלול תווים שצריך לקודד בכתובת URL כדי להשתמש בהם במחרוזת שאילתה.
Node.js
Python
Go
Java
צריך להבדיל בין שגיאות שרת פנימיות לבין קלט לא חוקי של משתמשים. השירות לדוגמה מחזיר שגיאת שרת פנימית לכל שגיאות שורת הפקודה של dot, אלא אם הודעת השגיאה מכילה את המחרוזת syntax, שמציינת בעיה בקלט של המשתמש.
יוצר דיאגרמה
הלוגיקה המרכזית של יצירת הדיאגרמה משתמשת בכלי שורת הפקודה dot כדי לעבד את פרמטר הקלט של תיאור התרשים לדיאגרמה בפורמט תמונה PNG.
Node.js
Python
Go
Java
תכנון שירות מאובטח
כל נקודת חולשה בכלי dot היא נקודת חולשה פוטנציאלית של שירות האינטרנט. כדי לצמצם את הסיכון, אתם יכולים להשתמש בגרסאות עדכניות של החבילה graphviz על ידי בנייה מחדש של קובץ האימג' של הקונטיינר באופן קבוע.
אם אתם מרחיבים את הדוגמה הנוכחית כדי לקבל קלט מהמשתמש כפרמטרים של שורת הפקודה, אתם צריכים להגן מפני מתקפות של הזרקת פקודות. כמה מהדרכים למנוע מתקפות החדרת קוד:
- מיפוי של קלט למילון של פרמטרים נתמכים
- אימות שהקלט תואם לטווח של ערכים בטוחים, אולי באמצעות ביטויים רגולריים
- הוספת תווי בריחה (escape) לקלט כדי לוודא שתחביר המעטפת לא יפורש
כדי לצמצם עוד יותר את נקודות החולשה הפוטנציאליות, אפשר לפרוס את השירות באמצעות חשבון שירות שלא קיבל הרשאות לשימוש בשירותי Cloud de Confiance by S3NS, במקום להשתמש בחשבון ברירת המחדל שיש לו הרשאות נפוצות. לכן, בשלבים שבמדריך הזה יוצרים חשבון שירות חדש ומשתמשים בו.
השקת הקוד
כדי לשלוח את הקוד, אתם יוצרים אותו באמצעות Cloud Build, מעלים אותו ל-Artifact Registry ופורסים אותו ב-Cloud Run:
יוצרים מאגר ב-Artifact Registry:
gcloud artifacts repositories create REPOSITORY \ --repository-format docker \ --location REGION
מחליפים את:
- REPOSITORY: שם ייחודי למאגר. לכל מיקום של מאגר בפרויקט, שמות המאגרים חייבים להיות ייחודיים.
- REGION: האזור של Cloud de Confiance by S3NS שבו ישתמשו למאגר של Artifact Registry.
מריצים את הפקודה הבאה כדי ליצור את הקונטיינר ולפרסם אותו ב-Artifact Registry.
Node.js
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz
כאשר PROJECT_ID הוא מזהה הפרויקט ב- Cloud de Confiance , ו-
graphvizהוא השם שרוצים לתת לשירות.אם הפעולה תצליח, תופיע הודעת SUCCESS עם המזהה, זמן היצירה ושם התמונה. התמונה מאוחסנת ב-Artifact Registry ואפשר להשתמש בה שוב אם רוצים.
Python
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz
כאשר PROJECT_ID הוא מזהה הפרויקט ב- Cloud de Confiance , ו-
graphvizהוא השם שרוצים לתת לשירות.אם הפעולה תצליח, תופיע הודעת SUCCESS עם המזהה, זמן היצירה ושם התמונה. התמונה מאוחסנת ב-Artifact Registry ואפשר להשתמש בה שוב אם רוצים.
המשך
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz
כאשר PROJECT_ID הוא מזהה הפרויקט ב- Cloud de Confiance , ו-
graphvizהוא השם שרוצים לתת לשירות.אם הפעולה תצליח, תופיע הודעת SUCCESS עם המזהה, זמן היצירה ושם התמונה. התמונה מאוחסנת ב-Artifact Registry ואפשר להשתמש בה שוב אם רוצים.
Java
בדוגמה הזו משתמשים ב-Jib כדי ליצור קובצי אימג' של Docker באמצעות כלי Java נפוצים. Jib מבצע אופטימיזציה של גרסאות build של קונטיינרים בלי צורך בקובץ Docker או בהתקנה של Docker. מידע נוסף על יצירת קונטיינרים של Java באמצעות Jibבאמצעות קובץ ה-Docker, מגדירים ויוצרים קובץ אימג' בסיסי עם חבילות המערכת המותקנות כדי לשנות את קובץ האימג' הבסיסי שמוגדר כברירת מחדל ב-Jib:
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz-base
PROJECT_ID הוא מזהה הפרויקט ב- Cloud de Confiance .
משתמשים בכלי העזר של פרטי הכניסה של gcloud כדי לתת ל-Docker הרשאה להעביר קבצים בדחיפה ל-Artifact Registry.
gcloud auth configure-docker
יוצרים את מאגר התגים הסופי באמצעות Jib ומפרסמים אותו ב-Artifact Registry:
mvn compile jib:build \ -Dimage=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz \ -Djib.from.image=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz-base
PROJECT_ID הוא מזהה הפרויקט ב- Cloud de Confiance .
פורסים באמצעות:
gcloud
- יוצרים חשבון שירות חדש. הקוד שלכם, כולל כל חבילות המערכת שבהן הוא משתמש, יכול להשתמש רק בשירותיCloud de Confiance by S3NS שהוקצו לחשבון השירות הזה.
כאשר SA_NAME הוא השם שאתם נותנים לחשבון השירות הזה. אם יש שגיאה או נקודת חולשה בקוד, הוא לא יוכל לגשת לאף אחד מהמשאבים האחרים בפרויקט ב- Cloud de Confiance by S3NS .gcloud iam service-accounts create SA_NAME
- פורסים את הקוד ומציינים את חשבון השירות.
כאשר PROJECT_ID הוא מזהה הפרויקט ב- Cloud de Confiance , SA_NAME הוא שם חשבון השירות שיצרתם,gcloud run deploy graphviz-web --service-account SA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz
graphvizהוא שם הקונטיינר שלמעלה ו-graphviz-webהוא שם השירות. משיביםYלהודעה allow unauthenticated. במאמר ניהול הגישה מוסבר בהרחבה על אימות מבוסס-IAM. - מחכים שהפריסה תסתיים. התהליך עשוי להימשך כחצי דקה. אם הפעולה מצליחה, כתובת ה-URL של השירות מוצגת בשורת הפקודה.
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
קוד Terraform הבא יוצר שירות Cloud Run.
מחליפים את
IMAGE_URLבהפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הואLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.קוד Terraform הבא הופך את שירות Cloud Run לציבורי.
- יוצרים חשבון שירות חדש. הקוד שלכם, כולל כל חבילות המערכת שבהן הוא משתמש, יכול להשתמש רק בשירותיCloud de Confiance by S3NS שהוקצו לחשבון השירות הזה.
כדי לפרוס עדכון קוד בשירות, חוזרים על השלבים הקודמים. כל פריסה בשירות יוצרת גרסה חדשה, ומתחילה להעביר תנועה באופן אוטומטי כשהיא מוכנה.
רוצה לנסות?
כדי לנסות את השירות, שולחים בקשות HTTP POST עם תיאורים בתחביר DOT במטען הייעודי (payload) של הבקשה.
שולחים בקשת HTTP לשירות.
מעתיקים את כתובת ה-URL לסרגל הכתובות של הדפדפן ומעדכנים את
[SERVICE_DOMAIN]:https://SERVICE_DOMAIN/diagram.png?dot=digraph Run { rankdir=LR Code -> Build -> Deploy -> Run }
אתם יכולים להטמיע את הדיאגרמה בדף אינטרנט:
<img src="https://SERVICE_DOMAIN/diagram.png?dot=digraph Run { rankdir=LR Code -> Build -> Deploy -> Run }" />
פותחים את קובץ ה-
diagram.pngשנוצר בכל אפליקציה שתומכת בקובציPNG, כמו Chrome.הוא אמור להיראות כך:
מקור: תיאור של DOT
אתם יכולים לעיין באוסף קטן של תיאורי דיאגרמות מוכנים מראש.
- העתקת התוכן של קובץ
.dotשנבחר שליחת בקשת HTTP לשירות.
מעתיקים את כתובת ה-URL לסרגל הכתובות של הדפדפן.
https://SERVICE_DOMAIN/diagram.png?dot=SELECTED DOTFILE CONTENTS
הסרת המשאבים
כדי להימנע מחיובים נוספים בחשבון Cloud de Confiance by S3NS , צריך למחוק את כל המשאבים שפרסתם באמצעות המדריך הזה.
מחיקת הפרויקט
אם יצרתם פרויקט חדש בשביל המדריך הזה, מחקו את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שהוספתם במדריך הזה, מחקו את המשאבים שיצרתם בשביל המדריך.
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
כדי למחוק את הפרויקט:
- במסוף Cloud de Confiance , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת משאבי המדריך
מוחקים את שירות Cloud Run שפרסתם במדריך הזה. שירותי Cloud Run לא צוברים עלויות עד שהם מקבלים בקשות.
כדי למחוק את השירות ב-Cloud Run, מריצים את הפקודה הבאה:
gcloud run services delete SERVICE-NAME
מחליפים את SERVICE-NAME בשם השירות.
אפשר גם למחוק שירותי Cloud Run ממסוףCloud de Confiance .
מסירים את הגדרת ברירת המחדל של האזור
gcloudשהוספתם במהלך הגדרת המדריך:gcloud config unset run/regionמסירים את הגדרות הפרויקט:
gcloud config unset projectמוחקים משאבים אחרים של Cloud de Confiance by S3NS שנוצרו במדריך הזה:
מוחקים את קובץ האימג' של הקונטיינר בשם
REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphvizמ-Artifact Registry.מוחקים את חשבון השירות SA_NAME.
gcloud iam service-accounts delete SA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com
המאמרים הבאים
- ניסוי עם אפליקציית Graphviz:
- הוספת תמיכה בכלי עזר אחרים של Graphviz, שמפעילים אלגוריתמים שונים ליצירת דיאגרמות.
- שמירת תרשימים ב-Cloud Storage. רוצה לשמור את התמונה או את תחביר ה-DOT?
- Cloud Natural Language API: הטמעת הגנה מפני ניצול לרעה של תוכן.
- דוגמה נוספת לחבילת מערכת מופיעה במדריך לעיבוד תמונות באמצעות Cloud Run.
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.