מעבר משירותים מדור קודם בחבילה

רוב הפונקציונליות שסופקה על ידי חבילת השירותים מדור קודם מסופקת עכשיו על ידי ספריות הלקוח של Cloud. מידע נוסף זמין בחלופות המומלצות שרשומות בהמשך.

אם אין אפשרות להעביר את הפרויקט לפתרון לא משולב, יכול להיות שתוכלו להמשיך להשתמש בשירותים משולבים מדור קודם באפליקציותPython 3 כפתרון חלופי.הגישה הזו מאפשרת לכם גמישות לעבור לשירותים לא מקובצים בהמשך מחזור המיגרציה.

אחרי שתעברו משירותים בחבילה מדור קודם, תוכלו להמשיך להשתמש ב-App Engine או לעבור ל-Cloud Run. ‫Cloud Run נועד לשפר את חוויית השימוש ב-App Engine, ומשלב הרבה מהתכונות הטובות ביותר של הסביבה הרגילה ושל הסביבה הגמישה. כדי להשוות בין התכונות ולהבין איך להעביר נתונים, אפשר לעיין במדריך להשוואה בין App Engine לבין Cloud Run.

‫Google Cloud מספקת מוצרים עצמאיים עם פונקציונליות דומה לזו של חלק מהשירותים בחבילה בסביבת זמן הריצה של Python 2. לגבי חבילות השירותים שלא זמינות כמוצרים נפרדים ב- Google Cloud, כמו עיבוד תמונות, חיפוש והודעות, במדריך הזה מומלץ להשתמש בספקי צד שלישי או בפתרונות עקיפים אחרים.

בדף הזה מוסבר על נתיב ההעברה לכל שירות בחבילה.

הסבר על ההרשאות ב- Google Cloud

מאחר שהאפליקציה שהועברה ושירותי Google Cloud שהיא משתמשת בהם לא פועלים יותר באותה סביבת ארגז חול, האפליקציה צריכה הרשאה כדי לגשת לכל שירות. לדוגמה, כדי ליצור אינטראקציה עם Firestore במצב Datastore ‏ (Datastore) או עם Cloud Tasks, האפליקציה צריכה לספק את פרטי הכניסה של חשבון שיש לו הרשאה לגשת לשירותים האלה.

כברירת מחדל, אפליקציות בסביבת זמן הריצה הסטנדרטית של App Engine מספקות את פרטי הכניסה של חשבון השירות שמוגדר כברירת מחדל ב-App Engine, שיש לו הרשאה לגשת למסדי נתונים באותו פרויקט שבו נמצאת האפליקציה.

אם אחד מהתנאים הבאים מתקיים, צריך להשתמש בטכניקת אימות חלופית שכוללת פרטי כניסה באופן מפורש:

  • האפליקציה ומסד הנתונים של Memorystore נמצאים בGoogle Cloud פרויקטים שונים.

  • שיניתם את התפקידים שהוקצו לחשבון השירות שמוגדר כברירת מחדל ב-App Engine.

מידע על שיטות אימות חלופיות זמין במאמר הגדרת אימות לאפליקציות ייצור מסוג Server to Server.

אימות לפיתוח מקומי

כדי לפתח או לבדוק את האפליקציה באופן מקומי, מומלץ ליצור חשבון שירות ולהשתמש בו. אל תשתמשו בחשבון השירות שמוגדר כברירת מחדל ב-App Engine, כי יש לו רמת הרשאות גבוהה לכל מה שבפרויקט. במקום זאת, כדאי ליצור חשבון שירות עם הרשאות ברמה הנמוכה ביותר שנדרשת למשימת הפיתוח והבדיקה הספציפית שלכם, ולהשתמש בו.

הוראות להגדרת חשבון שירות וחיבורו לאפליקציה זמינות במאמר קבלת פרטי כניסה לחשבון שירות וצירופם באופן ידני.

התקנת ספריות לקוח

