7

我正在使用Cloud Endpoints Frameworks(2.0.1)for Java作爲我最後一年的項目的一部分,並已迄今爲止相對成功。 我在部署到我的appspot.com域時沒有任何問題,但是,在本地部署時遇到了一些問題。com.google.api.config.ServiceConfigSupplier - 無法獲取服務的默認配置版本(僅在本地主機上)

(下面的代碼塊到我的項目-ID的任何引用是我的實際谷歌雲項目編號別名)

我有一個註釋@API類的有效OpenAPI的描述符(openapi.json)的我正在使用「gcloud服務管理部署openapi.json」部署到雲端點。 成功的命令返回:

Service Configuration [2017-02-23r0] uploaded for service [api.endpoints.<my-project-id>.cloud.goog] 

我然後映射回到config_id正確endpoints_api_service在我的app.yaml

endpoints_api_service: 
    name: api.endpoints.<my-project-id>.cloud.goog 
    config_id: 2017-02-23r0 

該服務通過使用「gcloud服務管理的gcloud CLI工具上市列表」

NAME               TITLE 
    storage-component.googleapis.com     Google Cloud Storage 
    api.endpoints.<my-project-id>.cloud.goog   api.endpoints.<my-project-id>.cloud.goog 
    etc... 

和 「gcloud服務管理CONFIGS列表--service api.endpoints.my-project-id.cloud.goog」

CONFIG_ID  SERVICE_NAME 
2017-02-23r0  api.endpoints.<my-project-id>.cloud.goog 
... other version configs 

,並在我的appspot.com域名訪問(我可以叫端點和接收正確的響應)

我試圖使用Java的行家的AppEngine插件(MVN在本地主機上部署我的項目AppEngine上:devserver),但在碼頭啓動時我被擊中但下列情況除外:

WARNING: Failed startup of context com.google.appengine.tools.development.DevAppEngineWebAppContext... 

com.google.api.config.ServiceConfigException: Failed to fetch default config version for service 'api.endpoints.<my-project-id>.cloud.goog'. No versions exist! 
at com.google.api.config.ServiceConfigSupplier.fetchLatestServiceVersion(ServiceConfigSupplier.java:155) 
.... 

部署,然後卡在試圖啓動碼頭,和被打與該錯誤消息,並重新啓動無限循環等等。任何訪問localhost:8080的嘗試都會導致a 「503:未找到服務」錯誤

我認爲我的應用程序的本地部署將能夠訪問使用「gcloud service-management deploy」部署的服務配置,方式與appspot.com相同部署可以,但情況並非如此?我收集serviceManagement.services().configs().list(my-service-name).execute()。getServiceConfigs()返回一個空的列表,但爲什麼是這個只發生在本地?

額外信息

我ENDPOINTS_SERVICE_NAME環境變量匹配 'api.endpoints.my-project-id.cloud.goog'

我注意到,有一個更新(1.0.2)對COM .google.api.config,它依賴於舊版本的com.google.api.services.servicemanagement(依賴於v1-rev14-1.22.0,最新版本爲v1-rev340-1.22 .0) 我懷疑這是問題,但我想我會提及它,因爲它包含與異常相關的類(ServiceManagement由ServiceConfigSupplier使用,它是thr由於例外)。也許他們在尋找服務配置的地方存在不一致?

我很難過tbh,這有點凌駕於我的頭上。我不喜歡刪除端點,因爲我開始喜歡它,但我們也不能真正失去我們的devserver的使用。我希望有人可以在這個問題上談一點點。

+1

你是否解決了這個問題?我正在使用Java並且有相同的問題。 –

+0

您好薩姆霍爾登,你能解決這個問題嗎?與此相關的文件最近更新了。 https://cloud.google.com/endpoints/docs/frameworks/java/quickstart-frameworks-java 還有設在這裏的樣本: https://github.com/GoogleCloudPlatform/java-docs -samples/tree/master/appengine/endpoints-frameworks-v2/backend 讓我知道!謝謝。 –

+0

@FrankNatividad我在您的鏈接中提供的快速入門之後,幾乎看到了這個確切的錯誤。 – Benjamin

回答

3

如果您已經取消了所有最近的更新,這可能與權限問題有關。 git pull此外,請使用:gcloud components update檢查您的Cloud SDK是否爲最新版本。

假設您按照https://cloud.google.com/endpoints/docs/frameworks/java/quickstart-frameworks-java中列出的說明操作。要解決此問題,您可以創建具有必要權限的服務帳戶,或使用命令gcloud auth application-default login

您可以設置使用雲SDK gcloud服務帳戶在https://cloud.google.com/sdk/docs/authorizing

請讓我知道,如果你有問題了。

至於命令gcloud auth application-default login。按照幫助說明:

獲得通過web流量的用戶訪問憑據,並把它們放入 著名的位置應用默認憑據使用它們作爲 代理的服務帳戶。

當您使用此命令時,它獲取gcloud您的Gmail帳戶的憑據。 [email protected],然後將憑據存儲在已知包含應用程序憑證的位置。

+0

這最終適用於我。我需要將第一次捲曲發送到服務中以喚醒它,並且它將返回與以前一樣的503響應。一旦它結束(你會看到日誌中有大量東西),它應該像它應該那樣工作。 –

3

這不是一個修復程序,但我能夠通過使用https://stackoverflow.com/a/41493548/1410035中的建議解決此問題。

也就是說,註釋掉ServiceManagementConfigFilter

B)註釋掉從web.xml中ServiceManagementConfigFilter,即

<!-- 
    <filter> 
     <filter-name>endpoints-api-configuration</filter-name> 
     <filter-class>com.google.api.control.ServiceManagementConfigFilter</filter-class> 
    </filter> 
--> 

<!--  
<filter-mapping> 
    <filter-name>endpoints-api-configuration</filter-name> 
    <servlet-name>EndpointsServlet</servlet-name> 
</filter-mapping> 
--> 

注意,你必須註釋掉filterfilter-mapping並且它們在文件中彼此不相鄰。

我發現我並不需要刪除鏈接答案中的'a'中提到的縮放塊。

0

它與「gradle appengineRun」一起工作,但在IntelliJ Idea項目中,我必須替換web.xml中的所有$ {endpoints.project.id}和appengine-web.xml以從IntelliJ運行/調試本地主機(從Gradle源代碼,安裝Google Cloud Tools插件,並從Tools/GoogleCloudTools /在本地App Engine Standard開發服務器上運行設置運行/調試配置)。

我的錯誤是: 無法爲服務'echo-api.endpoints。$ {endpoints.project.id} .cloud.goog'獲取默認配置版本。沒有版本存在!

cloud.google.com文檔只有Maven構建例如搖籃構建是github.com

0

另一件事記裸露是您的服務帳戶具有正確的許可,您的服務帳戶的東西看起來像下面

[project ID]@appspot.gserviceaccount.com. 

默認情況下,它是Project(編輯器),至少需要將其作爲服務控制器角色提供。

如果不見了,那麼你可以按照these instructions加回來。

相關問題