פתרון בעיות בפריסה של הגדרות Cloud Endpoints

בדף הזה מוסבר איך לפתור בעיות שאתם עשויים להיתקל בהן כשאתם פורסים את ההגדרה של Cloud Endpoints. הודעות השגיאה שמוצגות לכם מכילות מידע שספציפי לפרויקט שלכם. לדוגמה, יכול להיות שתראו הודעת שגיאה שכוללת את מזהה הפרויקט. בדף הזה יוצגו ערכי placeholder כמו YOUR_PROJECT_ID.

אחרי כל שלב, מריצים שוב את הפקודה gcloud endpoints services deploy כדי לבדוק אם השגיאה נפתרה.

אי אפשר להמיר להגדרת שירות

ERROR: unknown location: http: In path template '[PATH]': unexpected end of input '/'.'

השגיאה הזו מוצגת אם נתיב אחד או יותר במסמך OpenAPI כולל תו של קו נטוי בסוף (/). כדי לפתור את הבעיה, מסירים את הקו הנטוי בסוף כל הנתיבים. לדוגמה, קטע הקוד הבא במסמך OpenAPI יוביל לשגיאה הזו:

paths:
  "/echo/":
    post:
      description: "Echo back a given message."

כדי לפתור את הבעיה, מסירים את קו הנטייה האחורי מ-/echo/:

paths:
  "/echo":
    post:
      description: "Echo back a given message."

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

ERROR: (gcloud.endpoints.services.deploy) PERMISSION_DENIED:
Not allowed to get project settings for project YOUR_PROJECT_ID

  1. מבצעים שוב אימות באמצעות ה-CLI של gcloud כדי לוודא שהאימות בוצע באמצעות חשבון שיש לו הרשאה לגשת לפרויקט שמוצג בהודעת השגיאה:
    gcloud auth login

    תיפתח כרטיסייה חדשה בדפדפן ותתבקשו לבחור חשבון.

  2. מוודאים שמזהה הפרויקט שמוצג בהודעת השגיאה תואם לפרויקט Google Cloud שרוצים לפרוס בו את ההגדרה של Endpoints:
    gcloud projects list
  3. מוודאים שמזהה הפרויקט הנכון מוגדר ב-CLI של gcloud בתור הפרויקט הנוכחי:
    gcloud config set project YOUR_PROJECT_ID

למתקשר אין הרשאה

ERROR: (gcloud.endpoints.services.deploy) PERMISSION_DENIED:
Caller does not have permission 'servicemanagement.services.create' on project YOUR_PROJECT_ID

כשפורסים לראשונה את הגדרת ה-Endpoints,‏ Service Management יוצר שירות מנוהל עבור ה-API. כדי ליצור שירות מנוהל, צריך לפחות תפקיד עורך ברמת הפרויקט. אחרי ש-Service Management יוצר את השירות המנוהל, ההרשאות המינימליות שנדרשות לפריסה מחדש של הגדרת Endpoints הן ההרשאות שמוגדרות בתפקיד עריכת הגדרות שירות (roles/servicemanagement.configEditor) בשירות. מידע נוסף מופיע במאמר בנושא הענקת גישה ל-API.

אי אפשר לאמת את הבעלות על שם הדומיין

ERROR: (gcloud.endpoints.services.deploy) PERMISSION_DENIED:
Ownership for domain name YOUR_DOMAIN_NAME on project YOUR_PROJECT_ID cannot be verified

  • אם הגדרתם דומיין בהתאמה אישית (למשל example.com) בשדה host של מסמך OpenAPI, אתם צריכים לאמת את שם הדומיין לפני שתוכלו לפרוס את מסמך OpenAPI.
  • אם אתם משתמשים בדומיין cloud.goog, ודאו שהערך בשדה host הוא בפורמט הבא ושמזהה הפרויקט נכון:
    API_NAME.endpoints.YOUR_PROJECT_ID.cloud.goog
  • אם אתם משתמשים בדומיין appspot.com (נתמך רק ב-App Engine), ודאו שהשדה host הוא בפורמט הבא, ומזהה הפרויקט נכון:
    YOUR_PROJECT_ID.appspot.com

פתרון בעיות אחרות

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

gcloud --verbosity=debug endpoints services deploy openapi.yaml

המאמרים הבאים