1. מבוא
שלום לכולם, תודה שהגעתם היום! רוצים ללמוד על Google Compute Engine?
ב-Codelab הזה נלמד על Compute Engine באמצעות דוגמה של אפליקציית ספר אורחים.
תצטרכו ליצור מכונות של Compute Engine, לפרוס nginx ולבסוף להציב מאזן עומסי רשת בחזית. אפשר ליצור מכונה של Compute Engine דרך המסוף הגרפי או דרך שורת הפקודה. ב-Lab הזה תלמדו איך להשתמש בשורת הפקודה.

Google Compute Engine מציע מכונות וירטואליות שפועלות במרכזי הנתונים של Google שמחוברים לרשת הסיבים האופטיים שלה ברחבי העולם. הכלים ותהליך העבודה שמוצעים מאפשרים להרחיב את הפתרון ממקרים בודדים למחשוב ענן גלובלי עם איזון עומסים.
המכונות הווירטואליות האלה מופעלות במהירות, כוללות אחסון בדיסק אחסון מתמיד (persistent disk) ומספקות ביצועים עקביים. המכונות זמינות בהרבה תצורות, כולל גדלים מוגדרים מראש, ואפשר גם ליצור אותן עם סוגי מכונות בהתאמה אישית שממוטבים לצרכים הספציפיים שלכם.
לבסוף, מכונות וירטואליות ב-Compute Engine הן גם הטכנולוגיה שמשמשת כמה מוצרים אחרים של Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow וכו').
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת של תווים שלא נמצאת בשימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
- מזהה הפרויקט חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא צריך להתייחס אליה. ברוב סדנאות ה-Codelab, צריך להפנות למזהה הפרויקט (ובדרך כלל הוא מזוהה כ-
PROJECT_ID), אז אם לא מוצא חן בעיניכם, אפשר ליצור מזהה אקראי אחר, או לנסות מזהה משלכם ולבדוק אם הוא זמין. אחרי שהפרויקט נוצר, הוא 'קפוא'. - יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. כדי לכבות את המשאבים ולא לחייב אתכם מעבר למה שמוסבר במדריך הזה, צריך לפעול לפי ההוראות לניקוי שמופיעות בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
Google Cloud Shell
אפשר להפעיל את Google Cloud ואת Compute Engine מרחוק מהמחשב הנייד, אבל בסדנת הקוד הזו נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
המכונה הווירטואלית הזו מבוססת על Debian, וטעונים בה כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. כלומר, כל מה שצריך כדי לבצע את ההוראות במאמר הזה הוא דפדפן (כן, זה עובד ב-Chromebook).
- כדי להפעיל את Cloud Shell ממסוף Cloud, פשוט לוחצים על הפעלת Cloud Shell
(הקצאת המשאבים והחיבור לסביבה אמורים להימשך רק כמה רגעים).


אחרי שמתחברים ל-Cloud Shell, אמור להופיע אימות שכבר בוצע, ושהפרויקט כבר הוגדר ל-PROJECT_ID.
gcloud auth list
פלט הפקודה
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם מסיבה כלשהי הפרויקט לא מוגדר, פשוט מריצים את הפקודה הבאה:
gcloud config set project <PROJECT_ID>
מחפש את PROJECT_ID? כדאי לבדוק באיזה מזהה השתמשתם בשלבי ההגדרה, או לחפש אותו בלוח הבקרה של Cloud Console:

