如何使用具有不同项目ID的现有计算引擎中的Google Cloud Datastore?

时间:2013-10-07 13:22:18

标签: python google-app-engine google-compute-engine google-cloud-datastore

Google Cloud Datastore是在应用引擎和计算引擎之间共享信息的绝佳方式。 This instruction显示了如何使用来自计算引擎的Google云数据存储区,但似乎应用引擎和计算引擎都必须位于相同的项目ID中。

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

这就是我所做的。 在第65行的googledatastore / helper.py中,添加了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下使用来自计算引擎的数据存储区是否正确?

1 个答案:

答案 0 :(得分: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从OFF切换为ON。
  10. 访问Google云端控制台(适用于您的计算项目)
  11. 选择应启用Google Cloud Datastore API的现有项目ID。
  12. 从服务列表中选择API。
  13. 滚动到Google Cloud Datastore API。
  14. 将Google Cloud Datastore API从OFF切换为ON。
  15. 转到权限
  16. 复制您的计算服务帐户电子邮件地址(应类似于:projectid@project.gserviceaccount.com)
  17. 访问Google云端控制台(适用于您的App Engine应用)
  18. 转到权限
  19. 添加您的计算服务帐户电子邮件地址
  20. 它应该有希望与未修改的python客户端一起使用。