סביבת זמן ריצה של 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, אפשר להשתמש ב-frameworks אחרים לאינטרנט עם App Engine, כמו 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.1.3; python_version >= '3.9'

משתני סביבה

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

משתנה הסביבה תיאור
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. אפליקציות שזקוקות למידע הזה צריכות להגדיר את תוכנת ה-framework שלהן כך שתיתן אמון בשרת ה-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.