ב-Cloud Shell מוגדרים גם כמה משתני סביבה כברירת מחדל, שיכולים להיות שימושיים כשמריצים פקודות בעתיד.
echo $GOOGLE_CLOUD_PROJECT
פלט הפקודה
<PROJECT_ID>
- לבסוף, מגדירים את אזור ברירת המחדל ואת הגדרת הפרויקט.
gcloud config set compute/zone us-central1-f
אפשר לבחור מתוך מגוון אזורים שונים. מידע נוסף זמין במאמר בנושא אזורים ותחומים.
3. יצירת מכונה של Compute Engine
כפי שצוין קודם, נשתמש בשורת הפקודה gcloud ב-codelab הזה. אפשר לבצע את כל הפעולות האלה באמצעות המסוף (שזמין בכתובת console.cloud.google.com).
קודם ניצור מכונה עם הגדרות ברירת מחדל :
$ gcloud compute instances create myinstance Created [...]. NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
חשוב לרשום את EXTERNAL_IP כדי להשתמש בו בהמשך.
המופע נוצר באמצעות מספר הגדרות ברירת מחדל :
- האזור שבוחרים. כל המופעים נמצאים באזור. אפשר לבחור אזור כשיוצרים את המופע באמצעות הדגל
--zone, או להגדיר אזור ברירת מחדל (כמו שעשינו בהגדרה הראשונית) ולהשמיט את הדגל--zone. - קובץ האימג' העדכני ביותר של Debian GNU/Linux 9 (stretch). אם אתם משתמשים בתמונה בהתאמה אישית, צריך לציין כאן את שם התמונה. לדוגמה,
--image my-own-image. - סוג המכונה
n1-standard-1. אפשר לבחור סוג מכונה אחר, כמוn1-highmem-4אוn1-highcpu-6. אם אף אחת מהמכונות עם קונפיגורציה מוגדרת (predefined) לא מתאימה לצרכים שלכם, תוכלו להשתמש בסוג מכונה בהתאמה אישית. - הרמה הבסיסית (root) של אחסון מתמיד (persistent disk) עם שם זהה למכונה. האחסון יתחבר באופן אוטומטי למכונה.
מריצים את הפקודה gcloud compute instances create --help כדי לראות את כל האפשרויות הזמינות.
4. הפעלת חומת אש ליציאה 80
כברירת מחדל, ב-Google Cloud Platform מותרת גישה למספר קטן של יציאות. מכיוון שאנחנו עומדים להתקין את Nginx בקרוב, נפעיל קודם את יציאה 80 בהגדרות חומת האש.
$ gcloud compute firewall-rules create allow-80 --allow tcp:80 Created [...]. NAME: allow-80 NETWORK: default DIRECTION: INGRESS PRIORITY: 1000 ALLOW: tcp:80 DENY: DISABLED: False
פעולה זו תיצור כלל חומת אש בשם allow-80 עם רשימת ברירת מחדל של בלוקים של כתובות IP שמורשים ליצור חיבורים נכנסים (--source-ranges) שמוגדרים כ-0.0.0.0/0 (בכל מקום).
מריצים את הפקודה gcloud compute firewall-rules create --help כדי לראות את כל ברירות המחדל ואת כל האפשרויות הזמינות, כולל האפשרות להחיל כללי חומת אש שמבוססים על תגים.
5. SSH Into the Instance
כדי להתחבר למופע באמצעות SSH משורת הפקודה (עדיין מ-Cloud Shell) :
$ gcloud compute ssh myinstance Waiting for SSH key to propagate. Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts. ... yourusername@myinstance:~#
זהו! די פשוט, לא? (בסביבת ייצור, חשוב להזין ביטוי סיסמה :)
אפשר גם להתחבר למכונה באמצעות SSH ישירות מהמסוף ( console.cloud.google.com). כדי לעשות זאת, עוברים אל Compute Engine > VM Instances ולוחצים על SSH.

6. התקנת Nginx
מתחברים אל myinstance, המכונה החדשה שנוצרה, ומתקינים את nginx:
$ sudo su - # apt update # apt install -y nginx # service nginx start # exit
בודקים שהשרת פועל באמצעות curl מתוך myinstance:
$ curl -s localhost | grep nginx <title>Welcome to nginx!</title> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and <a href="http://nginx.org/">nginx.org</a>.<br/> <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
כדי למצוא את כתובת ה-IP החיצונית של המופע, מציגים את רשימת המופעים דרך ממשק המשתמש באינטרנט:

חשוב לצאת מ-SSH ולהריץ את הפקודה הזו מ-Cloud Shell:
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
אחר כך עוברים אל http://EXTERNAL_IP/ שבו EXTERNAL_IP היא כתובת ה-IP הציבורית של myinstance, ואז אמור להופיע דף nginx:

