פתרון בעיות בפריסה ב-App Engine

יכולות להיות כמה סיבות לשגיאות פריסה ב-App Engine, כולל הרשאות חסרות, שינויים במדיניות הארגון ובעיות בהגדרות האפליקציה.

בדף הזה מתוארות שגיאות נפוצות בפריסה ב-App Engine ושיטות לפתרון בעיות שקשורות אליהן:

שגיאות הרשאה

בקטע הזה מתוארות שגיאות שעשויות להתרחש כשפורסים את האפליקציה בגלל הרשאות חסרות בחשבון או שינויים במדיניות הארגון.

כדי לזהות את החשבון הפעיל שבו אתם משתמשים כדי לגשת ל-Google Cloud CLI ולכלים אחרים ב Google Cloud הפלטפורמה, מבצעים אחת מהפעולות הבאות:

  • אם השתמשתם ב-Google Cloud CLI לפריסה, מריצים את הפקודה gcloud auth list.

  • אם ביצעתם פריסה מ-IDE, תוכלו לראות את ההגדרות של התוסף Cloud Tools.

כדי להבין למה הקצאה של התפקיד 'פריסת App Engine' (roles/appengine.deployer) בלבד לא מספיקה במקרים מסוימים, אפשר לעיין במאמר בנושא תפקידים ב-App Engine.

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

פריסה נכשלת בפרויקטים חדשים

יכול להיות שתופיע השגיאה הבאה כשפורסים את האפליקציה בפעם הראשונה בפרויקט חדש:

ERROR: (gcloud.app.deploy) Error Response: [13] Failed to create cloud build: com.google.net.rpc3.client.RpcClientException:..........invalid bucket "staging.PROJECT_ID.appspot.com"; service account PROJECT_ID@appspot.gserviceaccount.com does not have access to the bucket

כדי לפתור את הבעיה, צריך להעניק לחשבון השירות שמוגדר כברירת מחדל את התפקיד אדמין אחסון (roles/storage.admin). מידע נוסף זמין במאמר בנושא אחסון יומני בנייה בדלי שנוצר על ידי משתמש.

אם כבר הענקתם את התפקיד 'אדמין של Storage', יחד עם התפקידים הנדרשים האחרים על סמך שגיאות הרשאה שונות שנתקלתם בהן במהלך הפריסה, ועדיין לא הצלחתם לפרוס את האפליקציה, יכול להיות שהסיבה לכך היא השינויים הבאים במדיניות הארגון:

כדי לפתור את הבעיה:

למתקשר אין הרשאה לגשת לפרויקט

השגיאה הבאה מתרחשת אם לחשבון השירות אין הרשאה לפרוס אפליקציות בפרויקט הנוכחי:

User EMAIL_ADDRESS does not have permission to access project PROJECT_ID (or it may not exist).

כדי לפתור את הבעיה, צריך להעניק לחשבון השירות את התפקיד פריסה ב-App Engine (roles/appengine.deployer).

אחזור המטא-נתונים מהמאגר נכשל

השגיאה הבאה מתרחשת אם משתמשים בפקודה gcloud app deploy מחשבון שירות שאין לו את התפקיד Storage Admin (אדמין אחסון) (roles/storage.admin):

Failed to fetch metadata from the registry, with reason: generic::permission_denied

כדי לפתור את הבעיה, צריך להקצות לחשבון השירות את התפקיד 'אדמין אחסון'.

לחשבונות השירות צריכות להיות הרשאות לגבי התמונה

השגיאה הבאה מתרחשת כשפורסים את האפליקציה:

The App Engine appspot and App Engine flexible environment service accounts must
have permissions on the image IMAGE_NAME

