回答

3

Google Cloud Datastore是App Engine数据存储的独立版本。

回到你的问题,你有两个选择:

  1. 编写一个Web服务从App Engine应用程序的计算引擎虚拟机暴露你的实体。一种选择是Cloud Endpoints。云端点使用OAuth2认证和Compute Engine VMs are shipped with OAuth2 service accounts that you can use to authenticate to the service。使用App Engine remote API访问数据存储。远程API提供对数据存储的访问,就像您处于App Engine实例中一样。但是,默认情况下,API要求您提供App Engine amdin的密码,因此您可能必须将密码存储在Compute Engine虚拟机中,这是不安全的。

9

David的解决方案要求您使用App Engine实例时间发出请求,但您可以绕过它并直接从Compute Engine实例向Datastore发出请求。关于如何做到这一点,有一个相当不错的tutorial。但它不像ndb那么漂亮。 - 基本上可以访问App Engine服务托管的Compute Engine执行个体,他们是计算引擎和应用程序引擎之间的交叉:

>>> import googledatastore as datastore 
>>> datastore.set_options(dataset='project-id') 
>>> req = datastore.BeginTransactionRequest() 
>>> datastore.begin_transaction(req) 
<datastore.datastore_v1_pb2.BeginTransactionResponse object at ...> 
+0

是不是Google云端DataStore的文档?根据David的回答,我认为Cloud DataStore是独立版本的App Engine DataStore ...或者是通过将Dataset-ID == project-id指向App Engine DataStore? – 2014-09-01 10:50:22

+0

Clod数据存储区==应用程序引擎数据存储区。 – 2014-09-01 11:17:48

+8

“用于从计算引擎访问现有App Engine数据存储的Google云数据存储”:https://developers.google.com/datastore/docs/activate#google_cloud_datastore_for_accessing_an_existing_app_engine_datastore_from_compute_engine – 2014-09-01 11:19:31

1
从@大卫解释,你也可以看看 Managed VMs选项

除了。

+0

是的,但我认为在这一点上没有本地开发服务器故事对于Python,显然你必须进行部署来测试它......所以最好的做法是更改版本,部署,然后如果一切正常,你可以将版本更改回prod并重新部署? – 2014-09-01 10:45:18

0

正式推荐的方法是使用数据存储客户端库;请参阅https://cloud.google.com/datastore/docs/reference/libraries 您需要创建服务帐户或使用标准计算引擎服务帐户,授予所有API或数据存储到该服务帐户的权限,并创建计算引擎实例作为该服务帐户的一部分。有关更多信息,请参阅here。 然后,您可以执行以下操作:

from google.auth import compute_engine                      
from google.cloud import datastore                                                                                                                                     

datastore_client = datastore.Client(project='yourproject',  
            credentials=compute_engine.Credentials())                                         
q = datastore_client.query(kind='YourEntity')                      
q.add_filter('field_name', '=', 'HelloThere') 
print list(q.fetch(1)) 
相关问题