סביבת זמן הריצה של Python היא מחסנית התוכנה שאחראית להתקנת הקוד של שירות האינטרנט והתלויות שלו, ולהפעלת שירות App Engine.
זמן הריצה של Python ב-App Engine בסביבה הרגילה מוצהר בקובץ app.yaml:
runtime: pythonVERSION
כאשר VERSION הוא מספר הגרסה של Python MAJOR ו-MINOR. לדוגמה, כדי להשתמש בגרסה העדכנית ביותר של Python, Python 3.14, מציינים 314.
גרסאות נתמכות אחרות של Python וגרסאות Ubuntu תואמות לגרסת Python שלכם מפורטות בלוח הזמנים של תמיכה בזמן ריצה.
גרסאות Python 3
גרסת Python העדכנית ביותר שנתמכת היא 3.14. סביבת הריצה של Python משתמשת בגרסה היציבה העדכנית ביותר שצוינה בקובץ app.yaml.
App Engine מתעדכן אוטומטית לגרסאות תיקון חדשות, אבל הוא לא מתעדכן אוטומטית לגרסה משנית.
לדוגמה, יכול להיות שהאפליקציה שלכם נפרסה ב-Python 3.7.0 ומעלה, והיא תתעדכן אוטומטית ל-Python 3.7.1, אבל היא לא תתעדכן אוטומטית לגרסה המשנית הבאה, Python 3.8.0.
נסו בעצמכם
אנחנו ממליצים למשתמשים חדשים ב-Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של App Engine בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300 $להרצה, לבדיקה ולפריסה של עומסי העבודה.
אני רוצה לנסות את App Engine בחינםאפליקציות Python מורצות ב-App Engine במאגר מאובטח על ידי gVisor בהפצת Ubuntu Linux עדכנית.
תלויות
במהלך הפריסה, App Engine משתמש במנהל החבילות של Python pip כדי להתקין את התלות שמוגדרת בקובץ המטא-נתונים requirements.txt שנמצא בספריית השורש של הפרויקט. אין צורך להעלות תלויות כי App Engine מבצע התקנה חדשה.
נכון לעכשיו, הגדרת תלות באמצעות התקן Pipfile/Pipfile.lock אינה אפשרית, ופרויקט לא יכול להכיל קבצים כאלה.
הפעלת האפליקציה
סביבת זמן הריצה מפעילה את האפליקציה על ידי הרצת הפקודה שציינתם בשדה entrypoint בקובץ app.yaml. אם הגדרתם נקודת כניסה לשרת אינטרנט של Gunicorn בקובץ app.yaml, אתם צריכים להוסיף את gunicorn גם לקובץ requirements.txt.
נקודת הכניסה צריכה להפעיל שרת אינטרנט שמקשיב ליציאה שצוינה במשתנה הסביבה PORT. לדוגמה:
entrypoint: gunicorn -b :$PORT main:app
מסגרת האינטרנט שבה האפליקציה משתמשת אחראית להפניית בקשות למטפלים המתאימים באפליקציה.
אם האפליקציה שלכם עומדת בדרישות הבאות, מערכת App Engine תפעיל את האפליקציה עם שרת האינטרנט gunicorn אם לא תציינו את השדה entrypoint:
תיקיית השורש של האפליקציה מכילה קובץ
main.pyעם אובייקט שמתאים ל-WSGI בשםapp.האפליקציה שלך לא מכילה קובצי
PipfileאוPipfile.lock.
אם לא מציינים נקודת כניסה לסביבת זמן הריצה של Python 3, App Engine מגדיר ומפעיל את שרת האינטרנט Gunicorn שמוגדר כברירת מחדל.
שיטות מומלצות לנקודות כניסה
מוודאים שמודול Python שנדרש להרצת נקודת הכניסה שצוינה ב-
app.yamlנמצא בקובץrequirements.txt. מוסיפים אתgunicornלקובץrequirements.txtרק אם נקודת קצה שלgunicornמצוינת באופן מפורש בקובץapp.yaml.כדי ליהנות מהביצועים הכי טובים, נקודת הכניסה צריכה להיות קלה כי היא פועלת בכל פעם שנוצר מופע חדש של האפליקציה.
אתם יכולים להשתמש בשדה של נקודת הכניסה כדי לשפר את הביצועים של האפליקציה. לדוגמה, אם אתם משתמשים ב-
gunicornכשרת האינטרנט שלכם, אתם יכולים להשתמש בדגל--workersבשדה של נקודת הכניסה כדי להגדיר את מספר העובדים שמשרתים את האפליקציה.מספר העובדים שאתם מציינים צריך להיות זהה לסוג המופע של אפליקציית App Engine:
סוג המכונה עובדים F1 2 F2 4 F4 8 F4_1G 8 B1 2 B2 4 B4 8 B4_1G 8 B8 8 ההנחיות האלה הן נקודת התחלה לבחירת מספר העובדים. יכול להיות שתצטרכו להשתמש במספר שונה של עובדים, בהתאם למאפייני הביצועים של האפליקציה. בדוגמה הבאה מוצג פריסה של App Engine שמשתמשת בשני תהליכי עבודה מסוג
gunicornלהצגת אפליקציות:entrypoint: gunicorn -b :$PORT -w 2 main:appמומלץ להגדיר את שרת האינטרנט כך שיקשיב לבקשות HTTP ויגיב להן ביציאה שצוינה על ידי
$PORTמשתנה הסביבה. שימוש ביציאת ברירת המחדל8080מונע מ-App Engine להשתמש בשכבת NGINX שלו כדי לדחוס תגובות HTTP. הערה: אם משתמשים ביציאה8080, יופיעו אזהרות לגבי יציאה8080ו-NGINX בקובצי היומן של האפליקציה.
מסגרות אינטרנט אחרות
בנוסף ל-Django ול-Flask, אפשר להשתמש ב-App Engine ב-frameworks אחרים לאינטרנט, כמו uwsgi ו-Tornado. בדוגמה הבאה אפשר לראות איך משתמשים ב-uwsgi עם App Engine:
משתני סביבה
משתני הסביבה הבאים מוגדרים על ידי זמן הריצה:
| משתנה הסביבה | תיאור |
|---|---|
GAE_APPLICATION
|
המזהה של אפליקציית App Engine. המזהה הזה מתחיל בקידומת region code~, למשל e~ לאפליקציות שמוצבות באירופה. |
GAE_DEPLOYMENT_ID |
המזהה של הפריסה הנוכחית. |
GAE_ENV |
סביבת App Engine. ההגדרה היא standard. |
GAE_INSTANCE |
המזהה של המופע שבו השירות שלכם פועל כרגע. |
GAE_MEMORY_MB |
נפח הזיכרון שזמין לתהליך האפליקציה, ב-MB. |
GAE_RUNTIME |
סביבת זמן הריצה שצוינה בקובץ app.yaml. |
GAE_SERVICE |
שם השירות שצוין בקובץ app.yaml. אם לא מצוין שם שירות, ברירת המחדל היא default. |
GAE_VERSION |
תווית הגרסה הנוכחית של השירות. |
GOOGLE_CLOUD_PROJECT |
מזהה הפרויקט ב- Google Cloud שמשויך לאפליקציה. |
PORT |
היציאה שמקבלת בקשות HTTP. |
NODE_ENV (זמין רק בסביבת זמן ריצה של Node.js) |
מגדירים את הערך production כשהשירות נפרס. |
אפשר להגדיר משתני סביבה נוספים בקובץ app.yaml, אבל אי אפשר לשנות את הערכים שלמעלה, למעט NODE_ENV.
פרוטוקול HTTPS ושרתי proxy להעברה
App Engine מפסיק חיבורי HTTPS במאזן העומסים ומעביר בקשות לאפליקציה. באפליקציות מסוימות צריך לקבוע את כתובת ה-IP והפרוטוקול של הבקשה המקורית. כתובת ה-IP של המשתמש זמינה בכותרת הרגילה X-Forwarded-For. באפליקציות שנדרש בהן המידע הזה, צריך להגדיר את מסגרת האינטרנט כך שתיתן אמון ב-proxy.
מערכת קבצים
סביבת זמן הריצה כוללת מערכת קבצים מלאה. מערכת הקבצים היא לקריאה בלבד, למעט המיקום /tmp, שהוא דיסק וירטואלי שמאחסן נתונים בזיכרון ה-RAM של מופע App Engine.
שרת מטא-נתונים
כל מופע של האפליקציה יכול להשתמש בשרת המטא-נתונים של App Engine כדי לשלוח שאילתות לגבי המופע והפרויקט.
אפשר לגשת לשרת המטא-נתונים דרך נקודות הקצה הבאות:
http://metadatahttp://metadata.google.internal
בקשות שנשלחות לשרת המטא-נתונים חייבות לכלול את כותרת הבקשה Metadata-Flavor: Google. הכותרת הזו מציינת שהבקשה נשלחה בכוונה מפורשת לאחזר ערכי מטא-נתונים.
בטבלה הבאה מפורטות נקודות הקצה שאליהן אפשר לשלוח בקשות HTTP למטא-נתונים ספציפיים:
| נקודת קצה של מטא-נתונים | תיאור |
|---|---|
/computeMetadata/v1/project/numeric-project-id |
מספר הפרויקט שהוקצה לפרויקט שלכם. |
/computeMetadata/v1/project/project-id |
מזהה הפרויקט שהוקצה לפרויקט. |
/computeMetadata/v1/instance/region |
האזור שבו המכונה פועלת. |
/computeMetadata/v1/instance/service-accounts/default/aliases |
|
/computeMetadata/v1/instance/service-accounts/default/email |
כתובת האימייל של חשבון השירות שמוגדר כברירת מחדל ומוקצה לפרויקט. |
/computeMetadata/v1/instance/service-accounts/default/ |
מציגה את כל חשבונות השירות שמוגדרים כברירת מחדל בפרויקט. |
/computeMetadata/v1/instance/service-accounts/default/scopes |
רשימה של כל ההיקפים הנתמכים בחשבונות שירות שמוגדרים כברירת מחדל. |
/computeMetadata/v1/instance/service-accounts/default/token |
מחזירה את אסימון האימות שאפשר להשתמש בו כדי לאמת את האפליקציה שלכם ב-Google Cloud APIs אחרים. |
לדוגמה, כדי לאחזר את מזהה הפרויקט, שולחים בקשה אל http://metadata.google.internal/computeMetadata/v1/project/project-id.