השגיאה הזו מתרחשת בגלל אחת מהסיבות הבאות:

  • לחשבון השירות שמוגדר כברירת מחדל ב-App Engine אין את התפקיד 'צפייה באובייקט אחסון' (roles/storage.objectViewer).

    כדי לפתור את הבעיה הזו, צריך להקצות לחשבון השירות את התפקיד 'צפייה באובייקט אחסון'.

  • בפרויקט שלכם יש גבולות גזרה לשירות של VPC Service Controls שמגביל את הגישה ל-Cloud Storage API באמצעות רמות גישה.

    כדי לפתור את הבעיה הזו, צריך להוסיף את חשבון השירות שבו אתם משתמשים כדי לפרוס את האפליקציה ל-accessPolicies של גבולות גזרה לשירות המתאים ב-VPC Service Controls.

  • אחרי 15 במאי 2024, מאגר Artifact Registry יארח תמונות לדומיין gcr.ioבפרויקטים Google Cloud שלא נעשה בהם שימוש קודם ב-Container Registry. אם פורסים אפליקציה קיימת בפרויקט חדש שנוצר אחרי התאריך הזה, יכול להיות שלחשבון השירות לא יהיו ההרשאות הנדרשות לפריסת האפליקציה. כדי להעניק את ההרשאות הנדרשות, אפשר לעיין במאמר בנושא פריסה ב-App Engine.

היצירה של Cloud Build נכשלה

השגיאה הבאה מתרחשת אם משתמשים בפקודה gcloud app deploy מחשבון שירות שאין לו את התפקיד Cloud Build Editor (עריכה ב-Cloud Build) ‏(roles/cloudbuild.builds.editor).

Failed to create cloud build: Permission denied

כדי לפתור את הבעיה הזו, צריך להקצות לחשבון השירות את התפקיד 'עריכה' ב-Cloud Build.

שגיאה באחזור האפליקציה

השגיאה הבאה מתרחשת כשחשבון השירות שבו השתמשתם כדי לפרוס את האפליקציה לא כולל את התפקיד App Engine Deployer.

Permissions error fetching application apps/app_name. Please make sure you are using the correct project ID and that you have permission to view applications on the project.

If you are running Google Cloud CLI version 328 or later, the following error occurs
when you deploy your app:

make sure that you have permission to view applications on the project and that
SERVICE_ACCOUNT has the App Engine Deployer (roles/appengine.deployer) role.

כדי לפתור את הבעיה, צריך להקצות את התפקיד App Engine Deployer (פורס ב-App Engine) לחשבון השירות שבו השתמשתם כדי לפרוס את האפליקציה.

שגיאה בהטמעה של שירות עם מחבר של חיבור לרשת (VPC) מאפליקציית serverless

השגיאה הבאה מתרחשת כשמשתמש או חשבון שירות מנסים לפרוס את האפליקציה באמצעות מחבר Serverless VPC Access, אבל אין להם את ההרשאות הנדרשות:

Please ensure you have [compute.globalOperations.get] on the service project

כדי לפתור את הבעיה הזו, צריך לוודא שלמשתמש או לחשבון השירות שמשמשים לפריסה יש את התפקידים משתמש של מחברי חיבור לרשת (VPC) מאפליקציית serverless וCompute Viewer IAM.

תם פרק הזמן שהוקצב להמתנה עד שהתשתית של האפליקציה תהיה תקינה

השגיאה הבאה מתרחשת כשפורסים את האפליקציה:

Timed out waiting for the app infrastructure to become flex_await_healthy

יש כמה גורמים לשגיאה הזו, למשל הרשאות חסרות, שגיאות בקוד, מחסור במעבד או בזיכרון או בדיקות תקינות שנכשלו.

כדי לפתור את הבעיה, צריך לבדוק את הסיבות האפשריות הבאות:

  1. בודקים אם מדיניות הארגון של הפרויקט מגבילה את הגישה לכתובות IP חיצוניות. מידע נוסף זמין במאמר בנושא בעיות מוכרות בסביבה גמישה של App Engine.

  2. מוודאים שהקציתם את התפקידים הבאים לחשבון השירות שבו אתם משתמשים כדי להריץ את האפליקציה (בדרך כלל חשבון השירות שמוגדר כברירת מחדל, app-id@appspot.gserviceaccount.com):

  3. אם לחשבון השירות אין את התפקידים הנדרשים, צריך להעניק לו את התפקידים שחסרים לפי שגיאות הפריסה.

  4. אם אתם מבצעים פריסה בהגדרת VPC משותף ומגדירים instance_tag בקובץ app.yaml, כדאי לעיין במאמר שגיאת ערך לא חוקי במהלך פריסה בהגדרת VPC משותף כדי לפתור את הבעיה.

