הסביבה הגמישה של App Engine לא מספקת את ספריות ה-API שקיימות ב-App Engine SDK. אם מחליטים להעביר את האפליקציה מסביבת App Engine סטנדרטית לסביבה גמישה, צריך לעדכן את הקוד כדי להשתמש בשירותים ובממשקי API שזמינים בכל Google Cloud הסביבות.
בקטעים הבאים מפורטות הוראות להעברת שירותים ספציפיים וחבילות API מדור קודם מהסביבה הרגילה לסביבה הגמישה.
ההבדלים בין הסביבה הרגילה לבין הסביבה הגמישה
בנוסף להבדלים העיקריים שמפורטים כאן, נתיבים עם /_ah/ לא נחסמים בסביבה הגמישה. אם האפליקציה שלכם בסביבה הרגילה משתמשת בנתיבים עם /_ah/ כדי לגשת לשירותים ספציפיים, כדאי לעיין בקטע של השירות הרלוונטי בהמשך.
זהות האפליקציה
כשמריצים את האפליקציה בסביבה הגמישה, אפשר להשתמש בשילוב של משתני סביבה ושירות המטא-נתונים של Compute Engine כדי לקבל מידע על האפליקציה:
| פרטי האפליקציה | איך ניגשים |
|---|---|
| מזהה האפליקציה או הפרויקט | משתנה הסביבה GOOGLE_CLOUD_PROJECT או המשאב /project/project-id בשרת המטא-נתונים |
| שם מארח שמוגדר כברירת מחדל | App Engine Admin API apps.get method |
| שם חשבון השירות | המשאב /instance/service-accounts בשרת המטא-נתונים |
| אסימון גישה מסוג OAuth 2.0 | המשאב /instances/service-accounts בשרת המטא-נתונים. מאמרי העזרה בנושא אימות באמצעות פרטי כניסה לחשבון שירות ב-Compute Engine |
הפונקציונליות הבאה לא זמינה באופן ישיר:
- לא מוגדרת קטגוריה של Cloud Storage כברירת מחדל לפרויקט. כדי להשתמש בקטגוריה של Cloud Storage באפליקציה, אפשר ליצור קטגוריה של Cloud Storage ולהשתמש במזהה הפרויקט כשם הקטגוריה. אחר כך תוכלו להשתמש במשתנה הסביבה
GOOGLE_CLOUD_PROJECTבאפליקציה כשם הקטגוריה. - אי אפשר לחתום על בלובים באמצעות חשבון השירות שמוגדר כברירת מחדל. כדי לעקוף את הבעיה, אפשר להשתמש ב-Identity and Access Management (IAM) API או לספק מפתח פרטי של חשבון שירות לאפליקציה בזמן הפריסה.
- באופן דומה, אין API מובנה להשגת אישורים ציבוריים לאימות חתימות. עם זאת, האישורים הציבוריים של כל חשבון שירות זמינים בכתובת
https://www.googleapis.com/robot/v1/metadata/x509/{service account email}. - שימו לב: אם אתם משתמשים בסביבת זמן הריצה של Java, ממשקי ה-API של SystemProperty ב-App Engine לא זמינים בסביבה הגמישה של App Engine. עם זאת, אפשר להגדיר משתני סביבה ב-
app.yamlולהשתמש ב-System.envכדי לקבל את הערכים, כמו שמתואר במאמר הגדרת משתני סביבה.
מידע נוסף על משתני סביבה זמין בדפי הסקירה הכללית של זמן הריצה או בדף העזר בנושא app.yaml.
שרשורים ברקע
בסביבה הגמישה אין מגבלות של ארגז חול, ולכן אפשר ליצור תהליכים או שרשורים שפועלים מחוץ לסביבת הבקשה. בדרך כלל לא צריך להשתמש בכלים אחרים מלבד הכלים המובנים של השפה ליצירת שרשורים או לעיבוד מקבילי.
Blobstore
השימוש בשירות Blobstore הוחלף במידה רבה בCloud Storage, גם בסביבה הרגילה וגם בסביבה הגמישה. אפשר להשתמש בספריות הלקוחGoogle Cloud כדי לאחסן ולאחזר נתונים ב-Cloud Storage.
מידע נוסף זמין במאמר בנושא שימוש ב-Cloud Storage.
יכולות
אין פונקציונליות דומה לזו של שירות היכולות שזמינה מחוץ לסביבה הרגילה.
Websockets
הסביבה הגמישה של App Engine תומכת ב-WebSockets. מידע נוסף זמין במאמר בנושא יצירת חיבורים קבועים באמצעות WebSockets.
Firestore במצב Datastore (Datastore)
אפשר לגשת ל-Datastore מכל מקום באמצעות Datastore API. אפשר להשתמש בGoogle Cloud ספריות הלקוח כדי לאחסן נתונים ב-Datastore ולאחזר אותם.
אותם נתונים ב-Datastore זמינים גם אם משתמשים בספריות App Engine, גם אם משתמשים ב Google Cloud ספריות הלקוח וגם אם קוראים ל-API ישירות.
אם אתם משתמשים בספריית Python ndb ומעדיפים גישה ל-Datastore בסגנון NDB, מומלץ לעבור אל Cloud NDB. מידע נוסף זמין במאגר Cloud NDB.
ספריות הלקוח Cloud NDB ו-Datastore נתמכות ב-Python 2 וב-Python 3, והן פועלות בסביבה רגילה או בסביבה גמישה של App Engine, וגם באפליקציות שאינן App Engine. עם זאת, המטרה העיקרית שלהן היא לעזור למפתחים ב-Python 2 לעבור משירותים מדור קודם כמו App Engine ndb.
בנוסף, המטרה של Cloud NDB היא לשמור על חוויית המשתמש של NDB.
מידע נוסף זמין במאמר בנושא שימוש ב-Datastore.
תמונות
שירות התמונות לא זמין מחוץ לסביבה הרגילה. עם זאת, אפשר להציג תמונות בקלות ישירות מהאפליקציה או ישירות מ-Cloud Storage.
אם אתם צריכים לעבד תמונות, אתם יכולים להתקין ולהשתמש בכל ספרייה לעיבוד תמונות, כמו:
- Pillow ל-Python
- ImageJ2, imgscalr או thumbnailator ל-Java
- imaging ל-Go
- GD או ImageMagick ל-PHP
שירות התמונות סיפק גם פונקציונליות למניעת בקשות דינמיות לאפליקציה שלכם, על ידי טיפול בשינוי גודל התמונה באמצעות כתובת URL להצגת התמונה. אם אתם רוצים פונקציונליות דומה, אתם יכולים ליצור מראש את התמונות בגודל הרצוי ולהעלות אותן ל-Cloud Storage כדי להציג אותן. אפשרות אחרת היא להשתמש בשירות של צד שלישי להעברת תוכן (CDN) שמציע שינוי גודל של תמונות.
למידע נוסף, אפשר לעיין במדריכים הבאים:
רישום ביומן
בדומה לסביבה הרגילה, הרישום מתבצע באופן אוטומטי בסביבה הגמישה. עם זאת, היומנים נאספים בפורמט שונה.
הרישומים לא יצורפו לפי בקשות, והרישומים מ-stdout ומ-stderr
ייאספו בנפרד.
אם אתם רוצים יותר שליטה ברישום ביומן של האפליקציה, את האפשרות לקבץ יומנים ואת האפשרות לרשום מטא-נתונים נוספים ביומן, אתם יכולים להשתמש ישירות ב-API של Cloud Logging עם Google Cloud ספריות הלקוח.
פרטים נוספים זמינים במאמר בנושא כתיבת יומני אפליקציות.
שליחת אימייל
שירות האימייל של App Engine לא זמין מחוץ לסביבה הרגילה. תצטרכו להשתמש בספק אימייל מצד שלישי כמו SendGrid, Mailgun או Mailjet כדי לשלוח אימייל. כל השירותים האלה מציעים ממשקי API לשליחת אימייל מאפליקציות שפועלות בכל מקום.
פרטים נוספים זמינים במאמר בנושא שליחת הודעות באמצעות שירותים של צד שלישי.
Memcache
שירות Memcache לא זמין בסביבה הגמישה של App Engine. כדי לשמור נתונים של אפליקציות במטמון, משתמשים ב-Memorystore for Redis.
מודולים
ממשק ה-API של מודולים לא זמין מחוץ לסביבה הרגילה. עם זאת, אפשר להשתמש בשילוב של משתני סביבה ו-App Engine Admin API כדי לקבל מידע על השירותים הפועלים של האפליקציה ולשנות אותם:
| פרטי השירות | איך ניגשים |
|---|---|
| שם השירות הנוכחי | משתנה הסביבה GAE_SERVICE |
| גרסת השירות הנוכחית | משתנה הסביבה GAE_VERSION |
| מזהה המופע הנוכחי | משתנה הסביבה GAE_INSTANCE |
| שם מארח שמוגדר כברירת מחדל | App Engine Admin API apps.get method |
| רשימת השירותים | App Engine Admin API apps.services.list method |
| רשימת הגרסאות של שירות | App Engine Admin API apps.services.versions.list method |
| גרסת ברירת המחדל של שירות, כולל חלוקת תנועה | App Engine Admin API apps.services.get method |
| רשימה של מופעים פעילים של גרסה | App Engine Admin API apps.services.versions.instances.list method |
אפשר גם להשתמש ב-App Engine Admin API כדי לפרוס ולנהל שירותים וגרסאות באפליקציה.
מידע נוסף על משתני סביבה זמין בדפי הסקירה הכללית של זמן הריצה או בדף העזר בנושא app.yaml.
מרחבי שמות
מחוץ לסביבה הרגילה, רק Datastore תומך בריבוי דיירים באופן ישיר. בשירותים אחרים, תצטרכו לנהל את ריבוי הדיירים באופן ידני. כדי לקבל מופעים מבודדים לחלוטין של שירותים, אתם יכולים ליצור פרויקטים חדשים באופן פרוגרמטי באמצעות Cloud Resource Manager API ולגשת למשאבים בפרויקטים שונים.
OAuth
שירות OAuth לא זמין בסביבה הגמישה. אם אתם צריכים לאמת אסימונים מסוג OAuth 2.0, אתם יכולים לעשות זאת באמצעות השיטה oauth2.tokeninfo של OAuth 2.0 API.
אפליקציה עם פעולה מרחוק
שירות ה-API מרחוק לא רלוונטי לסביבה הגמישה. רוב שירותי הגיבוי, כמו Datastore, שאפשר לגשת אליהם מהסביבה הגמישה, זמינים גם מכל מקום.
חיפוש
שירות החיפוש לא זמין כרגע מחוץ לסביבה הגמישה. אפשר לארח כל מסד נתונים של חיפוש טקסט מלא, כמו Apache Solr ב-Compute Engine או Elasticsearch Service ב-Elastic Cloud, ולגשת אליו גם מהסביבה הרגילה וגם מהסביבה הגמישה.
בוקסות
בסביבה הגמישה אין הגבלות על ארגז החול, כך שאפשר לפתוח ולהשתמש בשקעים יוצאים כרגיל.
תור משימות
כדי להשתמש בשירות של תור משימות מסוג push מחוץ לסביבה הרגילה מהדור הראשון, אפשר להשתמש ב-Google Tasks.
במקרים רבים שבהם כדאי להשתמש בתורי משימות מסוג pull, כמו הוספת משימות או הודעות לתור שיימשכו ויעובדו על ידי עובדים נפרדים, Pub/Sub יכול להיות חלופה טובה כי הוא מציע פונקציונליות דומה והתחייבויות למסירה.
אחזור כתובת URL
שירות אחזור של כתובות אתרים לא זמין בסביבה הגמישה. עם זאת, אין הגבלות על ארגז החול, כך שהאפליקציה יכולה להשתמש בכל ספריית HTTP כדי לקבל פונקציונליות של אחזור כתובות URL.
אם אתם משתמשים ב-Python, מומלץ להשתמש ב-Requests. אם אתם משתמשים ב-Java, מומלץ להשתמש ב-Google HTTP Client Library for Java או ב-OkHttp.
משתמשים
שירות Users לא זמין מחוץ לסביבה הרגילה. אתם יכולים להשתמש בכל מנגנון אימות מבוסס-HTTP בסביבה הגמישה, כמו:
- Google Identity Platform, שמספק אפשרויות רבות לאימות ולהרשאה של חשבונות משתמשים ב-Google.
- אימות ב-Firebase, שמאפשר אימות באמצעות שם משתמש/סיסמה וזהות מאוחדת באמצעות Google, Facebook, Twitter ועוד.
- Auth0, שמספק אימות עם ספקי זהויות שונים ותכונות של כניסה יחידה (SSO).
- OAuth 2.0 ו-OpenID Connect, שמאפשרים זהות מאוחדת מהספק שתבחרו. Google היא ספק זהויות של OpenID Connect. יש גם כמה ספקים אחרים.
הערה: מכיוון ששירות המשתמשים לא זמין, אי אפשר להשתמש ב-appengine-web.xml ל-Java או ב-app.yaml לסביבות זמן ריצה אחרות כדי להגדיר שכתובות URL יהיו נגישות רק לאדמינים. תצטרכו לטפל בלוגיקה הזו באפליקציה שלכם.
המאמרים הבאים
סקירה כללית של ההבדלים העיקריים בין הסביבה הגמישה לבין הסביבה הרגילה, עם הנחיות לאפליקציות שמשתמשות בשתי הסביבות, זמינה במאמר סביבת App Engine גמישה למשתמשים בסביבה רגילה.