הדרך הכי קלה להשתמש בשירותים של Google Cloud אפליקציית Python היא להתקין את ספריית הלקוח של Python של השירות.שירותי Google Cloud מספקים גם ממשקי JSON REST ואחרים. השלבים להתקנת ספריות הלקוח בזמן הריצה של App Engine שונים באפליקציות Python 2 ובאפליקציות Python 3.

התקנת ספריות לאפליקציות Python 2

כדי להתקין ספרייה לשימוש באפליקציה כשהיא פועלת בסביבת זמן הריצה של Python 2:

  1. יוצרים ספרייה לאחסון ספריות של צד שלישי, כמו lib/.

  2. יוצרים קובץ requirements.txt באותה תיקייה שבה נמצא קובץ app.yaml ומוסיפים את השם של ספריית לקוח.

    לדוגמה, אפשר להשתמש בקובץ הבא כדי להתקין ספריות ל-Pub/Sub ול-Cloud Tasks:

    google-cloud-pubsub
    google-cloud-tasks
    
  3. משתמשים ב-pip install כדי להתקין את הספריות בתיקייה שיצרתם. לדוגמה:

    pip install -t lib -r requirements.txt
  4. בקובץ app.yaml של האפליקציה, מציינים את ספריות ה-RPC ו-setuptools הנדרשות של Google, ואת ספריית ה-SSL האופציונלית בקטע libraries:

    libraries:
    - name: grpcio
      version: 1.0.0
    - name: setuptools
      version: 36.6.0
    - name: ssl
      version: latest
    

    חלק מספריות הלקוח לא צריכות את ספריית ה-SSL. אם לא כוללים את ספריית ה-SSL בספריית לקוח שזקוקה לה, תופיע שגיאת SSL ב-Logs Explorer כשהאפליקציה תקבל בקשה.

  5. אם אין לכם קובץ appengine_config.py, אתם צריכים ליצור אותו באותה תיקייה שבה נמצא קובץ app.yaml. מוסיפים לקובץ appengine_config.py את הנתונים הבאים:

    # appengine_config.py
    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set path to your libraries folder.
    path = 'lib'
    # Add libraries installed in the path folder.
    vendor.add(path)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(path)

    חשוב להשתמש במודולpkg_resources כדי לוודא שהאפליקציה משתמשת בהפצה הנכונה של ספריות הלקוח.

    בדוגמה הקודמת, הקובץ appengine_config.py מניח שהתיקייה lib נמצאת בספריית העבודה הנוכחית. אם אתם לא יכולים להבטיח שהתיקייה lib תמיד תהיה בספריית העבודה הנוכחית, צריך לציין את הנתיב המלא לתיקייה lib. לדוגמה:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  6. פריסת האפליקציה.

‫App Engine מעלה את כל הספריות בספרייה שציינתם בקובץ appengine_config.py לזמן הריצה של Python 2.

התקנת ספריות לאפליקציות Python 3

כדי להתקין ספרייה לשימוש באפליקציה בזמן שהיא פועלת בסביבת זמן הריצה של Python 3:

  1. מוסיפים את שם הספרייה לקובץ requirements.txt של האפליקציה. לדוגמה:

    google-cloud-ndb
    
  2. פריסת האפליקציה.

‫App Engine מעלה באופן אוטומטי את כל הספריות שמפורטות בקובץ requirements.txt לזמן הריצה של Python 3.

נתיבי העברה לשירותים בחבילה של App Engine

Blobstore

כדי לאחסן ולאחזר נתונים, משתמשים ב-Cloud Storage דרך ספריות הלקוח של Cloud. כדי להתחיל, אפשר לעיין במאמר בנושא שימוש ב-Cloud Storage ובמדריך בנושא מעבר מ-Blobstore ל-Cloud Storage. כדי לדמות את ההעברה הזו, מוסיפים שימוש ב-Blobstore לאפליקציה לדוגמה ומעבירים ל-Cloud Storage.

Datastore

אם אפליקציית Python 2 שלכם משתמשת ב-NDB כדי ליצור אינטראקציה עם Datastore, עליכם לעבור לספריית Cloud NDB. ‫Cloud NDB מיועד בעיקר ככלי מעבר להעברת אפליקציות Python 2. מומלץ להשתמש בספריית הלקוח של Datastore במצב Datastore באפליקציות Python 3.

