2016-08-02 19 views
0

Ich habe eine einfache Python-Anwendung erstellt, die auf der Google App Engine ausgeführt wird. Code:Google App Engine - Fehler bei der Authentifizierung der bereitgestellten Version der App

import webapp2 

from oauth2client.contrib.appengine import AppAssertionCredentials 
from apiclient.discovery import build 
from googleapiclient import discovery 
from oauth2client.client import GoogleCredentials 


class MainPage(webapp2.RequestHandler): 
def get(self): 
    self.response.headers['Content-Type'] = 'text/plain' 
    self.response.write('BigQuery App') 
    credentials = AppAssertionCredentials(
              'https://www.googleapis.com/auth/sqlservice.admin') 
    service = discovery.build('bigquery', 'v2', credentials=credentials) 

    projectId = '<Project-ID>' 

    query_request_body = { 
     "query": "SELECT a from Data.test LIMIT 10" 
    } 

    request = service.jobs().query(projectId=projectId, body=query_request_body) 
    response = request.execute() 

    self.response.write(response) 



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

Ich bin in der Lage diesen Code lokal zu implementieren (http://localhost:8080) und alles funktioniert einwandfrei, jedoch habe ich den Fehler folgenden Fehler 500 Server, wenn ich versuche, es zu GAE zu implementieren mit:

appcfg.py -A <Project-Id> -V v1 update . 

Dies ist der Fehler, den ich von der Fehlerbericht-Konsole erhalten:

error: An error occured while connecting to the server: DNS lookup failed for URL:http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/https://www.googleapis.com/auth/sqlservice.admin/?recursive=True 

ich glaube, es ein auth-Problem ist und sicher Konto meines Dienstes machen wurde ermächtigt ich durch die gclo ging ud Authentifizierung für Dienstkonten und ich setze auch die Set-Umgebungsvariablen aus dem SDK.

Ich habe versucht, dies für eine Weile zu umgehen, werden alle Hinweise sehr geschätzt. Vielen Dank.

Außerdem habe ich durch die folgenden Dokumente Dienstkonto Auth wurde mit: https://developers.google.com/identity/protocols/OAuth2ServiceAccount, wo es heißt, dass ich nicht in der Lage sein sollte AppAsseritionCredenitals lokal auszuführen, was zu meiner Verwirrung fügt hinzu, weil ich kann eigentlich ohne Fehler.

EDIT:

Nach reuploading und reauthorizing meinem Dienstkonto ich in der Lage war, mit dem Server zu verbinden. Allerdings wird der Berechtigungsfehler mit diesem:

HttpError: <HttpError 403 when requesting https://www.googleapis.com/bigquery/v2/projects/sqlserver-1384/queries?alt=json returned "Insufficient Permission"> 

Antwort

0

den „Fehler bei der Verbindung zum Server“ Um dies zu beheben, folgen Sie den in dieser Antwort aufgeführten Anweisungen: https://stackoverflow.com/questions/31651973/default-credentials-in-google-app-engine-invalid-credentials-error#= und dann neu lädt die App

Dann , um den HttpError 403 beim Anfordern von ... "Unzulässige Berechtigung" zu beheben, müssen Sie den Umfang ändern, den Sie angefordert haben. In meinem Fall war anfordernden I:

credentials = AppAssertionCredentials(
          'https://www.googleapis.com/auth/sqlservice.admin') 

jedoch der richtige Rahmen für Google BigQuery ist: https://www.googleapis.com/auth/bigquery. Welche sieht wie folgt aus:

credentials = AppAssertionCredentials(
          'https://www.googleapis.com/auth/bigquery') 

Wenn Sie eine andere API verwenden, verwenden Sie je nachdem, welcher Umfang in den Dokumentationen skizziert.