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 וגישה אחידה ברמת הקטגוריה. גישה אחידה ברמת הקטגוריה מספקת חוויה פשוטה ועקבית של בקרת גישה לכל המשאבים בענן.
כל רשימות בקרת הגישה שבהן השתמשתם עם ספריית הלקוח של App Engine ממשיכות להיות בתוקף עבור הדליים הקיימים שלכם אחרי המעבר לספריית הלקוח של Cloud, ואתם יכולים להמשיך להשתמש ברשימות בקרת גישה אם צריך.
אם גישה אחידה ברמת הקטגוריה עונה על הצרכים שלכם, מומלץ להשתמש במערכת הפשוטה הזו לכל הקטגוריות החדשות שאתם יוצרים. אפשר להמיר קטגוריות קיימות לשימוש בגישה אחידה ברמת הקטגוריה, אבל יכול להיות שיידרשו שינויים משמעותיים בדרך שבה האפליקציה מאבטחת את הגישה לאובייקטים שלה באחסון.
דוגמאות קוד:
פעולות אחסון בסיסיות באמצעות ממשקי ה-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 Storage
כדי להפוך את ספריית הלקוח ב-Cloud לזמינה לאפליקציה שלכם ב-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 | שיטות של לקוח ענן |
| הצגה של רשימת האובייקטים בקטגוריה | 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 זמין במאמר בדיקה ופריסה של האפליקציה.
פריסת האפליקציה
כשמוכנים לפרוס את האפליקציה, צריך:
אם האפליקציה פועלת ללא שגיאות, משתמשים בפיצול תנועה כדי להגדיל בהדרגה את התנועה לאפליקציה המעודכנת. חשוב לעקוב מקרוב אחרי האפליקציה כדי לזהות בעיות לפני שמפנים אליה עוד תנועה.