7

私は最終年度のプロジェクトの一環としてJava用Cloud Endpoints Framework(2.0.1)を使用していますそれまでのところ比較的成功しています。 私はappspot.comドメインに展開する際に問題はありませんが、ローカルに展開する際にいくつかの問題が発生しています。com.google.api.config.ServiceConfigSupplier - サービスのデフォルト設定バージョンを取得できませんでした(ローカルホストのみ)

(次のコードブロックでの私のプロジェクト-IDへの参照は、私の実際のGoogleのクラウドプロジェクトIDの別名です)

私はどの注釈付き@APIクラスの有効なOpenAPIの記述子(openapi.json)を持っています私は、 "gcloud service-management deploy openapi.json"を使用してクラウドエンドポイントに展開しています。成功し コマンドが返す:

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

私は、このサービスは、「のgcloudサービス管理を使用してのgcloud CLIツールによって表示されて

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

私のapp.yamlに正しいendpoints_api_serviceに返さCONFIG_IDをマップリスト」

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用のMaven 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にアクセスしようとすると、 "503:サービスが見つかりません"エラー

appspot.comと同じ方法で、「gcloud service-management deploy」を使用して配備されたサービス設定に自分のアプリケーションのローカル配備がアクセスできると想定しました展開は可能ですが、そうではありませんか? ServiceConfigSupplier.getchLatestServiceVersion()のソースを見ると、そのserviceManagement.services().configs()。list(my-service-name).execute()。getServiceConfigs()は空のリストを返していますが、これはなぜですかローカルでのみ発生しますか?

追加情報

私ENDPOINTS_SERVICE_NAME環境変数マッチ 'api.endpoints.my-project-id.cloud.goog'

私は、COMへのアップデート(1.0.2)があったことに気づきました.google.api.configは数日前に作成され、古いバージョンのcom.google.api.services.servicemanagementに依存しています(v1-rev14-1.22.0に依存し、最新バージョンはv1-rev340-1.22 .0) 私はこれが問題だとは思っていませんが、例外に関連するクラスが含まれているので、私はそれを言及すると思いました(ServiceManagementはServiceConfigSupplierによって使用されます。例外のため)。おそらく、彼らがサービス設定を探している場所に矛盾がありますか?

私は非常に困惑しています。それは私の頭の上に少しです。エンドポイントを削除しなければならないのは嫌ですが、私はそれが気に入るようになっていますが、devserverの使用も失うことはありません。私は誰かがこの問題について少し光を当てることを願っています。

+1

あなたはこの問題を解決しましたか?私はJavaを使用しており、同じ問題があります。 –

+0

こんにちはSam Holdenさん、問題を解決できましたか?これに関連する文書が最近更新されました。 https://github.com/GoogleCloudPlatform/java-docs: https://cloud.google.com/endpoints/docs/frameworks/java/quickstart-frameworks-java ここにあるサンプルもあります-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を使用します。

https://cloud.google.com/sdk/docs/authorizing

でセットアップクラウドSDKののgcloudを使用してサービスアカウントをすることができます、あなたはもう質問がある場合は私に知らせてください。

コマンドはgcloud auth application-default loginです。ヘルプの説明によると:

得ますユーザアクセス資格情報ウェブの流れを経由してアプリケーションのデフォルトクレデンシャルは、サービスアカウントに としてプロキシをそれらを使用するための 有名な場所に置きます。

このコマンドを使用すると、Gmailアカウントのgcloudの認証情報が取得されます。 [email protected]を開き、アプリケーションの資格情報を含む場所に資格情報を格納します。

+0

これは結局私のために働く。私は目を覚ますために最初のカールをサービスに送る必要があり、前と同じ503の応答を返します。それが終わったら(ログに大量の情報が表示されます)、それは正常に動作します。 –

3

これは修正ではありませんが、https://stackoverflow.com/a/41493548/1410035のアドバイスを使用して問題を回避することができました。あなたはfilterとをコメントアウトする必要が

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> 
--> 

注:ServiceManagementConfigFilterをコメントアウトすなわち

filter-mappingこれらはファイル内で互いに隣り合っていません。

リンクされた回答のポイント 'a'で述べたように、スケーリングブロックを削除する必要はないことがわかりました。

0

これは "gradle appengineRun"で動作しましたが、IntelliJ Ideaプロジェクトでは、web.xmlとappengine-web.xmlの$ {endpoints.project.id}をすべてIntelliJのlocalhostを実行/デバッグするGoogle Cloud Toolsプラグインをインストールし、ツール/ GoogleCloudToolsから実行/デバッグ設定を構成する/ローカルのApp Engine標準の開発サーバーで実行する)。

エラー: サービス 'echo-api.endpoints。$ {endpoints.project.id} .cloud.goog'のデフォルト設定バージョンを取得できませんでした。バージョンはありません!

cloud.google.comドキュメントのみgithub.com

0

心の中で裸にするもう一つは、あなたのサービスアカウントが権利権限を持っているでMavenのは、Gradleのビルドがある例を構築する必要があり、あなたのサービスアカウントには、何かが、次の

[project ID]@appspot.gserviceaccount.com. 
のように見えています

デフォルトではProject(エディタ)ですが、少なくともService Controllerの役割として提供する必要があります。

それがなくなっている場合は、あなたが戻って追加するthese instructionsに従うことができますが。

関連する問題