סביבת זמן הריצה של 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 כברירת מחדל באמצעות המחלקה gthread worker עם 4 threads לכל worker. במקרים של F1 ו-B1, מחלקת העובדים gthread משתמשת ב-4 עובדים, ובמקרים של F2, B2 ומופעים גדולים יותר, היא משתמשת ב-8 עובדים. אם מציינים entrypoint מותאם אישית בלי להגדיר את --workers
(-w), Gunicorn משתמש כברירת מחדל בעובד sync אחד.
שיטות מומלצות לנקודות כניסה
מוודאים שמודול ה-Python שנדרש להפעלת נקודת הכניסה שצוינה ב-
app.yamlנמצא בקובץrequirements.txt. מוסיפים אתgunicornלקובץrequirements.txtרק אם נקודת קצה שלgunicornמצוינת במפורש בקובץapp.yaml.כדי ליהנות מהביצועים הכי טובים, נקודת הכניסה צריכה להיות קלה כי היא מופעלת בכל פעם שנוצר מופע חדש של האפליקציה.
אתם יכולים להשתמש בשדה של נקודת הכניסה כדי לשפר את הביצועים של האפליקציה. לדוגמה, אם אתם משתמשים ב-
gunicornכשרת האינטרנט שלכם, אתם יכולים להשתמש בדגל--workersבשדה של נקודת הכניסה כדי להגדיר את מספר העובדים שמשרתים את האפליקציה.מספר העובדים שאתם מציינים צריך להיות זהה לסוג המופע של אפליקציית App Engine:
סוג המכונה עובדים F1 4 F2 8 F4 8 F4_1G 8 B1 4 B2 8 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, אפשר להשתמש ב-frameworks אחרים לאינטרנט עם App Engine, כמו 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.