פתרון בעיות בפריסה ב-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.

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

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

שגיאת ערך לא חוקי כשמבצעים פריסה בהגדרת 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

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

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

הבנייה נכשלת כשמריצים אפליקציית Node.js

יכול להיות שיתרחשו כשלים בבנייה כשפורסים אפליקציית Node.js.

כברירת מחדל, סביבת זמן הריצה של Node.js תבצע את הפקודה npm run build אם יזוהה סקריפט build בקובץ package.json. הדבר עלול לגרום להתנהגויות בלתי צפויות כמו בנייה ארוכה או שגיאות של חוסר זיכרון.

כדי לפתור את הבעיה, צריך לציין את NODE_ENV=development בקובץ app.yaml כדי לוודא שלביצוע יש את כל התלויות הנדרשות.

למרות השגיאה, אפשר להכריח הפקה על ידי ציון NODE_ENV: 'production' בקטע build-env-variables בקובץ app.yaml:

  build_env_variables:
    NODE_ENV: 'production'

מידע נוסף זמין במאמר בנושא ביצוע שלבי build בהתאמה אישית במהלך הפריסה.