7. סקריפט לטעינה בזמן ההפעלה
במקום להגדיר את המכונה בכל פעם, אפשר להשתמש בסקריפט לטעינה בזמן ההפעלה כדי לאתחל את המכונה בזמן ההפעלה.
יוצרים קובץ בשם startup.sh עם התוכן הבא (אפשר להשתמש בעורך הטקסט המועדף: vim, nano או emacs):
#! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
כדי ליצור מכונה וירטואלית חדשה עם הסקריפט הזה לטעינה בזמן ההפעלה, פשוט מקלידים :
$ gcloud compute instances create nginx \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING
עוברים אל http://EXTERNAL_IP/ ואמורים לראות את דף הבית המעודכן. אם הדף לא מוצג מיד, כדאי לנסות שוב אחרי כמה שניות. יכול להיות שהמארח עדיין מפעיל את nginx.
8. יצירת אשכול של שרתים
כדי ליצור אשכול של שרתים, צריך קודם ליצור תבנית של מכונה וירטואלית. אחרי שיוצרים תבנית של הגדרות מכונה, אפשר ליצור קבוצת מופעים כדי לנהל את מספר המופעים שייווצרו.
קודם יוצרים תבנית של הגדרות מכונה באמצעות סקריפט לטעינה בזמן ההפעלה :
$ gcloud compute instance-templates create nginx-template \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00
שנית, ניצור מאגר של יעדים. מאגר היעדים מאפשר לנו ליצור נקודת גישה יחידה לכל המופעים בקבוצה, והוא נחוץ לאיזון עומסים בשלבים הבאים.
$ gcloud compute target-pools create nginx-pool Created [...]. NAME: nginx-pool REGION: us-central1 SESSION_AFFINITY: NONE BACKUP: HEALTH_CHECKS:
לבסוף, יוצרים קבוצת מופעים באמצעות התבנית:
$ gcloud compute instance-groups managed create nginx-group \
--base-instance-name nginx \
--size 2 \
--template nginx-template \
--target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no
ייווצרו שתי מכונות וירטואליות נוספות עם שמות שמתחילים בתחילית nginx-.
עכשיו אמורים לראות את כל המקרים שנוצרו.
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-frpl ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-ztg4 ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
9. יצירת מאזן עומסי רשת
יש כמה סוגים של מאזני עומסים ב-Google Cloud Platform, כולל :
- מאזן עומסי רשת ברמה 3
- מאזן עומסים מסוג HTTP(S) ברמה 7
ניצור מאזן עומסי רשת אזורי שמטרגט את קבוצת המופעים שלנו:
$ gcloud compute forwarding-rules create nginx-lb \
--ports 80 \
--target-pool nginx-pool
Created [...].
$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool
אחר כך אפשר להיכנס למאזן העומסים מהדפדפן http://IP_ADDRESS/, כאשר IP_ADDRESS היא הכתובת שמוצגת כתוצאה מהפעלת הפקודה הקודמת.
בגלל השעה, לא ניצור היום מאזן עומסים מסוג HTTP.
10. ניקוי האשכול
אל תשכחו להשבית את האשכול, אחרת הוא ימשיך לפעול ולצבור עלויות. הפקודות הבאות ימחקו את המופעים של Google Compute Engine, את קבוצת המופעים, את קבוצת הטירגוט ואת מאזן העומסים.
$ gcloud compute forwarding-rules delete nginx-lb $ gcloud compute instance-groups managed delete nginx-group $ gcloud compute target-pools delete nginx-pool $ gcloud compute instance-templates delete nginx-template $ gcloud compute instances delete nginx $ gcloud compute instances delete myinstance $ gcloud compute firewall-rules delete allow-80
כל אחת מהפקודות שלמעלה אמורה לבקש מכם לאשר את מחיקת המשאב.
11. מה השלב הבא?
כל הכבוד, סיימתם את ה-Codelab הזה של Compute Engine!
תכונות נוספות של Compute Engine
ל-Google Compute Engine יש מגוון רחב של תכונות. כדאי לעיין בחלק מהמאמרים הבאים :
- מכונות וירטואליות שניתן להפסיק את הפעולה שלהן – https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- שרתים לדייר יחיד (sole-tenant) – https://cloud.google.com/compute/docs/nodes/create-nodes
- מעבדי GPU ו-TPU – https://cloud.google.com/compute/docs/gpus/add-gpus
- מכונות Windows – https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- מקורות מידע בנושא תיוג – https://cloud.google.com/compute/docs/labeling-resources
- העברת מכונות וירטואליות ל-Compute Engine – https://cloud.google.com/compute/docs/vm-migration/
Google Kubernetes Engine
Google Kubernetes Engine (GKE) הוא שירות Kubernetes מנוהל ומתארח ב-Google Cloud. יש כמה הדרכות של Codelab שיעזרו לכם להתחיל להשתמש ב-GKE. הנה דוגמה טובה להתחלה :
- סדנת קוד של Google Kubernetes Engine – https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
שליחת משוב
- נשמח אם תקדישו כמה רגעים למילוי הסקר הקצר שלנו.