שגיאה בהפעלה מחדש של מופעים בגרסאות פעילות

השגיאה הבאה מתרחשת כשפורסים את האפליקציה:

error when restarting the instance under the running versions

החל ממאי 2024, Google Cloud אוכף את מדיניות הארגון מאובטח כברירת מחדל בכל הארגונים החדשים. לפי המדיניות הזו, בכל המקרים שבהם נוצרות מכונות וירטואליות בפרויקטים חדשים, צריך להפעיל את VM Manager. בפרויקטים חדשים וקיימים, המגבלה הזו מונעת עדכוני מטא-נתונים שמשביתים את VM Manager ברמת הפרויקט או המכונה.

כדי לפתור את הבעיה, צריך להשבית את אילוץ המדיניות הארגונית Require OS Config ‏ (constraints/compute.requireOsConfig).

אם הבעיה נמשכת, צריך גם להשבית את מדיניות הארגון הבאה, שאולי הופעלה ברמת הפרויקט או ברמת הארגון:

ההרשאה הנדרשת compute.firewalls.list

השגיאה הבאה מתרחשת כשפורסים את האפליקציה ברשת VPC משותפת:

Request to https://compute.googleapis.com/compute/v1/projects/projects/PROJECT_ID/global/firewalls?key failed, details: Required 'compute.firewalls.list' permission for 'projects/PROJECT_ID'

השגיאה הזו מתרחשת אם לחשבונות השירות הבאים בפרויקט המארח אין את התפקיד Compute Network User ‏ (roles/compute.networkUser):

כדי לפתור את הבעיה הזו, צריך להעניק את התפקיד Compute Network User לחשבונות השירות סוכן שירות של Google APIs ו-App Engine flexible environment Service Agent בפרויקט המארח.

הפריסה נכשלת בגלל מגבלה של מדיניות הארגון

השגיאה הבאה מתרחשת כשפורסים אפליקציה:

ERROR: (gcloud.app.deploy) Error Response: [13] An internal error occurred while processing task /app-engine-flex/....: Request to https://compute.googleapis.com/compute/VERSION/projects/PROJECT_ID/... failed, details: Constraint constraints/compute.disableGuestAttributesAccess violated for project PROJECT_ID.

יכול להיות שהסיבה לכך היא האכיפה של האילוץ constraints/compute.disableGuestAttributesAccess כשפורסים את האפליקציה. כל האפליקציות בסביבה הגמישה של App Engine אוכפות את מדיניות הארגון הזו כברירת מחדל.

כדי לפתור את הבעיה, צריך להשבית את האילוץ constraints/compute.disableGuestAttributesAccess.

שגיאות נפוצות בהטמעה

בקטע הזה מוסבר על אסטרטגיות לפתרון בעיות שגיאות בהגדרות של האפליקציה או הפרויקט.

שגיאת ערך לא חוקי כשמבצעים פריסה בהגדרת VPC משותף

השגיאה הבאה מוצגת ב-Cloud Logging עבור מכונות וירטואליות גמישות כשמבצעים פריסה של האפליקציה:

Invalid value for field 'resource.tags.items[1]': 'aef-instance'. Duplicate
tags are not allowed: aef-instance on compute.instances.insert

זו בעיה מוכרת שבה הגדרת instance_tag בקובץ app.yaml גורמת לשגיאות כשיוצרים מופעים.

כדי לפתור את הבעיה, צריך להסיר את השדה instance_tag מהקובץ app.yaml ולפרוס מחדש.

חריגה מהמגבלה על מספר המופעים המקסימלי

השגיאה הבאה מתרחשת כשפורסים את האפליקציה:

You may not have more than 'xx' total max instances in your project.

