谷歌应用程序引擎-验证已部署版本的应用程序时出现问题



我构建了一个简单的python应用程序,以便在谷歌应用引擎上运行。代码:

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)

我可以在本地部署此代码(http://localhost:8080)并且一切正常,但是当我尝试使用将其部署到GAE时,我得到了以下错误500服务器错误

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

这是我从错误报告控制台得到的错误:

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

我认为这是一个身份验证问题,为了确保我的服务帐户得到授权,我对服务帐户进行了gcloud身份验证,还从SDK中设置了设置的环境变量。

一段时间以来,我一直在努力解决这个问题,任何建议都将不胜感激。非常感谢。

此外,我一直在通过以下文档使用服务帐户验证:https://developers.google.com/identity/protocols/OAuth2ServiceAccount它说我不应该在本地运行AppAssetionCredentials,这增加了我的困惑,因为我实际上可以毫无错误地运行。

编辑:

在重新加载并重新授权我的服务帐户后,我能够连接到服务器。然而,授权错误仍然存在:

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

要修复"连接到服务器时出错",请按照此答案中列出的说明进行操作:https://stackoverflow.com/questions/31651973/default-credentials-in-google-app-engine-invalid-credentials-error#=然后重新上传应用

然后,要修复请求时出现的HttpError 403。。。返回"权限不足",必须更改您请求的范围。在我的情况下,我请求:

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

但是,Google BigQuery的正确范围是:https://www.googleapis.com/auth/bigquery.看起来像这样:

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

如果您正在使用不同的API,请使用文档中列出的任何范围。

相关内容

  • 没有找到相关文章

最新更新