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

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

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

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

ERROR: (gcloud.endpoints.services.deploy) INVALID_ARGUMENT:
Cannot convert to service config. http: undefined field <unknown> on message <RequestType>

בודקים את הקובץ .proto אם יש שדות לא תואמים בין הודעות מאגר אחסון לפרוטוקולים לבין מיפויים של המרת קודים.

לדוגמה, הקוד הבא בקובץ .proto יוצר את השגיאה הזו. אפשרות המיפוי ב-Unary מציינת שדה בשם undefined שלא מופיע בהגדרת ההודעה Request.

rpc Unary(Request) Response {
  option (google.api.http) { get : "/{undefined}" };
}

message Request {
  string defined = 1;
}

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

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) שהוגדר בשדה name בקובץ api_config.yaml, אתם צריכים לאמת את שם הדומיין לפני שתוכלו לפרוס את הגדרת השירות.
  • אם אתם משתמשים בדומיין cloud.goog, ודאו שהערך בשדה name הוא בפורמט הבא ושמזהה הפרויקט נכון:
    API_NAME.endpoints.YOUR_PROJECT_ID.cloud.goog

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

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

gcloud --verbosity=debug endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yaml

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