פרטים נוספים זמינים במאמר מעבר ל-Cloud NDB. כדי לדמות את ההעברה הזו באמצעות אפליקציה לדוגמה, אפשר לעיין במאמר העברה מ-App Engine ndb ל-Cloud NDB.

תמונות

אתם יכולים להציג תמונות מ-Cloud Storage, להציג אותן ישירות או להשתמש ברשת של צד שלישי להעברת תוכן (CDN).

כדי לשנות את הגודל של תמונות, להמיר אותן ולבצע בהן מניפולציות, אפשר להשתמש בספרייה לעיבוד תמונות כמו ‫Pillow או ממשק Python ל-ImageMagick.

כדי להשתמש באחת מהספריות האלה של צד שלישי, צריך להוסיף את הספרייה כתלות ולעדכן את הקוד כדי לקרוא ל-APIs של הספרייה.

שירות התמונות של App Engine סיפק גם פונקציונליות למניעת בקשות דינמיות לאפליקציה על ידי טיפול בשינוי גודל התמונה באמצעות כתובת URL להצגת התמונה. אם אתם רוצים פונקציונליות דומה, אתם יכולים ליצור מראש את התמונות בגודל הרצוי ולהעלות אותן ל-Cloud Storage כדי להציג אותן. אפשרות אחרת היא להשתמש בשירות של רשת להעברת תוכן (CDN) של צד שלישי שמציע שינוי גודל של תמונות. ‫

רישום ביומן

מומלץ לעדכן את האפליקציה כדי להשתמש ב-Cloud Logging, שתומך בתכונות כמו צפייה ביומנים בכלי Logs Explorer, הורדת יומנים, סינון הודעות לפי חומרה ומתאם בין הודעות באפליקציה לבין בקשות ספציפיות. לחלופין, אם אתם מעדיפים פשטות על פני דיוק הנתונים, אתם יכולים לכתוב יומנים מובְנים אל stdout או אל stderr. מידע נוסף זמין במאמרים כתיבה של יומנים וצפייה בהם ומעבר ל-Cloud Logging.

שליחת אימייל

כדי לשפר את אבטחת האימייל ולהבטיח מסירה אמינה של אימיילים בכמויות גדולות, מומלץ לעבור מ-Mail API מדור קודם לשירות אימייל מבוסס SMTP, כמו SendGrid,‏ Mailgun או Mailjet.

Memcache

כדי לשמור נתונים של אפליקציות במטמון, משתמשים ב-Memorystore for Redis.

פרטים נוספים זמינים במאמר בנושא העברת Memcache ל-Memorystore. כדי לדמות את ההעברה הזו, מוסיפים שימוש ב-Memcache לאפליקציה לדוגמה ומעבירים ל-Memorystore for Redis.

באפליקציות שמשתמשות ב-Memcache רק כדי לצמצם את זמן האחזור של בקשות NDB (או Cloud NDB), מומלץ להשתמש בתמיכה המובנית של Cloud NDB ב-Redis במקום ב-Memcache או ב-Memorystore for Redis.

מודולים

כדי לקבל מידע על השירותים הפועלים של האפליקציה ולשנות אותם, משתמשים בשילוב של משתני סביבה ו-App Engine Admin API:

פרטי השירות איך ניגשים
מזהה האפליקציה הנוכחית משתנה הסביבה GAE_APPLICATION
מזהה הפרויקט הנוכחי משתנה הסביבה GOOGLE_CLOUD_PROJECT
שם השירות הנוכחי משתנה הסביבה GAE_SERVICE
גרסת השירות הנוכחית משתנה הסביבה GAE_VERSION
מזהה המופע הנוכחי משתנה הסביבה GAE_INSTANCE
שם מארח שמוגדר כברירת מחדל שיטת ה-Admin API‏ apps.get
רשימת השירותים שיטת ה-Admin API‏ apps.services.list
רשימת הגרסאות של שירות שיטת ה-Admin API‏ apps.services.versions.list
גרסת ברירת המחדל של שירות, כולל חלוקת תנועה שיטת ה-Admin API‏ apps.services.get
רשימה של מופעים פעילים של גרסה שיטת ה-Admin API‏ apps.services.versions.instances.list

