מזהה אזור
REGION_ID הוא קוד מקוצר ש-Google מקצה על סמך האזור שבוחרים כשיוצרים את האפליקציה. הקוד לא תואם למדינה או למחוז, למרות שחלק ממזהי האזורים עשויים להיראות דומים לקודים נפוצים של מדינות ומחוזות. באפליקציות שנוצרו אחרי פברואר 2020, המחרוזת REGION_ID.r כלולה בכתובות ה-URL של App Engine. באפליקציות קיימות שנוצרו לפני התאריך הזה, מזהה האזור הוא אופציונלי בכתובת ה-URL.
צריך להשתמש בקובץ appengine-web.xml כדי להגדיר את האפליקציה רק אם מעבירים אפליקציה קיימת מסביבת זמן ריצה של Java 8 ב-App Engine לגרסה הנתמכת האחרונה של Java, ורוצים להשתמש בשירותים מדור קודם. אם משתמשים בקובץ appengine-web.xml בפרויקט, המערכת יוצרת באופן אוטומטי את הקובץ app.yaml כשפורסים את האפליקציה.
אפליקציות Java ב-App Engine משתמשות בקובץ הגדרות בשם appengine-web.xml כדי לציין מידע על האפליקציה ולזהות אילו קבצים בקובץ WAR של האפליקציה הם קבצים סטטיים (כמו תמונות) ואילו הם קובצי משאבים שמשמשים את האפליקציה.
תחביר
באפליקציית Java של App Engine צריך להיות קובץ בשם appengine-web.xml ב-WAR, בספרייה WEB-INF/. זהו קובץ XML שרכיב הבסיס שלו הוא <appengine-web-app>.
אפשר למצוא את הגדרת סוג המסמך ואת מפרטי הסכימה של appengine-web.xml בספרייה docs/ של ה-SDK.
| רכיב | תיאור |
|---|---|
<application> |
לא נדרש אם פורסים את האפליקציה באמצעות כלים שמבוססים על Google Cloud SDK, כמו הפקודה |
app_engine_apis
|
זה שינוי אופציונלי. מגדירים את השדה הזה לערך מומלץ להשתמש ב- |
app_engine_bundled_services (תצוגה מקדימה)
|
זה שינוי אופציונלי. צריך להגדיר את השדה הזה כדי לאפשר גישה לשירותים ספציפיים בחבילה בסביבות זמן ריצה מהדור השני. אי אפשר להשתמש בהגדרה הזו אם מגדירים את השדה מציינים את אחד מהשירותים הנתמכים הבאים שכלולים בחבילה בהגדרה הזו:
לדוגמה: <app-engine-bundled-services> <api>datastore_v3</api> <api>memcache</api> </app-engine-bundled-services> בדוגמה הזו, האפליקציה יכולה להשתמש רק בשירותים המשולבים Datastore ו-Memcache. |
<entrypoint>
|
אופציונלי, רק לזמני ריצה מהדור השני. ההגדרה הזו מבטלת את נקודת הכניסה שמוגדרת כברירת מחדל, שהיא שורת הפקודה של התהליך שמפעילה את אפליקציית Java. כברירת מחדל, נקודת הכניסה שנוצרת עבור סוג מכונה F4 (הגדרות הזיכרון מחושבות מסוג המכונה) שווה להגדרה הבאה: <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <entrypoint> java -showversion -Xms32M -Xmx819M -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:+PrintCommandLineFlags --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED --add-opens java.logging/java.util.logging=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED -Dclasspath.runtimebase=/base/java_runtime -Djava.class.path=/base/java_runtime/runtime-main.jar -Djava.library.path=/base/java_runtime: com/google/apphosting/runtime/JavaRuntimeMainWithDefaults --fixed_application_path=/workspace /base/java_runtime </entrypoint> </appengine-web-app>
אפשר לשנות את ההגדרה כדי להוסיף דגלים נוספים של תהליך JVM או להגדיר תהליך משלכם לאתחול.
שימו לב שהאפליקציה נפרסת בספרייה |
<async-session-persistence> |
זה שינוי אופציונלי. אפשר להקטין את זמן האחזור של הבקשה על ידי הגדרת האפליקציה כך שתכתוב נתונים של סשנים ב-HTTP ב-Datastore באופן אסינכרוני: <async-session-persistence enabled="true" /> אם מפעילים את התכונה 'שמירת נתונים של סשנים באופן אסינכרוני', App Engine ישלח משימה ל-Task Queue כדי לכתוב את נתוני הסשן ל-Datastore לפני כתיבת הנתונים ל-memcache. כברירת מחדל, המשימה תוגש לתור ברירת המחדל. אם רוצים להשתמש בתור אחר, מוסיפים את המאפיין `queue-name`: <async-session-persistence enabled="true" queue-name="myqueue"/> נתוני ביקורים תמיד נכתבים באופן סינכרוני ל-memcache. אם בקשה מנסה לקרוא את נתוני הסשן כש-memcache לא זמין (או כשנתוני הסשן נמחקו), היא תעבור ל-Datastore, שבו יכול להיות שעדיין לא יהיו נתוני הסשן העדכניים ביותר. המשמעות היא ששמירת סשן אסינכרונית יכולה לגרום לאפליקציה שלכם לראות נתוני סשן לא עדכניים. עם זאת, ברוב האפליקציות היתרון של השהיה נמוכה עולה בהרבה על הסיכון. |
<auto-id-policy> |
זה שינוי אופציונלי. אם
הגדרתם מזהים של ישויות באופן אוטומטי, תוכלו לשנות את השיטה
שבה נעשה שימוש על ידי הגדרת מדיניות המזהים האוטומטיים. אלה האפשרויות התקינות:
|
<automatic-scaling> |
זה שינוי אופציונלי. הסבר מלא מופיע בקטע בנושא שינוי גודל אוטומטי. |
<basic-scaling> |
זה שינוי אופציונלי. הסבר מלא מופיע בקטע שינוי גודל בסיסי. |
<env-variables> |
זה שינוי אופציונלי.
בקובץ <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> כדי למנוע התנגשויות עם הסביבה המקומית, שרת הפיתוח לא מגדיר משתני סביבה על סמך הקובץ הזה, ונדרש שמשתני הסביבה האלה כבר יוגדרו בסביבה המקומית לערכים תואמים. export DEFAULT_ENCODING="UTF-8" dev_appserver war כשפורסים את האפליקציה ב-App Engine, הסביבה נוצרת עם המשתנים האלה שכבר מוגדרים. כדי לקבוע כמה זמן חיבור נשאר בלי פעילות בלי העברת נתונים לפני שהלקוח סוגר אותו, צריך להגדיר זמן קצוב לתפוגה של חוסר פעילות באמצעות התחביר הבא: <env-variables> <env-var name="APPENGINE_API_CALLS_IDLE_TIMEOUT_MS" value="TIMEOUT_IN_MS" /> </env-variables> מחליפים את כדי להתאים למועד האחרון של 60 שניות לבקשה כוללת או לאחזור כתובת URL,
מגדירים את הערך ל- הגדרת הזמן הקצוב לתפוגה של חוסר פעילות לא זהה לזמן הקצוב הכולל לתפוגה של בקשה לצורך שינוי גודל, או לזמן הקצוב לתפוגה של URL Fetch API שמוגדר באמצעות |
<inbound-services> |
זה שינוי אופציונלי.
כדי שאפליקציה תוכל לקבל אימייל, צריך להגדיר אותה כך שהשירות יופעל.
כדי להפעיל את השירות באפליקציית Java, צריך לכלול קטע השירות הנכנס הבא זמין:
|
<instance-class> |
זה שינוי אופציונלי. גודל מחלקת המופעים של המודול הזה. אלה המחלקות של המופעים שזמינות כשמציינים אפשרויות שונות של שינוי גודל:
|
<manual-scaling> |
זה שינוי אופציונלי. הסבר מלא זמין בקטע שינוי גודל ידני. |
<precompilation-enabled> |
זה שינוי אופציונלי. App Engine משתמש בתהליך של "קומפילציה מראש" עם קוד הבייטים של Java באפליקציה כדי לשפר את הביצועים של האפליקציה בסביבת זמן הריצה של Java. קוד שעבר קומפילציה מראש פועל בדיוק כמו הבייטקוד המקורי.
אם מסיבה כלשהי אתם מעדיפים שהאפליקציה לא תשתמש בהידור מראש, אתם יכולים להשבית את האפשרות הזו על ידי הוספת הקוד הבא לקובץ <precompilation-enabled>false</precompilation-enabled> |
<module> |
הערה: השמות של המודולים הם עכשיו Services, והשירותים עדיין מוצהרים בקובצי חובה אם יוצרים שירות. אופציונלי לשירות ברירת המחדל. לכל שירות ולכל גרסה צריך להיות שם. שם יכול להכיל מספרים, אותיות ומקפים. השם לא יכול להיות ארוך מ-63 תווים, הוא לא יכול להתחיל או להסתיים במקף, והוא לא יכול להכיל את המחרוזת `-dot`. צריך לבחור שם ייחודי לכל שירות ולכל גרסה. אל תשתמשו באותם שמות בשירותים ובגרסאות שונים. אפשר לעיין גם בשירות. |
<public-root> |
זה שינוי אופציונלי.
ערך ברירת המחדל
לדוגמה, הפקודה הבאה תמפה את נתיב כתובת ה-URL
<public-root>/static</public-root> |
<resource-files> |
זה שינוי אופציונלי. אפשר לגשת לקבצים שמפורטים ברכיב
רכיב
קובצי משאבים של App Engine נקראים באמצעות |
<runtime> |
כדי להשתמש בגרסה העדכנית ביותר של Java שנתמכת, צריך לציין את הערך הזה עם הערך
<runtime>java25</runtime> |
<service> |
השירותים נקראו בעבר מודולים. הגדרת שירות באופן הבא:
|
<service-account> |
זה שינוי אופציונלי. רכיב <service-account>[SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com</service-account> |
<sessions-enabled> |
זה שינוי אופציונלי. App Engine כולל הטמעה של סשנים באמצעות ממשק הסשן של servlet. ההטמעה מאחסנת את נתוני הסשן ב-Datastore לצורך שמירה, ומשתמשת גם ב-memcache כדי להגביר את המהירות. בדומה לרוב מאגרי ה-servlet האחרים, מאפייני הסשן שמוגדרים באמצעות `session.setAttribute()` במהלך הבקשה נשמרים בסוף הבקשה.
התכונה הזו מושבתת כברירת מחדל. כדי להפעיל את האפשרות, מוסיפים את השורה הבאה אל
<sessions-enabled>true</sessions-enabled>
ההטמעה יוצרת ישויות Datastore מסוג
הערה: מכיוון ש-App Engine מאחסן נתוני סשן ב-Datastore וב-memcache, כל הערכים שמאוחסנים בסשן צריכים להטמיע את הממשק
במאמר בנושא רכיב
|
<ssl-enabled> |
זה שינוי אופציונלי. כברירת מחדל, כל משתמש יכול לגשת לכל כתובת URL באמצעות HTTP או HTTPS. אפשר להגדיר אפליקציה כך שיידרש HTTPS לכתובות URL מסוימות בקובץ תיאור הפריסה. מידע נוסף
אם רוצים לאסור את השימוש ב-HTTPS באפליקציה, צריך להוסיף את השורה הבאה לקובץ <ssl-enabled>false</ssl-enabled> בסביבת זמן הריצה של Java, אין אפשרות להשבית את השימוש ב-HTTPS בחלק מנתיבי כתובות ה-URL ולא באחרים. |
<static-error-handlers> |
זה שינוי אופציונלי.
כשמתרחשות שגיאות מסוימות, App Engine מציג דף שגיאה גנרי. אתם יכולים להגדיר את האפליקציה כך שתציג קובץ סטטי מותאם אישית במקום דפי השגיאה הכלליים האלה, בתנאי שנתוני השגיאה המותאמים אישית קטנים מ-10 קילובייט. אפשר להגדיר קבצים סטטיים שונים שיוצגו לכל קוד שגיאה נתמך. כדי לעשות זאת, צריך לציין את הקבצים בקובץ <static-error-handlers> <handler file="default_error.html" /> <handler file="over_quota.html" error-code="over_quota" /> </static-error-handlers> אזהרה: חשוב לוודא שהנתיב לקובץ תגובת השגיאה לא חופף לנתיבים של קובצי handler סטטיים.
כל ערך
השדה
אפשר גם לציין |
<static-files> |
זה שינוי אופציונלי.
רכיב
רכיב
<static-files> <include path="/my_static-files" > <http-header name="Access-Control-Allow-Origin" value="http://example.org" /> </include> </static-files> |
<system-properties> |
זה שינוי אופציונלי. בקובץ <system-properties> <property name="myapp.maximum-message-length" value="140" /> <property name="myapp.notify-every-n-signups" value="1000" /> <property name="myapp.notify-url" value="http://www.example.com/signupnotify" /> </system-properties> <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> זה שינוי אופציונלי. אתם יכולים להגדיר מחבר HTTP כדי לשפר את השימוש במעבד ובזיכרון. אם האפליקציה שלכם מבצעת אינטראקציה עם פעולות של Datastore או של Task Queues, כדאי להגדיר מעקב כדי לעקוב אחרי ההשפעות על הביצועים וההתנהגות אחרי הפעלת התכונה הזו. <system-properties> <property name="appengine.use.httpconnector" value="true"/> </system-properties> זה שינוי אופציונלי. אפשר להגדיר את זמן הריצה הבסיסי של Java 17 כך שיפעל ב-EE 8, את Java 21 ב-EE 10 או את Java 25 ב-EE 11 באמצעות מאפיין המערכת הבא. מידע נוסף על תמיכה ב-EE זמין במאמר שדרוג Java בגרסה תואמת של Enterprise Edition (EE). <system-properties> <property name="appengine.use.EE11" value="true"/><!--only for Java 25--> </system-properties> <system-properties> <property name="appengine.use.virtualthreads" value="true"/> </system-properties> |
<url-stream-handler> |
זה שינוי אופציונלי. הערכים האפשריים הם ערך ברירת המחדל הוא אם מגדירים את <url-stream-handler>urlfetch</url-stream-handler> |
<version> |
הרכיב
שמות הגרסאות צריכים להתחיל באות, כדי להבדיל אותם ממופעים מספריים שתמיד מצוינים על ידי מספר. כך נמנעת דו-משמעות בכתובות URL כמו |
<warmup-requests-enabled> |
זה שינוי אופציונלי. ברירת מחדל: true. בקשות חימום מופעלות כברירת מחדל באפליקציות Java.
אם מפעילים בקשות הפעלה, התשתית של App Engine שולחת בקשות GET אל
כדי להשבית את בקשות החימום, מציינים <warmup-requests-enabled>false</warmup-requests-enabled> |
<vpc-access-connector> |
זה שינוי אופציונלי.
הגדרת האפליקציה לשימוש במחבר של חיבור לרשת (VPC) מאפליקציית serverless, כדי לאפשר לאפליקציה לשלוח בקשות למשאבים פנימיים ברשת ה-VPC. מציינים את השם המלא של המחבר ברכיב <vpc-access-connector>
<name>projects/[PROJECT_ID]/locations/[REGION]/connectors/[CONNECTOR_NAME]</name>
</vpc-access-connector>מידע נוסף זמין במאמר התחברות למשאבים פנימיים ברשת VPC. |
שינוי גודל של אלמנטים
בטבלה הבאה מפורטות האפשרויות להגדרת האופן שבו האפליקציה שלכם צריכה להתרחב.
השוואה בין תכונות הביצועים של סוגי ההרחבה
| רכיב | תיאור |
|---|---|
<automatic-scaling> |
זה שינוי אופציונלי. כברירת מחדל, המערכת מניחה שמתבצעת התאמה אוטומטית לעומס, עם סוג ברירת מחדל של מופע
רכיב האלמנט הזה יכול להכיל את האלמנטים הבאים:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <instance-class>F2</instance-class> <automatic-scaling> <target-cpu-utilization>0.65</target-cpu-utilization> <min-instances>5</min-instances> <max-instances>100</max-instances> <max-concurrent-requests>50</max-concurrent-requests> </automatic-scaling> </appengine-web-app> |
<basic-scaling> |
זה שינוי אופציונלי.
רכיב האלמנט הזה יכול להכיל את האלמנטים הבאים:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <instance-class>B8</instance-class> <basic-scaling> <max-instances>11</max-instances> <idle-timeout>10m</idle-timeout> </basic-scaling> </appengine-web-app> |
<manual-scaling> |
זה שינוי אופציונלי.
רכיב האלמנט הזה יכול להכיל את האלמנטים הבאים:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <instance-class>B8</instance-class> <manual-scaling> <instances>5</instances> </manual-scaling> </appengine-web-app> |
אלמנטים של Staging
חלק גדול מהעבודה שמתבצעת במהלך פריסה מתרחש באופן מקומי בשלב הכנה שנקרא העברה לבמה, שבו קובצי JAR מורכבים, קובצי JSP עוברים קומפילציה וכן הלאה. אפשר גם להגדיר חלקים מסוימים בהתנהגות של הסביבה הזמנית באמצעות רכיבים של הסביבה הזמנית בקובץ ההגדרות של האפליקציה. רוב האפליקציות יופעלו בהצלחה בלי שתצטרכו להגדיר ידנית את התנהגות ההפצה. אם האפליקציה לא נפרסת, יכול להיות שתצטרכו להגדיר את הסביבה הזמנית באמצעות האפשרויות שמופיעות בטבלה הבאה.
| רכיב | תיאור |
|---|---|
<staging> |
זה שינוי אופציונלי. ברוב האפליקציות אין צורך לשנות את התנהגות ברירת המחדל. רכיב ההכנה מאפשר לציין הגדרת הכנה ספציפית אם נדרש כזה לצורך פריסה. האלמנט הזה יכול להכיל את האלמנטים הבאים:
לדוגמה:
<staging>
<delete-jsps>false</delete-jsps>
</staging>
|
ברירות מחדל של אפשרויות ההעברה לסביבת הפיתוח
הגדרות ברירת המחדל לאפשרויות ההעברה לבמה משתנות בהתאם לכלי שבו משתמשים: כלי שמבוסס על Google Cloud SDK, כמו ה-CLI של gcloud, או תוספים שמבוססים על Google Cloud SDK: Maven, Gradle או IntelliJ.
| רכיב Staging | הגדרות ברירת מחדל שמבוססות על App Engine SDK – | ברירות מחדל שמבוססות על Google Cloud SDK |
|---|---|---|
enable-jar-splitting |
false |
true |
jar-splitting-excludes |
לא רלוונטי | לא רלוונטי |
disable-jar-jsps |
false |
false |
enable-jar-classes |
false |
true. זה יכול להשפיע על סדר טעינת המחלקות, לכן אם האפליקציה שלכם תלויה בסדר מסוים באמצעות ברירת המחדל הקודמת false, אתם יכולים להגדיר את זה ל-false. |
delete-jsps |
false |
true |
compile-encoding |
utf-8 |
utf-8 |
תחביר של הכללה והחרגה
תבניות נתיבים מצוינות באמצעות אפס או יותר רכיבי <include> ו-<exclude>. בתבנית, '*' מייצג אפס או יותר מכל תו בשם של קובץ או ספרייה, ו-** מייצג אפס או יותר ספריות בנתיב. קבצים וספריות שתואמים לתבניות <exclude> לא יועלו כשפורסים את האפליקציה ב-App Engine. עם זאת, האפליקציה עדיין תוכל לגשת לקבצים ולספריות האלה כשהיא פועלת בשרת הפיתוח המקומי.
רכיב <include> מבטל את התנהגות ברירת המחדל של הכללת כל הקבצים. רכיב <exclude> חל אחרי כל התבניות של <include> (וגם אחרי ברירת המחדל אם לא סופק <include> מפורש).
בדוגמה הבאה מוצג איך להגדיר את כל הקבצים png כקבצים סטטיים (חוץ מאלה שבספרייה data/ ובכל תיקיות המשנה שלה):
<static-files>
<include path="/**.png" />
<exclude path="/data/**.png" />
</static-files>
אפשר גם להגדיר כותרות HTTP לשימוש בתגובה לבקשות למשאבים סטטיים.
<static-files>
<include path="/my_static-files" >
<http-header name="Access-Control-Allow-Origin"
value="http://example.org" />
</include>
</static-files>
סוגי MIME לקבצים סטטיים
כברירת מחדל, קבצים סטטיים מוגשים באמצעות סוג MIME שנבחר על סמך הסיומת בשם הקובץ. אתם יכולים לשייך סוגי MIME מותאמים אישית לתוספי שמות קבצים עבור קבצים סטטיים באמצעות רכיבי mime-mapping ב-web.xml.
פסק זמן ב-URLFetch
אפשר להגדיר מועד אחרון לכל בקשת URLFetch. כברירת מחדל, הדדליין לאחזור הוא 5 שניות.
אפשר לשנות את ברירת המחדל הזו על ידי הכללת ההגדרה הבאה בקובץ ההגדרות appengine-web.xml. מציינים את הזמן הקצוב לתפוגה בשניות:
<system-properties>
<property name="appengine.api.urlfetch.defaultDeadline" value="10"/>
</system-properties>