2016-04-02 104 views
1

我試圖從本地機器以Java連接到Google App Engine的數據存儲區。我不會在GAE上使用該應用程序,它將在AWS上使用。連接到Google App Engine數據存儲區

我試過

我試着用 DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();,但我認爲這是當應用程序在GAE宴請。

現在,我使用通過系統變量GOOGLE_APPLICATION_CREDENTIALS獲取的json憑證文件啓動並運行Google Storage。連接工作正常,所以我的猜測是我可能不得不做類似於存儲的東西。 我做了這樣的事情對於存儲:

HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport(); 
     JsonFactory jsonFactory = new JacksonFactory(); 
     GoogleCredential credential = GoogleCredential.getApplicationDefault(transport, jsonFactory); 

     if (credential.createScopedRequired()) { 
      Collection<String> bigqueryScopes = StorageScopes.all(); 
      credential = credential.createScoped(bigqueryScopes); 
     } 

     Storage client = new Storage.Builder(transport, jsonFactory, credential) 
       .setApplicationName("APPLICATION_NAME") 
       .build(); 

問題

所以我的問題是:我怎樣才能連接到谷歌App Engine數據存儲從谷歌應用程序引擎之外嗎?

謝謝你的幫助!

回答

3

我建議您移動到gcloud-java client library。它建立在您當前正在使用的代碼之上,並且使數據存儲和存儲工作變得更容易,儘管文檔實際上並不存在(截至2016年4月)。

這是你如何連接到使用這個庫中的數據存儲:

AuthCredentials credentials = AuthCredentials.createFor(account, key); 
DatastoreOptions options = DatastoreOptions.builder() 
     .authCredentials(credentials) 
     .projectId(projectId) 
     .namespace(NAMESPACE) 
     .build(); 
Datastore datastore = options.service(); 

同爲存儲,但StorageOptions。

提示:在GitHub中打開gcloud-java項目 - 鏈接位於前面引用的頁面上。有一個文件夾,其中包含如何使用數據存儲和存儲的示例。

+0

非常感謝您的快速答覆!該項目設法「工作」,但現在我得到一個不同的錯誤,告訴我api沒有啓用我的項目:雲數據存儲API未啓用項目PROJECT_NAME 什麼是奇怪的是,我已啓用它在api控制檯:[link](https://console.cloud.google.com/apis/library?) 您是否知道我是否需要做其他事情? 謝謝! – madube94

+0

dev上的另一個選項是使用'GOOGLE_APPLICATION_CREDENTIALS'環境變量指向從雲控制檯中的憑據選項卡生成的服務帳戶json,例如'export GOOGLE_APPLICATION_CREDENTIALS =/path/to/key.json' –

+0

我打開了一個問題: https://github.com/GoogleCloudPlatform/gcloud-java/issues/843 –

0

有了Andrei Volgin的出色的幫助,我設法能夠從Google App Engine之外的應用程序連接到Datastore。以下是我2016年4月所做的:

  • 啓用數據存儲API v1beta3。 App Engine中的默認值爲v1beta2。 https://console.cloud.google.com/apis/api/datastore.googleapis.com/overview?project=PROJECT_NAME
  • 獲取激活Datastore的服務的憑證文件。
  • 您可以設置證書存儲在系統變量文件,GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json
  • 我寫了這個代碼測試和連接工作

    DatastoreOptions options = DatastoreOptions.builder() 
         .projectId("PROJECT_NAME") 
         .authCredentials(AuthCredentials.createForJson(
           new FileInputStream("/PATH/TO/CREDENTIALS.json"))).build(); 
    Datastore datastore = options.service(); 
    Query<Entity> query = 
         Query.gqlQueryBuilder(Query.ResultType.ENTITY, "SELECT * FROM user").build(); 
    QueryResults<Entity> results = datastore.run(query); 
    while (results.hasNext()) { 
        Entity result = results.next(); 
        System.out.println(result.getString("id")); 
    } 
    
相關問題