Python 如何使用不同项目id的现有计算引擎中的Google云数据存储?

Python 如何使用不同项目id的现有计算引擎中的Google云数据存储?,python,google-app-engine,google-compute-engine,google-cloud-datastore,Python,Google App Engine,Google Compute Engine,Google Cloud Datastore,谷歌云数据存储是在应用程序引擎和计算引擎之间共享信息的好方法。显示了如何从计算引擎使用google云数据存储,但似乎应用程序引擎和计算引擎必须位于同一个项目id中 appengine和computeengine中的数据存储具有不同的项目id 这就是我所做的。 在googledatastore/helper.py第65行附近添加了1行 try: raise client.AccessTokenRefreshError # <== added credentials = g

谷歌云数据存储是在应用程序引擎和计算引擎之间共享信息的好方法。显示了如何从计算引擎使用google云数据存储,但似乎应用程序引擎和计算引擎必须位于同一个项目id中

appengine和computeengine中的数据存储具有不同的项目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下使用compute engine中的数据存储是否合适?

我建议将compute engine和App engine合并到同一个项目下,但如果由于某种原因无法实现,您可以尝试以下方法:

访问应用程序引擎应用程序的应用程序引擎管理控制台 选择应为其启用Google云数据存储API的应用程序ID。 单击左侧导航中的应用程序设置链接。 滚动到云集成部分。 如果没有显示任何项目,请单击“添加项目”。项目创建将需要几分钟的时间,等待您在应用程序设置页面的“基础”部分看到您的Google API控制台项目编号。 单击GoogleAPI控制台项目编号链接。 从服务列表中选择API。 滚动到谷歌云数据存储API。 将Google云数据存储API从关闭切换到打开。 访问计算项目的谷歌云控制台 选择应为其启用Google云数据存储API的现有项目ID。 从服务列表中选择API。 滚动到谷歌云数据存储API。 将Google云数据存储API从关闭切换到打开。 转到权限 复制您的计算服务帐户电子邮件地址应类似于:projectid@project.gserviceaccount.com 访问应用程序引擎应用程序的谷歌云控制台 转到权限 添加您的计算服务帐户电子邮件地址
希望它能与未修改的python客户端一起工作。

谢谢proppy,它成功了!我已将计算引擎项目的帐户电子邮件地址添加到app engine项目权限中。另外,在添加实例时,我不应该忘记添加-service\u account\u作用域。