Google app engine 从应用程序引擎应用程序访问大查询表的凭据无效

Google app engine 从应用程序引擎应用程序访问大查询表的凭据无效,google-app-engine,Google App Engine,有人能帮我从应用程序引擎应用程序访问大查询吗 我已经完成了以下步骤- 创建了一个应用程序引擎项目 已将google api客户端、oauth2client依赖项(etc)安装到/lib中 通过云控制台为App Engine项目启用了大查询API 创建了一些“应用程序默认凭据”(“服务帐户密钥”)[JSON],并将其保存到应用程序引擎应用程序的根目录中 创建了一个“大查询服务资源”,如下所示- def get_bigquery_service(): from googleapiclient

有人能帮我从应用程序引擎应用程序访问大查询吗

我已经完成了以下步骤-

创建了一个应用程序引擎项目

已将google api客户端、oauth2client依赖项(etc)安装到/lib中

通过云控制台为App Engine项目启用了大查询API

创建了一些“应用程序默认凭据”(“服务帐户密钥”)[JSON],并将其保存到应用程序引擎应用程序的根目录中

创建了一个“大查询服务资源”,如下所示-

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
<HttpError 401 when requesting https://www.googleapis.com/bigquery/v2/projects/#{ProjectId}/datasets/#{DatasetId}/tables?alt=json returned "Invalid Credentials">
已验证资源是否存在-

<googleapiclient.discovery.Resource object at 0x7fe758496090>
返回以下内容-

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
<HttpError 401 when requesting https://www.googleapis.com/bigquery/v2/projects/#{ProjectId}/datasets/#{DatasetId}/tables?alt=json returned "Invalid Credentials">

关于我可能有错误或遗漏的步骤,有什么想法吗?整个身份验证过程似乎是一场噩梦,与App Engine/PaaS易用性理念格格不入:-(


谢谢。

好吧,尽管我是谷歌云的粉丝,但这绝对是我不幸不得不在一段时间内处理的最糟糕的事情。糟糕的/不一致的/不存在的文档、复杂性、bug等。如果可以,请避免

1) 确保您的应用引擎“默认服务帐户”存在

您可以选择仅在默认服务帐户不存在时创建该帐户。如果你无意中删除了它,你将需要一个新的项目;你不能重新创建它

您可能应该创建默认的JSON凭据集,但不需要将它们作为项目的一部分

对于大查询或其他情况,您不需要创建任何其他服务帐户

2) 安装google api python客户端并应用修复程序

pip install -t lib google-api-python-client
假设安装了OATH2客户端3.0.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('~')
致:

并将以下内容添加到app.yaml:

env_variables:
  HOME: '/tmp'
丑陋但有效

3) 下载GCloud SDK并从控制台登录

这里的问题是appengine的dev_appserver.py不包括任何大查询复制(natch);因此,当您与大型查询表交互时,您使用的是生产数据;您需要登录才能访问

回想起来很明显,但记录得很差

4) 在App引擎控制台中启用大查询API;创建一个大的查询项目

5) 试验

[或类似]

祝你好运

gcloud auth login
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()