Авторизация Google App Engine для Google BigQuery
Я следовал инструкциям в https://developers.google.com/bigquery/authorization, чтобы сделать несколько запросов от движка приложения до bigquery.
На шаге 2 я нажимаю на Team в консоли Google Api, и он перенаправляет на App Engine> Администрирование> Разрешения. Я добавляю имя учетной записи службы в качестве электронной почты и в качестве роли выбираю разработчика (опция "редактировать" недоступна), а затем нажимаю "Пригласить пользователя". После этого появляется сообщение: "Электронное письмо было отправлено на xxxxxx@appspot.gserviceaccount.com для проверки". и статус в ожидании. Как я мог подтвердить электронную почту? Кажется, здесь есть ошибка...
Затем я сделал тест, используя следующий код:
#!/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">
Если я тестирую с локального хоста, ответ:
HttpError: <HttpError 401 when requesting https://www.googleapis.com/bigquery/v2/projects/XXXXXXXX/queries?alt=json returned "Invalid Credentials">
Кто-то может мне помочь?:-)
2 ответа
Вы можете добавить xxxxxx@appspot.gserviceaccount.com в проект по адресу http://cloud.google.com/console.
Ожидайте, что это будет проще / проще в ближайшее время!
Шаг за шагом, @Christian:
- Перейдите на панель управления App Engine своего приложения, нажмите "Настройки приложения" и скопируйте имя учетной записи службы (xxxxxx@appspot.gserviceaccount.com)
- Перейдите на http://cloud.google.com/console.
- Выберите свой проект
- Нажмите на значок шестеренки и выберите команды
- Нажмите на Добавить участника
- Вставьте имя учетной записи службы и выберите разрешение на редактирование, затем нажмите "Добавить".
- Повеселись!
На самом деле есть две области, откуда вы можете добавить учетную запись. Если вы перейдете на старую консоль code.google.com/api/console, вы попадете на панель инструментов appengine.google.com, т. Е. "Путь-1", у которой на самом деле есть проблема с запросом "Подтверждение". Новый https://cloud.google.com/console решил эту проблему.
[Way-1] *Проблемный* нажмите http://appengine.google.com/ ==> your_app_name> ==> Разрешения
[Путь-2] *Работает* нажмите http://cloud.google.com/console ==> Нажмите ваше имя_папки ==> Нажмите Разрешения на левой панели ==> Нажмите кнопку Добавить участника и добавьте, например, xxxxxx@appspot.gserviceaccount.com с правами "Можно редактировать"
"Если вы уже добавили свою учетную запись с помощью способа Way-1, выполните следующие действия"
"Way-1", кажется, имеет некоторые проблемы, из-за этого ваша учетная запись будет продолжать отображать "Pending Status". Если каким-либо образом вы добавили учетную запись через Путь-1 и попытаетесь впоследствии следовать "Путь-2", вы продолжите видеть тот же статус по ссылке Путь-2. Для этого вам придется удалить этого пользователя с помощью "значка удаления", который появляется при наведении курсора мыши. Удалите оттуда учетную запись и добавьте xxxxxx@appspot.gserviceaccount.com с разрешением "Можно редактировать".