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

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

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

שגיאות הרשאה

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

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

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

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

כדי להבין למה הקצאה של התפקיד 'App Engine Deployer' (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 Deployer ‏ (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 לחשבון השירות שבו השתמשתם כדי לפרוס את האפליקציה.

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

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

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

כדי לפתור את הבעיה, צריך לוודא שלמשתמש או לחשבון השירות שמשמשים לפריסה יש את התפקידים Serverless VPC Access User ו-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 Service Agent ו-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 ברשת המשנה שנבחרה.