מידע על Codelab זה
1. מבוא
בשיעור ה-Lab הזה נשתמש ב-Gemini, שותף מבוסס-AI ב-Google Cloud, כדי לפתור בעיה בפריסה של הפונקציה של Cloud Functions על ידי ניתוח יומני שגיאות, זיהוי שורש הבעיה ודרכים לפתור אותה.
מה עושים...
- איך משתמשים בטרמינל של Cloud Shell וב-CLI של gcloud כדי להגדיר את הסביבה, כולל הפעלת ממשקי API רלוונטיים של Google ויצירה של פונקציה של Cloud Functions מהקוד שסופק
- תשתמשו בסיכום היומן ב-Cloud Logging כדי ליצור סיכומי יומנים כדי להבין את המידע שתועד.
- מתכתבים בצ'אט עם Gemini כדי לקבל עזרה מ-Gemini בפתרון הבעיה.
מה תלמדו...
- איך להשתמש ב-Gemini עם ניראות (observability) ב-Google Cloud ולפתרון בעיות.
- איך למצוא ולהבין יומני פונקציה של Cloud Functions בעזרת Gemini.
מה צריך...
- דפדפן האינטרנט Chrome
- פרויקט ב-Google Cloud שמופעל בו חיוב
- חשבון Google עם הרשאות גישה לפרויקט שמאפשרות להפעיל ממשקי API ולבצע שינויים במשאבים.
שיעור ה-Lab הזה מכוון למהנדסי DevOps ולמפתחי תוכנה בכל הרמות, כולל למתחילים. נתמקד בהתנסות מעשית עם היכולות של Gemini בפתרון בעיות.
2. הגדרה
בחלק הזה נסביר את כל מה שצריך לעשות כדי להתחיל את שיעור ה-Lab הזה.
הגדרת הסביבה
1. מתחברים אל Cloud Console דרך הכתובת https://console.cloud.google.com.
2. צריך לבחור פרויקט ב-Google Cloud שאיתו רוצים לעבוד בשיעור ה-Lab הזה.
3. פותחים את הדף Cloud Functions ב-Console. אפשר לעשות זאת על ידי בחירה ב-Cloud Functions בתפריט הניווט (סמל הצד הימני העליון TODO בחלון המסוף).
לחלופין, אפשר לחפש 'פונקציות ענן' באזור החיפוש של המסוף:
לוחצים על הלחצן 'יצירת פונקציה' בחלק העליון של רשימת הפונקציות .
אם לא השתמשת בעבר ב-Cloud Functions בפרויקט הזה, כדי לפעול, תתבקשו להפעיל את Google APIs.
כדי להמשיך, צריך ללחוץ על 'הפעלה'.
4. הגדרת מאפיינים בסיסיים של הפונקציה החדשה של Cloud Functions.
- הגדרת השם כ"
codelab-cf
" - בוחרים באפשרות מותר להפעיל הפעלות לא מאומתות.
כדי להשלים את השלב, לוחצים על הלחצן 'הבא' באזור הימני התחתון של החלון:
אחרי שלוחצים על 'הבא', יכול להיות שתתבקשו להפעיל ממשקי Google API נוספים. כמו בשלב 4, לוחצים על 'הפעלה'.
איך מגדירים זמן ריצה וקוד של הפונקציה של Cloud Functions
ה-CodeLab הזה משתמש ב-Python כשפת תכנות. אל תדאגו אם אתם לא מכירים את Python. כדי להשלים את ה-CodeLab הזה לא תצטרכו ידע ב-Python.
5. בחירת Python 3.11 כזמן הריצה של הפונקציה
חשוב לשים לב שהשינוי של סביבת זמן הריצה משנה את קוד המקור שמוצג בעורך המוטבע.
6. כדי לשנות את הדוגמה להתחלה אוטומטית של יצירה אוטומטית, צריך להעתיק את הקוד שבהמשך לעורך המוטבע.
from google.cloud import storage
import json
import re
client = storage.Client()
def get_object_list(request):
if request.args and 'path' in request.args:
path = request.args['path']
else:
return '{}'
parsed = re.search('gs:\/\/([a-zA-Z0-9_-]{3,63})\/([-a-zA-Z0-9_\+.\/]*)', path)
bucket, prefix = parsed.group(1), parsed.group(2)
blobs = client.list_blobs(bucket, prefix=prefix, delimiter='/')
objects = []
if (blobs):
for blob in blobs:
objects.append(blob.name)
return json.dumps(objects)
הקוד הזה קורא את המאפיין path
מבקשת ה-GET, מנתח את הנתיב לאיסוף שם הקטגוריה וקורא ל-Google Cloud Storage API כדי לקבל רשימה של האובייקטים שמאוחסנים בנתיב הזה. הפונקציה (get_object_list
) מקבלת בקשה שהיא אובייקט Flask כארגומנט קלט, ומחזירה את שמות האובייקטים כמערך JSON.
7. בוחרים את הקובץ requirements.txt
מרשימת הקבצים שנותרו בעורך המוטמע. מחליפים את רשימת יחסי התלות הנוכחית ברשימה החדשה על ידי העתקת הקוד שבהמשך לתוך עורך השורה.
google-cloud-storage
8. כדי לפרוס את הפונקציה של Cloud Functions, לוחצים על DEPLOY בפינה הימנית התחתונה.
יכול להיות שתצטרכו להמתין מספר דקות עד שתהליך הפריסה יסתיים. אם פעלת בקפידה לפי הוראות ההגדרה, אתה אמור לראות דיווח על הפריסה כנכשלה.
3. איתור הבעיה ופתרון הבעיה
בקטע הזה תשתמשו בתכונת ההסברים ביומן ובעזרה נוספת של Gemini כדי לזהות את הבעיה ואת הדרך לפתור אותה.
1. הפריסה נכשלה. אמורה להופיע הודעת שגיאה עם מידע נוסף ואפשרות לראות יומני פריסה. לוחצים על 'הצגת יומנים' כדי לצפות ביומני הפריסה.
חשוב לשים לב שיומני הפריסה ייפתחו בכרטיסייה נפרדת באותו דפדפן. תצטרכו לעבור בין הכרטיסיות כדי להשלים את ה-CodeLab הזה.
לתשומת ליבך, ייתכן שלא יופיעו שורות יומן כשתלחצו על 'הצגת יומנים' או יוצגו רק כמה שורות. במקרה כזה, משתמשים בבורר של טווח הזמן בחלונית השאילתה של הכלי לניתוח היומנים ובוחרים באפשרות 30 הדקות האחרונות.
2. בודקים את היומנים בכרטיסייה הפתוחה. חשוב לשים לב שסיכומי יומנים נראים כמו כמה שורות בסטאק ה-callt של החריג. הסיבה לכך היא שהפונקציה של Cloud Functions קולטת טקסט שהודפס ב-stdout
או ב-stderr
וכותבת כל שורה כרשומה נפרדת ביומן. שורות יומן אחרות מסכמות מידע על קוד שגיאת יציאה וכן מידע נוסף שדווח על ידי ממשקי ה-API של Cloud Functions ו-Cloud Run.
אפשר ללחוץ על כל אחת מהשורות כדי להציג מידע נוסף על יומן ספציפי. היומנים המורחבים כוללים רכיבים נוספים בממשק המשתמש שלוחצים עליהם כדי להעתיק את כל המידע על היומן, להרחיב את כל השדות כדי להציג את כל הנתונים של הרשומה ביומן ולהסביר את הרשומה ביומן באמצעות Gemini.
4. ה-calltack החריג לא מאוד אינפורמטיבי. בודקים את היומנים כדי לראות את סוף יומן מעקב הקריסות של החריגה. השורה היא "Container called exit(1)
". בסיכום היומן הבא כתוב:
functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...
נראה שמדובר במועמד טוב לחקירה. לוחצים על השורה הזו כדי להרחיב את הרשומה ביומן. לאחר מכן לוחצים על הסבר על הרשומה הזו ביומן. לחצן להצגת מידע נוסף על היומן שנבחר.
אם לא נעשה שימוש ב-Gemini בעבר בפרויקט הזה, תוצג בקשה להפעיל API נדרש. אם מתבקשים להפעיל את ה-API, לוחצים על ENABLE כדי להמשיך.
לתשומת ליבכם: מדי פעם יכולה להופיע הודעת שגיאה כשמזינים הנחיה ל-Gemini. במקרה כזה, צריך לחזור על הפעולה של ההנחיה עוד פעם אחת כדי לקבל את התשובה. לדוגמה, לוחצים על 'הסבר על הרשומה הזו ביומן'. שוב.
5. ההסבר סופק על ידי Gemini. אם ההסבר לא מספיק או לא ברור, אפשר לבקש מ-Gemini לספק מידע נוסף על ידי שימוש באחת מההנחיות הבאות או בכתיבת שאלה משלכם.
אפשר לקבל מידע נוסף על היומן הזה?
אפשר לקבל מידע נוסף על השגיאה?
6. לאחר מכן, מבקשים מ-Gemini הצעות לפתרון הבעיה. למשל, אפשר לשאול את Gemini
איך לפתור את הבעיה?
הצע פתרון לפתרון השגיאה הזו
הצע פתרון לשגיאה הזו
התשובות של Gemini עשויות להשתנות בהתאם להקשר הנוכחי וגם לניסוח ולפורמט של ההנחיה. כדי ש-Gemini ימליץ, סביר להניח שלקוד המקור של הפונקציה של Cloud Functions יש פונקציה בשם hello_http
.
7. הכרטיסייה שמציגה את יומני Cloud Functions. בוחרים את הכרטיסייה הקודמת שמציגה את דף הפריסה של הפונקציה של Cloud Functions עם השגיאה, ולוחצים על EDIT (עריכה).
8. מוודאים שהאימות עדיין מוגדר לאפשרות הרשאה להפעלות לא מאומתות ומעדכנים את הבחירה במקרה הצורך.
9. כדי לראות את העורך המוטבע, לוחצים על 'הבא' בתחתית המסך. פועלים לפי ההמלצה ל-Gemini ומשנים את שם הפונקציה מ-get_order_list
ל-hello_http
.
כשמסיימים את העריכה, לוחצים על DEPLOY.
יכול להיות שתצטרכו להמתין מספר דקות עד שתהליך הפריסה יסתיים. מוודאים שהפריסה הושלמה בהצלחה ולא מופיעות הודעות שגיאה.
חשוב לשים לב: יכול להיות שבמסוף תוצג הודעת השגיאה האחרונה עד שתהליך הפריסה יושלם.
10. כדי לבדוק שהפונקציה של Cloud Functions פעילה, שולחים את בקשת ה-HTTPS הבאה באמצעות curl
. אפשר להשתמש ב-Cloud Shell או לעשות זאת מכל טרמינל שבו מותקן ה-CLI של curl
ו-gcloud
.מריצים את הפקודה הבאה מהטרמינל של Cloud Shell.
curl -m 70 -X GET \
https://us-central1-${GOOGLE_CLOUD_PROJECT}.cloudfunctions.net/\
codelab-cf?path=gs://cloud-samples-data/generative-ai/image/ \
-H "Authorization: bearer $(gcloud auth print-identity-token)"
שימו לב שכדי להריץ את הפקודה הזו מטרמינל צריך לבצע אימות באמצעות ה-CLI של gcloud ולהגדיר את הערך של מזהה הפרויקט למשתנה הסביבה GOOGLE_CLOUD_PROJECT
.
בונוס
שם הפונקציה hello_http
הוגדר כנקודת כניסה כברירת מחדל לפונקציה של Cloud Functions שהופעלה על ידי HTTP בזמן בחירת סביבת זמן הריצה של Python. פתרון חלופי יכול להיות להשאיר את get_order_list
כשם הפונקציה בקוד המקור, ולעדכן את שדה נקודת הכניסה של הפונקציה של Cloud Functions שנמצא מעל עורך מוטבע, מימין מהשדה 'זמן ריצה':
שינוי נקודת הכניסה מ-hello_http
ל-get_order_list
יפתור את הבעיה בפריסה.
4. הסרת המשאבים
כדי להסיר את המשאבים, אפשר להשבית את הפרויקט או למחוק את המכונה של הפונקציה של Cloud Functions. אפשר למחוק את Cloud Functions באמצעות המסוף או באמצעות הפקודה CLI, כמו בדוגמה הבאה:
gcloud functions delete codelab-cf --region=us-central1
5. מעולה!
חדשות טובות – השתמשת ב-Gemini כדי לפתור את הבעיה באפליקציה ולפתור אותה. עכשיו יש לך אפשרות להבין איך הוא יכול לעזור לך להבין את היומנים ולקבל תשובות לשאלות לגבי Google Cloud.