2016-08-03 9 views
1

誰かがApp EngineアプリケーションからBig Queryにアクセスするのに役立つでしょうか? App Engineのプロジェクトを作成しApp EngineアプリケーションからBig Queryテーブルにアクセスする無効な資格情報

-

私は、次の手順を完了しています。

/libにgoogle-api-client、oauth2clientなどの依存関係がインストールされています。

Cloud Engine経由でApp EngineプロジェクトのBig Query APIを有効にしました。

「アプリケーションのデフォルトの資格情報」(「サービスアカウントキー」)[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> 

はPROJECTIDが短い(次のリソースを照会しようとしました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"> 

私が間違っている可能性がありますか、ここで不足していることの手順についての任意のアイデア?全体の認証プロセスはかなり

:-(のApp Engine/PaaSの使いやすさの精神と対立し、悪夢を思わありがとうございました。一般的にはGoogleクラウドファンにもかかわらずよう

が、これはOKです

答えて

1

1)App Engineのデフォルトサービスアカウントを確認してください。あなたのApp Engineのデフォルトサービスアカウントを確認してください。存在する

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)修正

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

これはoath2client 3.0をインストールすると仮定すると、Googleの-API-のpython-クライアントをインストールし、適用します。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)のgcloud SDKをダウンロードし、コンソールからログインして

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

gcloud auth login 

ここでの問題は、App Engineのdev_appserver.pyは、任意のビッグクエリの複製(natch)が含まれていないということです。 Big Queryテーブルと対話しているときは、再生している制作データです。アクセスするにはログインする必要があります。

逆説的ではあるが、文書化されていない。

4)App EngineコンソールでBig Query APIを有効にします。ビッグクエリPROJECTID

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

[または類似]

幸運を作成します!

関連する問題