2

Google Cloud Datastore 是在应用引擎和计算引擎之间共享信息的好方法。该指令显示了如何从计算引擎使用谷歌云数据存储,但似乎应用引擎和计算引擎都必须在同一个项目 ID 中。

我在应用引擎和计算引擎中的数据存储具有不同的项目 ID。

这就是我所做的。在 googledatastore/helper.py 第 65 行附近,添加了 1 行

  try:
    raise client.AccessTokenRefreshError # <== added
    credentials = gce.AppAssertionCredentials(connection.SCOPE)
    http = httplib2.Http()
    credentials.authorize(http)
    credentials.refresh(http)
    logging.info('connect using compute credentials')
    return credentials
  except (client.AccessTokenRefreshError, httplib2.HttpLib2Error):
    if (os.getenv('DATASTORE_SERVICE_ACCOUNT')
        and os.getenv('DATASTORE_PRIVATE_KEY_FILE')):
      with open(os.getenv('DATASTORE_PRIVATE_KEY_FILE'), 'rb') as f:
        key = f.read()
      credentials = client.SignedJwtAssertionCredentials(
          os.getenv('DATASTORE_SERVICE_ACCOUNT'), key, connection.SCOPE)
      logging.info('connect using DatastoreSignedJwtCredentials')
      return credentials

然后忽略计算引擎凭据。之后,只需按照“不是来自计算引擎”的说明进行操作。嗯..它看起来不是最好的方法。

在另一个项目 ID 下使用来自计算引擎的数据存储是否正确?

4

1 回答 1

3

我建议将 Compute Engine 和 App Engine 合并到同一个项目下,但如果由于某种原因无法做到这一点,您可以尝试以下方法:

  1. 访问 App Engine 管理控制台(针对您的 App Engine 应用)
  2. 选择应启用 Google Cloud Datastore API 的应用程序 ID。
  3. 单击左侧导航中的应用程序设置链接。
  4. 滚动到云集成部分。
  5. 如果未显示任何项目,请单击添加项目。项目创建需要几分钟,等到您在“应用程序设置”页面的“基本”部分看到您的 Google API 控制台项目编号。
  6. 单击 Google API 控制台项目编号链接。
  7. 从服务列表中选择 API。
  8. 滚动到 Google Cloud Datastore API。
  9. 将 Google Cloud Datastore API 从关闭切换到开启。
  10. 访问 Google Cloud Console(用于您的 Compute 项目)
  11. 选择应启用 Google Cloud Datastore API 的现有项目 ID。
  12. 从服务列表中选择 API。
  13. 滚动到 Google Cloud Datastore API。
  14. 将 Google Cloud Datastore API 从关闭切换到开启。
  15. 转到权限
  16. 复制您的计算服务帐户电子邮件地址(应类似于:projectid@project.gserviceaccount.com)
  17. 访问 Google Cloud Console(适用于您的 App Engine 应用)
  18. 转到权限
  19. 添加您的计算服务帐户电子邮件地址

它应该有望与未修改的 python 客户端一起使用。

于 2013-10-08T18:28:20.060 回答