
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
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
בשיעור Lab זה תשתמשו ב-Cloud Functions וב-Cloud Scheduler כדי לזהות ולנקות את משאבי הענן שלא נוצלו. הפעם תגדירו פונקציה ב-Cloud Functions לזיהוי ולניקוי של דיסקים שלא משויכים לאף מכונה וירטואלית ושאינם מצורפים.
בתרשים הבא מפורטת הארכיטקטורה שבה תשתמשו בחלק הראשון של שיעור ה-Lab, כשתגדירו פונקציה ב-Cloud Functions כדי לזהות ולנקות דיסק אחסון מתמיד (persistent disk) שלא משויך לאף מכונה וירטואלית או שאינו בשימוש.
בסעיף הזה תגדירו את התשתית ואת הזהויות הנדרשות להשלמת שיעור ה-Lab.
עליכם לקרוא את ההוראות האלו. המעבדות מוגבלות בזמן ואי אפשר להשהות אותן. הטיימר מתחיל כשלוחצים על Start Lab ומראה את משך הזמן שבו תוכלו להשתמש במשאבים ב-Google Cloud.
במעבדה המעשית הזו של Qwiklabs, תוכלו לבצע את פעילויות המעבדה בעצמכם בסביבת ענן אמיתית, ולא בהדמיה או בסביבה להדגמה. לשם כך, יינתנו לכם פרטי כניסה זמניים שאיתם תיכנסו ותיגשו אל Google Cloud במשך הפעילות של המעבדה.
כדי להשלים את המעבדה, תצטרכו:
הערה: אם כבר יש לכם פרויקט או חשבון Google Cloud אישי משלכם, אין להשתמש בו במעבדה הזו.
הערה: אם משתמשים במכשיר עם Chrome OS, צריך לפתוח חלון אנונימי כדי להריץ את המעבדה הזו.
לוחצים על הלחצן Start Lab (התחלת השיעור המעשי). אם זה שיעור בתשלום, יקפוץ חלון שבו בוחרים אמצעי תשלום. מימין יש חלונית עם פרטי כניסה זמניים שמולאו מראש. צריך להשתמש בפרטים האלו בשיעור המעשי הזה.
מעתיקים את שם המשתמש ואז לוחצים על Open Google Console (פתיחת Google Console). יופעלו משאבים במעבדה, ואז ייפתח הדף Sign in (כניסה) בכרטיסייה נפרדת.
טיפ: כדאי לפתוח את הכרטיסיות בחלונות נפרדים, אחד לצד השני.
בדף Sign in (כניסה), מדביקים את שם המשתמש שהעתקתם מהחלונית Connection Details (פרטי התחברות). אחר כך מעתיקים ומדביקים את הסיסמה.
חשוב: צריך להשתמש בפרטי הכניסה מהחלונית Connection Details. אין להשתמש בפרטי הכניסה של Qwiklabs. אם יש לכם חשבון Google Cloud משלכם, אל תשתמשו בו בשיעור המעשי הזה (כך תימנעו מחיוב בתשלום).
לוחצים כדי לעבור את הדפים הבאים:
לאחר כמה דקות, Cloud Console ייפתח בכרטיסייה הזו.
סביבת 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
ב-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)
ב-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), יופיע ציון בדיקה.
ב-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 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 Shell, פורסים את הפונקציה ב-Cloud Function:
gcloud functions deploy delete_unattached_pds --trigger-http --runtime=python37
לוכדים את כתובת האתר המשמשת כטריגר של הפונקציה ב-Cloud Functions כמשתנה סביבה:
export FUNCTION_URL=$(gcloud functions describe delete_unattached_pds --format=json | jq -r '.httpsTrigger.url')
לוחצים על Check my progress כדי לאמת שהשלמתם את המשימה. אם פרסתם בהצלחה את הפונקציה ב-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 זה השלמתם את המשימות הבאות:
שיעור Lab זה בלימוד עצמי הוא חלק מיחידת ה-Quest שנקראת האופטימיזציה של העלויות ב-Google Cloud ב-Qwiklabs. יחידת Quest היא סדרה של שיעורי Lab מעשיים קשורים שיוצרים מסלול לימוד. השלמת היחידה הזו מזכה אתכם בתג שמופיע למעלה, לציון ההישג שלכם. אתם יכולים להציג את התג או התגים באופן גלוי לכול ולקשר אותם לקורות החיים שלכם באינטרנט או לחשבון במדיה חברתית. רוצים לקבל קרדיט מיידי על השלמת שיעור ה-Lab הזה? הירשמו ליחידת ה-Quest הזו.
לצפייה במשימות Qwiklabs נוספות.
המשיכו את יחידת ה-Quest עם שכבות רשת – אופטימיזציה של הוצאות ברשת או בדקו את ההצעות הבאות:
יעזרו לכם להפיק את המרב מהאמצעים הטכנולוגיים של Google Cloud. השיעורים שלנו מכילים מיומנויות טכניות ושיטות מומלצות כדי שתוכלו להתחיל לעבוד מהר ולהמשיך ללמוד ולהתפתח. נציג את העקרונות הבסיסיים להכשרה ברמה מתקדמת, עם אפשרויות וירטואליות, שידורים חיים או על פי דרישה, בהתאם ללוח הזמנים העמוס שלכם. בעזרת ההסמכות תוכלו לאשר ולאמת את המיומנות והמומחיות שלכם באמצעים הטכנולוגיים של Google Cloud.
זכויות יוצרים 2025 Google LLC. כל הזכויות שמורות. Google והלוגו של Google הם סימנים מסחריים רשומים של Google LLC. שמות של חברות ומוצרים אחרים עשויים להיות סימנים מסחריים של החברות, בהתאמה, שאליהן הם משויכים.
This content is not currently available
We will notify you via email when it becomes available
Great!
We will contact you via email if it becomes available
One lab at a time
Confirm to end all existing labs and start this one