סביבת זמן ריצה של Python 3

סביבת זמן הריצה של 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:

runtime: python313
entrypoint: uwsgi --http-socket :$PORT --wsgi-file main.py --callable app --master --processes 1 --threads 2
uwsgi==2.0.22
Flask==3.0.0

משתני סביבה

משתני הסביבה הבאים מוגדרים על ידי זמן הריצה:

משתנה הסביבה תיאור
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://metadata
  • http://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.