יש מגבלה על המספר המקסימלי של מופעים שאפשר ליצור בכל פרויקט. אם חורגים מהמגבלה הזו, בקשות ליצירת מופעים נוספים נכשלות.

כדי לפתור את הבעיה, צריך להגדיר את הערך של max_instances בקובץ app.yaml לערך שקטן מהמגבלה הזו, או למחוק חלק מהשירותים או מהגרסאות כדי שהסכום של max_instances יהיה במסגרת המגבלה.

ה-Build נכשל במהלך הפריסה בלי שגיאות ביומנים

השגיאה הבאה מתרחשת כשפורסים את האפליקציה:

ERROR: (gcloud.app.deploy) Cloud build failed. Check logs at https://console.cloud.google.com/cloud-build/builds/BUILD_ID?project=PROJECT_NUMBER Failure status: UNKNOWN: Error Response: [2] Build failed; check build logs for details

אם לחצתם על הקישור בהודעת השגיאה וגיליתם שכל שלבי הבנייה הושלמו בהצלחה, אבל האפליקציה עדיין לא נבנתה, יכולות להיות לכך שתי סיבות:

כדי לפתור את הבעיה, צריך לשנות את ההגדרות הבאות של הדלי:

שגיאות בהטמעה בגרסה קיימת של App Engine

יכול להיות שתקבלו את השגיאה הבאה כשאתם פורסים לגרסה קיימת בסביבה הגמישה של App Engine:

ERROR: (gcloud.app.deploy) Error Response: [9] An internal error occurred while
processing task /app-engine-flex/flex_await_healthy/flex_await_healthy

השגיאה הזו מציינת שעדכון Deployment (פריסה) לא תקין באמצעות קובץ אימג' של Docker תקין לא תמיד מוביל ל-Deployment (פריסה) תקין. התוצאה תלויה במצב של המופעים מהפריסה הלא תקינה. למרות השגיאה, אם תספקו קובץ אימג' טוב של Docker, יכול להיות שהפריסה תהפוך בסופו של דבר לתקינה. אפשר לעדכן גרסה קיימת באמצעות קובץ אימג' חדש של Docker, אבל זה לא מומלץ. אין אפשרות לחזור לגרסה קודמת במקרה של כשל בגרסה.

שגיאה בכתובת IP פנימית במהלך פריסה בהגדרה של VPC משותף

יכול להיות שתיתקלו בשגיאה הבאה כשמבצעים פריסה להגדרה של רשת VPC משותפת בפרויקט שירות שבו נעשה שימוש בהגדרת ברירת המחדל של כתובת IP פרטית (private-ranges-only).

ERROR: (gcloud.app.deploy) Error Response: [13] An internal error occurred.

השגיאה הזו עשויה להצביע על כך שסוכן השירות של הסביבה הגמישה של App Engine בפרויקט המארח של ה-VPC המשותף לא זמין. או שסוכן השירות של סביבת App Engine הגמישה הוסר, או ש-App Engine API לא מופעל בפרויקט המארח.

כדי לפתור את הבעיה:

  1. מפעילים את App Engine API בפרויקט המארח של רשת ה-VPC המשותפת.
  2. אם App Engine API מופעל, סוכן השירות של הסביבה הגמישה של App Engine לא קיים בפרויקט. אפשר לעיין במאמר בנושא שחזור התפקיד הנדרש לסוכן השירות.

הפריסה נכשלה בגלל חוסר קישוריות ל-Google APIs

השגיאה הבאה מתרחשת כשפורסים את האפליקציה:

Your deployment has failed to become healthy in the allotted time and therefore was rolled back. If you believe this was an error, try adjusting the app_start_timeout_sec setting in the readiness_check section.

כדי לפתור את הבעיה, צריך לוודא שלרשת ה-VPC שמשויכת לאפליקציה יש נתיב סטטי מקומי עם יעד 0.0.0.0/0 וקפיצה הבאה של שער אינטרנט שמוגדר כברירת מחדל. אם אתם משתמשים בשירותים פרטיים לשימוש פנימי בלבד, אתם צריכים להפעיל PGA ברשת המשנה שנבחרה.