2016-08-03 58 views
1

有人可以幫助我從App Engine應用程序訪問大型查詢嗎?從App Engine應用程序訪問大型查詢表的無效憑證

我已經完成以下步驟 -

創建一個App Engine項目。

在/ lib中安裝了google-api-client,oauth2client依賴項(etc)。

通過雲控制檯爲App Engine項目啓用Big Query API。

創建了一些'Application Default Credentials'('Service Account Key')[JSON]並將其保存到App Engine應用程序的根目錄。

創建一個「大查詢服務資源」按以下 -

def get_bigquery_service(): 
    from googleapiclient.discovery import build 
    from oauth2client.client import GoogleCredentials 
    credentials=GoogleCredentials.get_application_default() 
    bigquery_service=build('bigquery', 'v2', credentials=credentials) 
    return bigquery_service 

驗證了資源存在 -

<googleapiclient.discovery.Resource object at 0x7fe758496090> 

試着用以下的(專案編號來查詢資源是短App Engine應用程序的名稱) -

bigquery=get_bigquery_service() 
bigquery.tables().list(projectId=#{ProjectId}, 
        datasetId=#{DatasetId}).execute() 

返回以下內容 -

<HttpError 401 when requesting https://www.googleapis.com/bigquery/v2/projects/#{ProjectId}/datasets/#{DatasetId}/tables?alt=json returned "Invalid Credentials"> 

任何關於步驟的想法我可能有錯誤或在這裏失蹤?整個AUTH過程似乎是一場噩夢,相當在與App Engine的/ PaaS的易用性,使用精神:-(

賠率謝謝。

回答

1

行,所以儘管是在一般谷歌雲風扇,這是絕對最糟糕的事情,我已經不幸不得不在一段時間工作。差/不一致/不存在的文件,複雜性,錯誤等,如果你可以避免!

1)確保你的App引擎'默認服務帳戶'存在

https://console.cloud.google.com/apis/dashboard?project=XXX&duration=PTH1

只有在不存在的情況下,您纔可以選擇創建默認服務帳戶。如果您意外刪除了它,您將需要一個新項目;你不能重新創建它。

How to recover Google App Engine's "default service account"

您可能需要創建JSON憑據的默認設置,但你不需要把它們作爲項目的一部分。

您不需要爲Big Query或其他方式創建任何其他服務帳戶。

2)安裝谷歌-API-蟒的客戶端和應用修復

pip install -t lib google-api-python-client 

假設這安裝oath2client 3.0。x,則在測試你會得到以下投訴:

File "~/oauth2client/client.py", line 1392, in _get_well_known_file 
default_config_dir = os.path.join(os.path.expanduser('~'), 
File "/usr/lib/python2.7/posixpath.py", line 268, in expanduser 
import pwd 
File "~/google_appengine-1.9.40/google/appengine/tools/devappserver2/python/sandbox.py", line 963, in load_module 
raise ImportError('No module named %s' % fullname) 
ImportError: No module named pwd 

,你可以通過改變修復〜/ oauth2client/client.py [1392線來自:

os.path.expanduser('~') 

到:

os.env("HOME") 

和加入以下的app.yaml:

env_variables: 
    HOME: '/tmp' 

醜陋但有作用。

3)下載SDK GCloud從控制檯登錄

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

gcloud auth login 

這裏的問題是,App Engine的dev_appserver.py不包括任何大查詢複製(natch);所以當你與大型查詢表交互時,它就是你正在玩的產品數據;你需要登錄才能訪問。

回想起來很明顯,但記錄不完整。

4)在App Engine控制檯中啓用Big Query API;創建一個大的查詢專案編號

https://console.cloud.google.com/apis/dashboard?project=XXX&duration=PTH1

https://bigquery.cloud.google.com/welcome/XXX

5)測試

from oauth2client.client import GoogleCredentials 
credentials=GoogleCredentials.get_application_default() 
from googleapiclient.discovery import build 
bigquery=build('bigquery', 'v2', credentials=credentials) 
print bigquery.datasets().list(projectId=#{ProjectId}).execute() 

[或類似]

祝你好運!