5

https://developers.google.com/bigquery/authorization#service-accounts-appengineの指示に従って、 アプリ エンジンから BigQuery へのクエリをいくつか作成しました。

ステップ 2 で、Google Api コンソールの [Team] をクリックすると、[App Engine] > [Administration] > [Permissions] にリダイレクトされます。サービス アカウント名を電子メールとして追加し、役割として開発者を選択し ([編集可能] オプションは使用できません)、[ユーザーを招待] をクリックします。その後、「検証のためにメールが xxxxxx@appspot.gserviceaccount.com に送信されました」というメッセージが表示されます。ステータスは Pending です。どうすればメールを確認できますか?、ここにバグがあるようです...

次に、次のコードを使用してテストを行いました。

#!/usr/bin/env python
import httplib2
import webapp2
from google.appengine.api import memcache
from apiclient.discovery import build
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from oauth2client.appengine import AppAssertionCredentials 

# BigQuery API Settings
PROJECT_NUMBER        = 'XXXXXXXX' 

credentials = AppAssertionCredentials(scope='https://www.googleapis.com/auth/bigquery')
http        = credentials.authorize(httplib2.Http(memcache))
service     = build("bigquery", "v2", http=http)

class MainHandler(webapp2.RequestHandler):
    def get(self):
        query     = {'query':'SELECT word,count(word) AS count FROM publicdata:samples.shakespeare GROUP BY word;',
                     'timeoutMs':10000}
        jobRunner = service.jobs()
        reply     = jobRunner.query(projectId=PROJECT_NUMBER,body=query).execute()
        self.response.out.write(reply)

app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)

そして返信は(Googleから実行):

HttpError: <HttpError 403 when requesting https://www.googleapis.com/bigquery/v2/projects/XXXXXXXX/queries?alt=json returned "Access Denied: Job YYYYYYYY:job_e57bdde0144c495dbc864ccbfb82b704: RUN_QUERY_JOB">

localhost からテストすると、答えは次のようになります。

HttpError: <HttpError 401 when requesting https://www.googleapis.com/bigquery/v2/projects/XXXXXXXX/queries?alt=json returned "Invalid Credentials">

誰かが私を助けることができますか?:-)

4

2 に答える 2

10

xxxxxx@appspot.gserviceaccount.com をhttp://cloud.google.com/consoleのプロジェクトに追加できます。

これがすぐに簡単/より簡単になることを期待してください!


@Christian によるステップバイステップ:

  1. アプリケーションの App Engine ダッシュボードに移動し、[アプリケーションの設定] をクリックして、サービス アカウント名 (xxxxxx@appspot.gserviceaccount.com) をコピーします。
  2. http://cloud.google.com/consoleに移動します
  3. プロジェクトを選択
  4. 歯車アイコンをクリックし、チームを選択します
  5. 「メンバーを追加」をクリック
  6. サービス アカウント名を貼り付けて、can edit パーミッションを選択し、[追加] をクリックします。
  7. 楽しむ!
于 2013-07-09T22:49:15.467 に答える
2

実際には、アカウントを追加できる場所が 2 つあります。古いコンソール code.google.com/api/console を使用すると、appengine.google.com ダッシュボード、つまり「Way-1」に移動しますが、実際には「確認」を求める問題があります。新しいhttps://cloud.google.com/consoleはこの問題を解決しました。

  • [方法-1] *問題あり*ヒットhttp://appengine.google.com ==> your_app_name > ==> Permissions

  • [方法-2] *動作* http://cloud.google.com/consoleをヒット==> your_app_nameをクリック==>左ペインの [Permissions] をクリック==> [メンバーの追加] ボタンをクリックして、つまり xxxxxx@appspot.gserviceaccount.com を追加「編集可能」権限を持つ

「すでに Way-1 でアカウントを追加している場合は、以下の方法に従ってください」

「Way-1」に問題があるようです。これにより、アカウントは「Pending Status」と表示され続けます。何らかの方法でアカウントを Way-1 経由で追加し、その後「Way-2」をフォローしようとすると、way-2 リンクで同じステータスが表示され続けます。そのためには、マウスをホバーすると表示される「削除アイコン」でそのユーザーを削除する必要があります。そこからアカウントを削除し、 「編集可能」権限で xxxxxx@appspot.gserviceaccount.com を追加します。

于 2013-09-26T08:34:29.777 に答える