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 אם צריך.
אם גישה אחידה ברמת הקטגוריה עונה על הצרכים שלכם, מומלץ להשתמש במערכת הפשוטה הזו לכל הקטגוריות החדשות שאתם יוצרים. אפשר להמיר קטגוריות קיימות לשימוש בגישה אחידה ברמת הקטגוריה, אבל יכול להיות שיידרשו שינויים משמעותיים בדרך שבה האפליקציה מאבטחת את הגישה לאובייקטים באחסון.
דוגמאות קוד:
פעולות אחסון בסיסיות באמצעות ממשקי ה-API של App Engine
פעולות אחסון בסיסיות באמצעות ספריית הלקוח של Cloud Storage
לפני שמתחילים בהעברה
אם עדיין לא עשיתם זאת, צריך להגדיר את סביבת הפיתוח של Python כך שתשתמש בגרסת Python שתואמת ל- Google Cloud, ולהתקין כלי בדיקה ליצירת סביבות Python מבודדות.
הסבר על הרשאות ב-Cloud Storage
כברירת מחדל, לחשבון השירות שנוצר אוטומטית כברירת מחדל של האפליקציה יש הרשאות קריאה וכתיבה לדליים בפרויקט, ויש לו הרשאות מלאות לאובייקטים שהוא יוצר, גם לפני ההעברה וגם אחריה.
אם השתמשתם בחשבון שירות או בחשבון משתמש אחר כדי לאבטח את הגישה לדליים ולאובייקטים שלכם ב-Cloud Storage, הקפידו להמשיך להשתמש באותם חשבונות ובשיטות אימות לפני ואחרי ההעברה.
סקירה כללית של תהליך המיגרציה
כדי להעביר את אפליקציית Python לשימוש בספריית הלקוח של Cloud ל-Cloud Storage במקום בספריית הלקוח של App Engine:
מתקינים את ספריית הלקוח של Cloud Storage.
מעדכנים את הקוד לשימוש בספריית הלקוח ב-Cloud.
בודקים את העדכונים.
פורסים את האפליקציה ב-App Engine.
התקנת ספריית הלקוח של Cloud ל-Cloud Storage
כדי להפוך את ספריית הלקוח של Cloud Storage לזמינה לאפליקציה כשמריצים אותה ב-App Engine:
מעדכנים את הקובץ
app.yaml:- אם אתם משתמשים בספריות לקוח ב-Cloud, צריך להוסיף את הגרסאות העדכניות של הספריות
grpcioו-setuptools. - מוסיפים את הספרייה
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 כשהאפליקציה תקבל בקשה.
- אם אתם משתמשים בספריות לקוח ב-Cloud, צריך להוסיף את הגרסאות העדכניות של הספריות
מעדכנים את הקובץ
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כדי לעדכן את רשימת הספריות שזמינות לאפליקציה.באפליקציות 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
דוגמת קוד פשוטה ודוגמה ל חיקוי של מצב ספרייה. כדי לעבור בין דפי הרשימה של האובייקטים, משתמשים במאפיין |
| כתיבה לאחסון | blob.upload_from_file
blob.upload_from_filename
blob.upload_from_string
|
| הגדרת רשימות ACL | כדי להחיל רשימת ACL מוגדרת מראש, משתמשים בפרמטר predefined_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 זמין במאמר בדיקה ופריסה של האפליקציה.
פריסת האפליקציה
כשמוכנים לפרוס את האפליקציה, צריך:
אם האפליקציה פועלת ללא שגיאות, משתמשים בפיצול תנועה כדי להגדיל בהדרגה את התנועה לאפליקציה המעודכנת. חשוב לעקוב מקרוב אחרי האפליקציה כדי לזהות בעיות לפני שמפנים אליה עוד תנועה.