Checkpoints
Create Persistent Disk
/ 10
Create a VM instance with Persistent Disk
/ 10
Detach the orphaned disk from the VM
/ 10
Deploy the Cloud Function
/ 20
Create a Cloud Scheduler task to run the Cloud Function
/ 20
Test the job by manually triggering it
/ 30
ניקוי דיסקים שלא משויכים לאף מכונה וירטואלית או שלא נמצאים בשימוש
GSP648
סקירה כללית
בשיעור Lab זה תשתמשו ב-Cloud Functions וב-Cloud Scheduler כדי לזהות ולנקות את משאבי הענן שלא נוצלו. הפעם תגדירו פונקציה ב-Cloud Functions לזיהוי ולניקוי של דיסקים שלא משויכים לאף מכונה וירטואלית ושאינם מצורפים.
הפעולות שתבצעו:
- יצירת שני דיסקים לאחסון מתמיד (persistent disk).
- יצירת מכונה וירטואלית (VM) שמשתמשת באחד מהדיסקים לאחסון.
- ניתוק הדיסק מה-VM.
- בדיקת קוד הפונקציה ב-Cloud Functions.
- פריסת הפונקציה ב-Cloud Functions.
- בדיקת הפונקציה ב-Cloud Functions על ידי שימוש במשימות של Cloud Scheduler.
ארכיטקטורה
בתרשים הבא מפורטת הארכיטקטורה שבה תשתמשו בחלק הראשון של שיעור ה-Lab, כשתגדירו פונקציה ב-Cloud Functions כדי לזהות ולנקות דיסק אחסון מתמיד (persistent disk) שלא משויך לאף מכונה וירטואלית או שאינו בשימוש.
הגדרה ודרישות
בסעיף הזה תגדירו את התשתית ואת הזהויות הנדרשות להשלמת שיעור ה-Lab.
לפני שלוחצים על הלחצן Start Lab (התחלת המעבדה)
עליכם לקרוא את ההוראות האלו. המעבדות מוגבלות בזמן ואי אפשר להשהות אותן. הטיימר מתחיל כשלוחצים על Start Lab ומראה את משך הזמן שבו תוכלו להשתמש במשאבים ב-Google Cloud.
במעבדה המעשית הזו של Qwiklabs, תוכלו לבצע את פעילויות המעבדה בעצמכם בסביבת ענן אמיתית, ולא בהדמיה או בסביבה להדגמה. לשם כך, יינתנו לכם פרטי כניסה זמניים שאיתם תיכנסו ותיגשו אל Google Cloud במשך הפעילות של המעבדה.
מה צריך?
כדי להשלים את המעבדה, תצטרכו:
- גישה לדפדפן אינטרנט סטנדרטי (מומלץ להשתמש בדפדפן Chrome).
- זמן להשלמת המעבדה.
הערה: אם כבר יש לכם פרויקט או חשבון Google Cloud אישי משלכם, אין להשתמש בו במעבדה הזו.
הערה: אם משתמשים במכשיר עם Chrome OS, צריך לפתוח חלון אנונימי כדי להריץ את המעבדה הזו.
איך מתחילים שיעור מעשי ונכנסים אל Google Cloud Console
-
לוחצים על הלחצן Start Lab (התחלת השיעור המעשי). אם זה שיעור בתשלום, יקפוץ חלון שבו בוחרים אמצעי תשלום. מימין יש חלונית עם פרטי כניסה זמניים שמולאו מראש. צריך להשתמש בפרטים האלו בשיעור המעשי הזה.
-
מעתיקים את שם המשתמש ואז לוחצים על Open Google Console (פתיחת Google Console). יופעלו משאבים במעבדה, ואז ייפתח הדף Sign in (כניסה) בכרטיסייה נפרדת.
טיפ: כדאי לפתוח את הכרטיסיות בחלונות נפרדים, אחד לצד השני.
-
בדף Sign in (כניסה), מדביקים את שם המשתמש שהעתקתם מהחלונית Connection Details (פרטי התחברות). אחר כך מעתיקים ומדביקים את הסיסמה.
חשוב: צריך להשתמש בפרטי הכניסה מהחלונית Connection Details. אין להשתמש בפרטי הכניסה של Qwiklabs. אם יש לכם חשבון Google Cloud משלכם, אל תשתמשו בו בשיעור המעשי הזה (כך תימנעו מחיוב בתשלום).
-
לוחצים כדי לעבור את הדפים הבאים:
- הסכמה לתנאים ולהגבלות.
- אין להוסיף אפשרויות שחזור או אימות דו-שלבי (כי החשבון הזה זמני).
- אין להירשם לתקופות ניסיון בחינם.
לאחר כמה דקות, Cloud Console ייפתח בכרטיסייה הזו.
הפעלת Cloud Shell
סביבת Cloud Shell היא מכונה וירטואלית שמותקנים בה כלים למפתחים. יש בה ספריית בית בנפח עקבי של 5GB והיא פועלת ב-Google Cloud. ב-Cloud Shell יש גישה לשורת הפקודה למשאבים שלכם ב-Google Cloud.
ב-Cloud Console, בסרגל הכלים שבפינה הימנית העליונה, לוחצים על הלחצן Activate Cloud Shell (הפעלת Cloud Shell).
לוחצים על Continue (המשך).
יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. עם החיבור יתבצע גם אימות, ואז הפרויקט יוגדר לפי PROJECT_ID. לדוגמה:
gcloud
הוא כלי שורת הפקודה של Google Cloud. הוא מותקן מראש ב-Cloud Shell ותומך בהשלמת פקודות.
תוכלו לרשום את שם החשבון הפעיל באמצעות הפקודה הבאה:
gcloud auth list
(פלט)
Credentialed accounts:
- <myaccount>@<mydomain>.com (active)
(פלט לדוגמה)
Credentialed accounts:
- google1623327_student@qwiklabs.net
תוכלו לרשום את מזהה הפרויקט באמצעות הפקודה הבאה:
gcloud config list project
(פלט)
[core]
project = <project_ID>
(פלט לדוגמה)
[core]
project = qwiklabs-gcp-44776a13dea667a6
הפעלת ממשקי API ומאגר שכפולים
-
ב-Cloud Shell, מפעילים את Cloud Scheduler API:
gcloud services enable cloudscheduler.googleapis.com
-
משכפלים את המאגר:
git clone https://github.com/GoogleCloudPlatform/gcf-automated-resource-cleanup.git && cd gcf-automated-resource-cleanup/
-
מגדירים משתני סביבה והופכים את תיקיית המאגר ל-$WORKDIR, שם תריצו את כל הפקודות הקשורות לשיעור ה-Lab הזה:
export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null) WORKDIR=$(pwd)
יצירת דיסק אחסון מתמיד (persistent disk)
-
ב-Cloud Shell, עוברים אל ספריית ה-PD שלא צורפה:
cd $WORKDIR/unattached-pd
-
מייצאים את שמות הדיסקים בתור משתנים:
export ORPHANED_DISK=orphaned-disk export UNUSED_DISK=unused-disk
-
יוצרים שני דיסקים לאחסון:
gcloud compute disks create $ORPHANED_DISK --project=$PROJECT_ID --type=pd-standard --size=500GB --zone=us-central1-a gcloud compute disks create $UNUSED_DISK --project=$PROJECT_ID --type=pd-standard --size=500GB --zone=us-central1-a
בשיעור Lab זה נעשה שימוש באזור us-central1, אבל תוכלו לבחור אזור אחר ולהתייחס אליו בעקביות עד סוף השיעור.
-
מאשרים שנוצרו שני דיסקים לאחסון:
gcloud compute disks list
הפלט שלכם אמור להיראות כך:
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS orphaned-disk us-central1-a zone 500 pd-standard READY unused-disk us-central1-a zone 500 pd-standard READY
בדיקה שהמשימה הושלמה
לוחצים על Check my progress כדי לאמת שהשלמתם את המשימה. אם יצרתם בהצלחה דיסק אחסון מתמיד (persistent disk), יופיע ציון בדיקה.
יצירת VM ובדיקת דיסק האחסון
-
ב-Cloud Shell, יוצרים מכונה:
gcloud compute instances create disk-instance \ --zone=us-central1-a \ --machine-type=n1-standard-1 \ --disk=name=$ORPHANED_DISK,device-name=$ORPHANED_DISK,mode=rw,boot=no
-
בודקים את דיסק האחסון שצורף ל-VM:
gcloud compute disks describe $ORPHANED_DISK --zone=us-central1-a --format=json | jq
הפלט אמור להיראות כך:
{ "creationTimestamp": "2019-06-12T12:21:25.546-07:00", "id": "7617542552306904666", "kind": "compute#disk", "labelFingerprint": "42WmSpB8rSM=", "lastAttachTimestamp": "2019-06-12T12:24:53.989-07:00", "name": "orphaned-disk", "physicalBlockSizeBytes": "4096", "selfLink": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a/disks/orphaned-disk", "sizeGb": "500", "status": "READY", "type": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a/diskTypes/pd-standard", "users": [ "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a/instances/disk-instance" ], "zone": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a" }
בדוגמת הקוד שצוינה למעלה, אלו הפרטים החשובים:
-
users
מזהה את מכונת ה-VM שהדיסק מצורף אליה. -
lastAttachTimestamp
מזהה מתי הדיסק צורף ל-VM בפעם האחרונה.
-
בדיקה שהמשימה הושלמה
לוחצים על Check my progress כדי לאמת שהשלמתם את המשימה. אם יצרתם בהצלחה מכונת VM בעזרת דיסק אחסון מתמיד (persistent disk), יופיע ציון בדיקה.
-
מנתקים את דיסק האחסון שלא משויך לאף מכונה וירטואלית מה-VM:
gcloud compute instances detach-disk disk-instance --device-name=$ORPHANED_DISK --zone=us-central1-a
-
בודקים את האחסון שלא משויך לאף מכונה וירטואלית:
gcloud compute disks describe $ORPHANED_DISK --zone=us-central1-a --format=json | jq
הפלט אמור להיראות כך:
{ "creationTimestamp": "2019-06-12T12:21:25.546-07:00", "id": "7617542552306904666", "kind": "compute#disk", "labelFingerprint": "42WmSpB8rSM=", "lastAttachTimestamp": "2019-06-12T12:24:53.989-07:00", "lastDetachTimestamp": "2019-06-12T12:34:56.040-07:00", "name": "orphaned-disk", "physicalBlockSizeBytes": "4096", "selfLink": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a/disks/orphaned-disk", "sizeGb": "500", "status": "READY", "type": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a/diskTypes/pd-standard", "zone": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a" }
בדוגמת הקוד שצוינה למעלה, אלו הפרטים החשובים:
- בדיסק אין רישום של
users
, דבר שמצביע על כך שהוא אינו בשימוש כרגע. - קייימת רשומה מסוג
lastDetachTimestamp
שמציינת מתי הדיסק צורף ל-VM בפעם האחרונה, ולמעשה, מתי הייתה הפעם האחרונה שנעשה בו שימוש. - השדה
lastAttachTimestamp
עדיין מוצג.
- בדיסק אין רישום של
בדיקה שהמשימה הושלמה
לוחצים על Check my progress כדי לאמת שהשלמתם את המשימה. אם ניתקתם בהצלחה את הדיסק שלא משויך לאף מכונה וירטואלית מה-VM, יופיע ציון בדיקה.
בדיקת קוד הפונקציה ב-Cloud Functions
-
ב-Cloud Shell, יוצרים פלט של הקטע בקוד שמאחזר את כל הדיסקים של האחסון המתמיד (persistent disk) בפרויקט:
cat $WORKDIR/unattached-pd/main.py | grep "(request)" -A 12
הפלט שלכם אמור להיראות כך:
def delete_unattached_pds(request): # get list of disks and iterate through it: disksRequest = compute.disks().aggregatedList(project=project) while disksRequest is not None: diskResponse = disksRequest.execute() for name, disks_scoped_list in diskResponse['items'].items(): if disks_scoped_list.get('warning') is None: # got disks for disk in disks_scoped_list['disks']: # iterate through disks diskName = disk['name'] diskZone = str((disk['zone'])).rsplit('/',1)[1] print (diskName) print (diskZone)
הפונקציה משתמשת בשיטת
aggregatedList
כדי לכלול את כל הדיסקים של האחסון המתמיד (persistent disk) בפרויקט Google Cloud שבו הם פועלים, ומבצעת איטרציה באמצעות כל אחד מהדיסקים. -
יוצרים פלט של הקטע בקוד שבודק את השדה
lastAttachTimestamp
ומוחק את הדיסק אם הוא לא קיים:cat $WORKDIR/unattached-pd/main.py | grep "handle never" -A 11
הפלט שלכם אמור להיראות כך:
# handle never attached disk - delete it # lastAttachedTimestamp is not present if disk.get("lastAttachTimestamp") is None: print ("disk " + diskName + " was never attached - deleting") deleteRequest = compute.disks().delete(project=project, zone=diskZone, disk=diskName) deleteResponse = deleteRequest.execute() waitForZoneOperation(deleteResponse, project, diskZone) print ("disk " + diskName + " was deleted") Continue
קטע זה מוחק את הדיסק אם
lastAttachTimestamp
לא מוצג — כלומר, הדיסק לא היה אף פעם בשימוש. -
יוצרים פלט של הקטע בקוד שמחשב את גיל הדיסק אם הוא ללא משויך לאף מכונה וירטואלית, יוצר ממנו קובץ snapshot ומוחק אותו:
cat $WORKDIR/unattached-pd/main.py | grep "handle detached" -A 32
הפלט שלכם אמור להיראות כך:
# handle detached disk - snapshot and delete # lastAttachTimestamp is present AND users is not present AND it meets the age criterium if disk.get("users") is None \ and disk.get("lastDetachTimestamp") is not None \ and diskAge(disk['lastDetachTimestamp'])>=deleteAge: print ("disk " + diskName + " has no users and has been detached") print ("disk meets age criteria for deletion") # take a snapshot snapShotName = diskName + str(int(time.time())) print ("taking snapshot: " + snapShotName) snapshotBody = { "name": snapShotName } snapshotRequest = compute.disks().createSnapshot(project=project, zone=diskZone, disk=diskName, body=snapshotBody) snapshotResponse = snapshotRequest.execute() waitForZoneOperation(snapshotResponse, project, diskZone) print ("snapshot completed") # delete the disk print ("deleting disk " + diskName) deleteRequest = compute.disks().delete(project=project, zone=diskZone, disk=diskName) deleteResponse = deleteRequest.execute() waitForZoneOperation(deleteResponse, project, diskZone) print ("disk " + diskName + " was deleted") continue
הקטע הזה של הקוד נמצא בשימוש כאשר לא רשומים משתמשים בדיסק ומופיע הקוד
lastDetachTimestamp
. המשמעות היא שהדיסק לא נמצא כרגע בשימוש, אך נעשה בו שימוש בשלב מסוים. במקרה כזה, הפונקציה ב-Cloud Functions יוצרת קובץ snapshot מהדיסק כדי לשמור נתונים ולאחר מכן מוחקת את הדיסק. -
ב-Cloud Shell, לוחצים על האפשרות Open Editor כדי לפתוח את העורך של Cloud Shell ולערוך את הקובץ
main.py
.
-
ניווט אל
gcf-automated-resource-cleanup\unattached-pd
: -
פותחים את הקובץ
main.py
: -
עורכים את שורה 15 בקובץ ומחליפים את
automating-cost-optimization
במזהה הפרויקט ב-Qwiklabs (הוא אמור להיות דומה למזהה הבא):project = 'qwiklabs-gcp-b5dbc291a25a68db'
-
שומרים את הקובץ על ידי לחיצה על קובץ > שמירה.
פריסת פונקציה ב-Cloud Functions
-
ב-Cloud Shell, פורסים את הפונקציה ב-Cloud Function:
gcloud functions deploy delete_unattached_pds --trigger-http --runtime=python37
אם מופיעה הודעת שגיאה, ממתינים רגע ומזינים מחדש את הפקודה. פריסת פונקציה ב-Cloud Functions עשויה לארוך בין 2 ל-5 דקות, תלוי באזור. -
לוכדים את כתובת האתר המשמשת כטריגר של הפונקציה ב-Cloud Functions כמשתנה סביבה:
export FUNCTION_URL=$(gcloud functions describe delete_unattached_pds --format=json | jq -r '.httpsTrigger.url')
בדיקה שהמשימה הושלמה
לוחצים על Check my progress כדי לאמת שהשלמתם את המשימה. אם פרסתם בהצלחה את הפונקציה ב-Cloud Functions, יופיע ציון בדיקה.
הגדרה ובדיקה של הפונקציה ב-Cloud Functions
-
ב-Cloud Shell, יוצרים משימה של Cloud Scheduler להרצת הפונקציה ב-Cloud Functions בשעה 02:00 מדי לילה:
gcloud scheduler jobs create http unattached-pd-job \ --schedule="* 2 * * *" \ --uri=$FUNCTION_URL
כאשר תופיע הודעה מתאימה, עליכם להזין את האות Y כדי ליצור אפליקציית App Engine בפרויקט. מזינים את הערך המספרי עבור האזור שבו תרצו לפרוס את אפליקציית App Engine, ולוחצים על Enter.
בדיקה שהמשימה הושלמה
לוחצים על Check my progress כדי לאמת שהשלמתם את המשימה. אם יצרתם בהצלחה משימת Cloud Scheduler להרצת פונקציה ב-Cloud Functions, יופיע ציון בדיקה.
-
בודקים את המשימה על ידי הפעלת הטריגר באופן ידני:
gcloud scheduler jobs run unattached-pd-job
-
מאשרים את יצירת קובץ ה-snapshot של הדיסק שלא משויך לאף מכונה וירטואלית:
gcloud compute snapshots list
הפלט אמור להיראות כך:
NAME DISK_SIZE_GB SRC_DISK STATUS orphaned-disk1560455894 500 us-central1-a/disks/orphaned-disk READY
-
מאשרים את המחיקה של הדיסק שלא משויך לאף מכונה וירטואלית ושלא נעשה בו שימוש:
gcloud compute disks list
הפלט אמור להיראות כך:
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS disk-instance us-central1-a zone 10 pd-standard READY
בדיקה שהמשימה הושלמה
לוחצים על Check my progress כדי לאמת שהשלמתם את המשימה. אם בדקתם בהצלחה את המשימה על ידי הפעלת הטריגר באופן ידני, יופיע ציון בדיקה.
כל הכבוד!
בשיעור Lab זה השלמתם את המשימות הבאות:
- יצרתם שני דיסקים לאחסון מתמיד (persistent disk).
- יצרתם VM שמשתמש באחד מהדיסקים.
- ניתקתם את הדיסק מה-VM.
- בדקתם את הקוד של הפונקציה ב-Cloud Functions.
- פרסתם את הפונקציה ב-Cloud Functions.
- בדקתם את הפונקציה ב-Cloud Functions על ידי שימוש במשימות Cloud Scheduler.
סיום המשימה
שיעור Lab זה בלימוד עצמי הוא חלק מיחידת ה-Quest שנקראת האופטימיזציה של העלויות ב-Google Cloud ב-Qwiklabs. יחידת Quest היא סדרה של שיעורי Lab מעשיים קשורים שיוצרים מסלול לימוד. השלמת היחידה הזו מזכה אתכם בתג שמופיע למעלה, לציון ההישג שלכם. אתם יכולים להציג את התג או התגים באופן גלוי לכול ולקשר אותם לקורות החיים שלכם באינטרנט או לחשבון במדיה חברתית. רוצים לקבל קרדיט מיידי על השלמת שיעור ה-Lab הזה? הירשמו ליחידת ה-Quest הזו.
לצפייה במשימות Qwiklabs נוספות.
מעבר לשיעור ה-Lab הבא
המשיכו את יחידת ה-Quest עם שכבות רשת – אופטימיזציה של הוצאות ברשת או בדקו את ההצעות הבאות:
הדרכה והסמכה של Google Cloud
יעזרו לכם להפיק את המרב מהאמצעים הטכנולוגיים של Google Cloud. השיעורים שלנו מכילים מיומנויות טכניות ושיטות מומלצות כדי שתוכלו להתחיל לעבוד מהר ולהמשיך ללמוד ולהתפתח. נציג את העקרונות הבסיסיים להכשרה ברמה מתקדמת, עם אפשרויות וירטואליות, שידורים חיים או על פי דרישה, בהתאם ללוח הזמנים העמוס שלכם. בעזרת ההסמכות תוכלו לאשר ולאמת את המיומנות והמומחיות שלכם באמצעים הטכנולוגיים של Google Cloud.
עדכון אחרון של המדריך: 26 בינואר 2021.
בדיקה אחרונה של שיעור ה-Lab: ב-2 ביוני 2020.
זכויות יוצרים 2024 Google LLC. כל הזכויות שמורות. Google והלוגו של Google הם סימנים מסחריים רשומים של Google LLC. שמות של חברות ומוצרים אחרים עשויים להיות סימנים מסחריים של החברות, בהתאמה, שאליהן הם משויכים.