מעבר לספריית הלקוח של Cloud Storage

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

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

השוואה בין ספריות הלקוח של App Engine ו-Cloud

תכונות דומות:

  • ספריית הלקוח ב-Cloud תומכת בכל התכונות של Cloud Storage שמופעלות על ידי ספריית הלקוח של App Engine, כמו קריאה, כתיבה, הסרה ורישום של אובייקטים. ההעברה צריכה לדרוש רק שינויים קטנים בקוד.

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

ההבדלים:

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

  • ספריית הלקוח של App Engine מחייבת שימוש ברשימות של בקרת גישה (ACL) כדי לשלוט בגישה לקטגוריות ולאובייקטים. עם זאת, Cloud Storage וספריית הלקוח של Cloud תומכים בשתי מערכות להענקת הרשאה למשתמשים לגשת לקטגוריות ולאובייקטים: רשימות ACL וגישה אחידה ברמת הקטגוריה. גישה אחידה ברמת הקטגוריה מספקת חוויה פשוטה ועקבית של בקרת גישה לכל המשאבים בענן.

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

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

דוגמאות קוד:

לפני שמתחילים בהעברה

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

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

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

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

סקירה כללית של תהליך המיגרציה

כדי להעביר את אפליקציית Python לשימוש בספריית הלקוח של Cloud ל-Cloud Storage במקום בספריית הלקוח של App Engine:

  1. מתקינים את ספריית הלקוח של Cloud Storage.

  2. מעדכנים את הקוד לשימוש בספריית הלקוח ב-Cloud.

  3. בודקים את העדכונים.

  4. פורסים את האפליקציה ב-App Engine.

התקנת ספריית הלקוח של Cloud ל-Cloud Storage

כדי להפוך את ספריית הלקוח של Cloud Storage לזמינה לאפליקציה כשמריצים אותה ב-App Engine:

  1. מעדכנים את הקובץ app.yaml:

    1. אם אתם משתמשים בספריות לקוח ב-Cloud, צריך להוסיף את הגרסאות העדכניות של הספריות grpcio ו-setuptools.
    2. מוסיפים את הספרייה ssl כי היא נדרשת על ידי Cloud Storage.

    קובץ app.yaml לדוגמה:

    runtime: python27
    threadsafe: yes
    api_version: 1
    
    libraries:
    - name: grpcio
      version: 1.0.0
    - name: setuptools
      version: 36.6.0
    - name: ssl
      version: latest
    

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

  2. מעדכנים את הקובץ requirements.txt על ידי הוספת ספריות הלקוח של Cloud ל-Cloud Storage לרשימת התלות:

    google-cloud-storage==1.24.1
    

    מומלץ להשתמש בגרסה 1.24.1 של ספריית הלקוח של Cloud Storage, כי היא תומכת באפליקציות Python 2.7.

    לאחר מכן מריצים את הפקודה pip install -t lib -r requirements.txt כדי לעדכן את רשימת הספריות שזמינות לאפליקציה.

  3. באפליקציות Python 2, אם האפליקציה משתמשת בספריות מובנות או בספריות שהועתקו, צריך לציין את הנתיבים האלה בקובץ 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)
    

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

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')

עדכון הקוד לשימוש בספריית הלקוח של Cloud

יצירת לקוח Cloud Storage

כדי להשתמש בספריית הלקוח של Cloud Storage, צריך ליצור אובייקט Client. הלקוח מכיל פרטי כניסה ונתונים אחרים שנדרשים כדי להתחבר ל-Cloud Storage. לדוגמה:

from google.cloud import storage

client = storage.Client()

בתרחיש ההרשאה שמוגדר כברירת מחדל שמתואר למעלה, לקוח Cloud Storage מכיל פרטי כניסה מחשבון השירות שמוגדר כברירת מחדל ב-App Engine, שיש לו הרשאה לבצע אינטראקציה עם הדליים והאובייקטים בפרויקט. אם אתם לא עובדים בתרחיש ברירת המחדל הזה, במאמר Application Default Credentials (ADC) מוסבר איך לספק פרטי כניסה.

שימוש בשיטות של Cloud Client Library

בטבלה הבאה מפורטות השיטות מספריית הלקוח של Cloud שבהן צריך להשתמש כשמטמיעים תכונות ספציפיות של Cloud Storage.

תכונה של Cloud Storage Cloud client methods
הצגה של רשימת האובייקטים בקטגוריה Client.list_blobs

דוגמת קוד פשוטה ודוגמה ל חיקוי של מצב ספרייה.

כדי לעבור בין דפי הרשימה של האובייקטים, משתמשים במאפיין pages של אובייקט האיטרטור שמוחזר על ידי Client.list_blobs.

כתיבה לאחסון blob.upload_from_file
blob.upload_from_filename
blob.upload_from_string

דוגמת קוד

הגדרת רשימות ACL כדי להחיל רשימת ACL מוגדרת מראש, משתמשים בפרמטר predefined_acl כשיוצרים קטגוריה או יוצרים אובייקט.

כדי לקבל שליטה פרטנית יותר, אפשר להשתמש ב-bucket.acl.reload() או ב-blob.acl.reload() כדי לאחזר את כל רשימות ה-ACL שמוגדרות כרגע. אחר כך משתמשים בשיטות ACL כדי להוסיף או להסיר רשימות ACL. דוגמת קוד

קריאה מהאחסון blob.download_to_file
blob.download_to_filename
blob.download_as_string

דוגמת קוד

מחיקת אובייקט blob.delete

דוגמת קוד

העתקת אובייקט bucket.copy_blob

דוגמת קוד

קריאת מטא-נתונים של אובייקט blob.propertyname
וגם
blob.metadata

דוגמת קוד

בדיקת העדכונים

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

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

פריסת האפליקציה

כשמוכנים לפרוס את האפליקציה, צריך:

  1. בדיקת האפליקציה ב-App Engine.

  2. אם האפליקציה פועלת ללא שגיאות, משתמשים בפיצול תנועה כדי להגדיל בהדרגה את התנועה לאפליקציה המעודכנת. חשוב לעקוב מקרוב אחרי האפליקציה כדי לזהות בעיות לפני שמפנים אליה עוד תנועה.