מידע נוסף על הנתונים שזמינים לגבי שירותים שפועלים באפליקציה שלכם מופיע במאמר בנושא סביבת זמן ריצה שלPython 3‏.

מרחבי שמות

Namespaces API מאפשר לאפליקציות מרובות דיירים לחלק את הנתונים בין הדיירים פשוט על ידי ציון מחרוזת ייחודית של מרחב שמות לכל דייר.

‫Datastore תומך ישירות בשימוש בדיירים מרובים, אבל שירותים אחרים Google Cloudלא תומכים בכך. אם האפליקציה הרב-דיירית שלכם משתמשת בשירותים אחרים של Google Cloud, תצטרכו לנהל את הרב-דיירות באופן ידני. כדי לקבל מופעים מבודדים לחלוטין של שירותים, אתם יכולים ליצור פרויקטים חדשים באופן פרוגרמטי באמצעות Cloud Resource Manager API ולגשת למשאבים בפרויקטים שונים.

OAuth

במקום להשתמש בשירות OAuth של App Engine כדי לאמת אסימוני OAuth 2.0, צריך להשתמש בשיטה oauth2.tokeninfo של OAuth 2.0 API.

אירוח של מסד נתונים לחיפוש טקסט מלא כמו Elasticsearch ב-Compute Engine וגישה אליו מהשירות.

תור משימות

שירות תור המשימות של App Engine זמין בשני מצבים שונים. המעבר מכל אחת מהנקודות האלה מצביע על שני מוצרי Cloud נפרדים.

העברת משימות

במקום להשתמש בשירות של משימות push ב-App Engine Task Queue לביצוע אסינכרוני של קוד, צריך להשתמש בספריות הלקוח של Cloud Tasks עם נקודת קצה של סביבה רגילה ב-Python 3 כיעד. מידע נוסף זמין במאמר העברת תורים של הודעות בדחיפה ל-Cloud Tasks.

כדי לדמות את ההעברה הזו באמצעות אפליקציה לדוגמה, אפשר לעיין במאמרים איך משתמשים בתורים של הודעות Push ב-App Engine באפליקציות Flask והעברה ל-Cloud Tasks.

שליפת משימות

לדוגמה, אם אתם משתמשים בשירות Task Queue pull tasks כדי להוסיף משימות או הודעות לתור לעיבוד על ידי עובדים נפרדים, Cloud Pub/Sub יכול להיות חלופה טובה. היא מציעה פונקציונליות דומה והתחייבויות מסירה. בדומה לשירותי ענן אחרים, ב-Pub/Sub יש ספריות לקוח נוחות לגישה לשירות. מידע נוסף זמין במאמרים כתיבה של הודעות Pub/Sub ותגובה להן ובמדריך להעברה משימות משיכה של Task Queue אל Pub/Sub.

כדי לדמות את ההעברה הזו באמצעות אפליקציה לדוגמה, אפשר לעיין במאמרים איך להשתמש במשימות משיכה של App Engine ובהעברה ל-Pub/Sub.

אחזור כתובת URL

כברירת מחדל, סביבת זמן הריצה של Python 2.7 משתמשת בשירות אחזור של כתובות אתרים כדי לטפל בבקשות HTTP(S) יוצאות, גם אם אתם משתמשים בספריות Python רגילות כדי להנפיק את הבקשות האלה.

אם האפליקציה שלכם משתמשת ישירות ב-URL Fetch APIs, למשל כדי לשלוח בקשות אסינכרוניות, מומלץ לעבור לספריית Python רגילה, כמו Requests library.

מידע נוסף זמין במאמר בנושא העברת בקשות יוצאות.

אימות משתמשים

כחלופה ל-Users API, אפשר להשתמש בכל אחד ממנגנוני האימות שמבוססים על HTTP שמתוארים בדף אימות משתמשים.