【问题标题】:How do I access my AppEngine DataStore entities from my Compute Engine VM?如何从我的 Compute Engine 虚拟机访问我的 AppEngine DataStore 实体?
【发布时间】:2014-10-25 11:08:01
【问题描述】:

我的应用正在 App Engine 上运行,但我想从我的 Compute Engine 虚拟机访问其 NDB DataStore 实体以进行一些处理并将结果写回 App Engine DataStore。我怎样才能做到这一点?

另外,Google Cloud DataStore 和 App Engine DataStore 是同一个东西吗? https://developers.google.com/datastore/ https://developers.google.com/appengine/docs/python/ndb/

【问题讨论】:

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


    【解决方案1】:

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

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

    1. 编写一个网络服务,将您的实体从 App Engine 应用程序公开到 Compute Engine 虚拟机。一种选择是Cloud Endpoints。 Cloud Endpoints 使用 OAuth2 身份验证和Compute Engine VMs are shipped with OAuth2 service accounts that you can use to authenticate to the service

    2. 使用 App Engine remote API 访问数据存储。远程 API 提供对 Datastore 的访问,就像您在 App Engine 实例中一样。但默认情况下,API 要求您提供 App Engine amdin 的密码,因此您可能必须将密码存储在 Compute Engine 虚拟机中,这是不安全的。

    【讨论】:

      【解决方案2】:

      David 的解决方案要求您使用 App Engine 实例时间来发出请求,但您可以绕过它并直接从 Compute Engine 实例向 Datastore 发出请求。有一个很好的tutorial 关于如何做到这一点。但它不像ndb那么漂亮。

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

      【讨论】:

      • 不是 Google Cloud DataStore 的文档吗?根据 David 的回答,我认为 Cloud DataStore 是 App Engine DataStore 的独立版本......还是通过提供 Dataset-ID == project-id 它指向 App Engine DataStore?
      • Clod 数据存储 == 应用引擎数据存储。
      • “用于从 Compute Engine 访问现有 App Engine 数据存储的 Google Cloud Datastore”:developers.google.com/datastore/docs/…
      【解决方案3】:

      除了@David 解释的选项之外,您还可以查看Managed VMs:它们是 Compute Engine 和 App Engine 之间的交叉 - 基本上是一个可以访问 App Engine 服务的托管 Compute Engine 实例。

      【讨论】:

      • 是的,但我认为目前没有 Python 的本地开发服务器故事,显然你必须部署来测试它......所以最好的做法是更改版本,部署然后如果一切顺利,您将版本改回 prod 并重新部署?
      【解决方案4】:

      官方推荐的方式是使用数据存储客户端库;见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))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-06
        • 1970-01-01
        • 2015-03-19
        • 1970-01-01
        • 2020-09-13
        • 2015-10-23
        • 1970-01-01
        • 2021-04-05
        相关资源
        最近更新 更多