【发布时间】:2019-02-19 09:23:09
【问题描述】:
我们正在偏离数据存储区scheduled export 机制(谷歌建议)并采用通过cloud scheduler 安排数据存储区备份,这将针对HTTP cloud function。在这里,我们想使用云功能将我们的数据存储实体导出到某个存储桶。这种偏离标准机制的原因是,我们希望在我们的所有服务中避免重复的非应用特定代码。
根据docs,托管导出和导入服务仅可通过数据存储模式管理 API(REST、RPC)使用,并且请求需要 OAuth 2.0 授权。
在云函数中,要访问数据存储 API https://datastore.googleapis.com/v1/projects/<APP ID>:export,我们需要来自范围 https://www.googleapis.com/auth/datastore 的 access_token。
在标准 GAE 应用程序代码中,使用 python27 运行时,我们可以按照以下示例获取 access_token -
from google.appengine import app_identity
access_token, _ = app_identity.get_access_token('https://www.googleapis.com/auth/datastore')
但是,云函数具有 Python37 运行时。因此,导入 google.appengine 会导致错误为 error as error: ModuleNotFoundError: No module named 'google.appengine'
我们如何才能获得所需范围的access_token? (以下任一范围)-
请建议参考 Python 代码/文档。谢谢。
【问题讨论】:
-
我读到库
oauth2client已弃用,应该改用google.oauth2,但仍然是个问题。云函数抛出错误module 'google' has no attribute 'oauth2' -
数据存储导出和导入也可以通过客户端 API (Python) 完成。下面是例子,
标签: python google-app-engine google-cloud-platform google-cloud-datastore google-cloud-functions