【问题标题】:Connecting to AppEngine datastore in development via Cloud Datastore API通过 Cloud Datastore API 连接到开发中的 AppEngine 数据存储
【发布时间】:2014-02-18 20:45:58
【问题描述】:

我们目前正在运行一个组合的 AppEngine / GCE 应用程序,并且到目前为止我们的所有数据存储访问都保留在 AppEngine 方面。现在我们正在探索是否允许我们的 GCE 实例对(共享)数据存储进行一些查询。首先,我试图弄清楚如何在本地运行。到目前为止我们所拥有的:

  • Go devappserver 正在运行
  • 想要向 devappserver 数据存储区发出查询的 Go 独立二进制文件。
  • 我们安装了 ('go get') google-api-go-client/datastore/v1beta2,以便我们可以使用 API 而不是直接发出 HTTP 调用。但是,如果此 API 库无法在开发中工作,我们肯定愿意发出直接 HTTP 调用。
  • 我们设置了服务帐户(我们已经从 GCE 访问 GCS),但我怀疑这与在本地运行有关...

我看过一些文档,但他们 (a) 只讨论了 Python 和 Java,并且 (b) 讨论了连接到(独立)开发数据存储服务器,而不是嵌入在 AppEngine 的 devappserver 中的数据存储(如果它们甚至不同的?)。 StackOverflow 上也有以下答案,但它再次讨论了连接到独立开发数据存储服务器:

How to connect to the local google cloud Datastore db?

任何指针将不胜感激!

  • 伊恩

【问题讨论】:

    标签: google-app-engine go google-cloud-datastore google-api-go-client


    【解决方案1】:

    由于多种原因,目前这在开发环境中是不可能的。 Google Cloud Datastore 工具 (gcd.sh) 使用 java 开发服务器。但是,在为 App Engine 开发 go 时,您使用 python 开发服务器,它具有不同的底层存储。在github page 上跟踪此问题有一个错误。

    您仍然可以在 go 中开发 Google Cloud Datastore 应用程序,但是当前的 go 客户端库中有 many bugs。不幸的是,开发服务器目前不支持 go 库使用的 JSON API(参见note at the top of the page)。

    更新:我想确保 proppy 的评论被视为答案的一部分。他的建议确实提供了一种使用协议版本的 API 的方法,这可能比上面的 go 客户端库更稳定。它还可以让您使用gcd.sh 工具在开发服务器中进行测试。但是,您必须自己制作 HTTP 请求,并且您将无法在应用程序和开发中的云数据存储之间共享数据存储中的数据。然而,这绝对是一个很好的解决方法,让您可以使用 Cloud Datastore API,随着它的开发,它比其他解决方法更容易使用。 来自道具:

    请注意,您仍然可以在 Go 中使用 Cloud Datastore Protobuf HTTP API。 protobuf 定义在 GitHub 上可用,您可以使用 Go protobuf 编译器插件将其编译为 Go 代码,然后将 POST HTTP 请求发送到/datastore/{version}/datasets/{datasetId}/{method}

    【讨论】:

    • 请注意,您仍然可以将 Cloud Datastore Protobuf HTTP API 与 Go 一起使用。 protobuf definition 在 GitHub 上可用,您可以使用 Go protobuf compiler plugin 将其编译为 Go 代码,然后将 POST HTTP 请求发送到 /datastore/{version}/datasets/{datasetId}/{method}
    • 现在是 2018 年,显然,如果您使用 Datastore 在 GAE 标准上使用 Go,您仍然无法使用与生产相同的代码在本地运行它。每次我看到 ctx := context.Background(),愤怒接管。
    【解决方案2】:

    如果来自“GO”应用服务器的用例足够简单,您可能希望通过对 GAE 服务的 API 调用来实现访问(可能扩展服务以接收 API 调用)。

    如果您的数据存储定义或功能发生变化,则只需在一处进行更改。

    【讨论】:

    • 此解决方法的另一个好处是,与使用 Cloud Datastore API 不同,您将使用相同的开发服务器(因此可以访问相同的底层数据)。
    • 我也考虑过,但这也意味着我们需要构建某种身份验证(这样只有我们的 GCE 实例才能访问 GAE 处理程序)。有点痛。鉴于 Patrick 在下面的回答,我认为我们将采用混合解决方案,在这种解决方案中,我们调用您在 devmode 中描述的处理程序,但我们使用重新设计我们的应用程序,以便它在生产中不需要数据存储访问(仅 GCS)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    相关资源
    最近更新 更多