gpt4 book ai didi

google-app-engine - App 引擎应用程序和 Datastore 的权限问题

转载 作者:行者123 更新时间:2023-12-05 06:35:14 25 4
gpt4 key购买 nike

我正在尝试使用 App Engine 标准和灵活的数据存储在谷歌云中实现一个简单的设计。 App1 位于 GAE 标准环境中。当用户与此应用程序交互时,它会将一些数据写入数据存储并排队任务。排队任务的目标是位于 App Engine 柔性环境中的 App2(任务可能需要比标准环境允许的时间更长的时间才能完成)。 App2 的想法是从数据存储中读取数据,使用数据执行任务,完成后应将报告实体写入数据存储。我附上了一个简单的图表。

GAE

  • 在 App1 中,我设置了一个名为 flexKey 且具有所有者权限的服务帐户,下载了 json 文件。

  • 当我在本地运行 App2 时,我首先将路径导出到凭证 json 文件作为环境变量:

    GOOGLE_APPLICATION_CREDENTIALS:“path/to/flexKey.json”

然后使用 mvn jetty:run-exploded 启动应用程序,一切正常,App2 能够使用实时数据存储(不是本地仿真)进行身份验证,并读取 App1 写入的数据。当我取消设置环境变量时,我收到“未验证”错误(预期)

  • 为了在部署 App2 时使用相同的服务帐户,我在 App2 的 app.yaml 中添加了以下内容,以将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为服务帐户 json 文件的路径flexKey.json(这是部署实例上文件的路径):

    env: flex
    env_variables:
    GOOGLE_APPLICATION_CREDENTIALS: "/var/lib/jetty/webapps/root/WEB-INF/classes/flexKey.json"
    runtime: java

但是,当我将 App2 部署到 App Engine 柔性环境时,在尝试执行读取查询时使用数据存储进行身份验证时出现错误(这在从本地运行的 App2 实例中使用相同凭据查询数据存储时工作正常):

com.google.cloud.datastore.DatastoreException: Missing or insufficient permissions.
at com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.translate(HttpDatastoreRpc.java:129)
at com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.translate(HttpDatastoreRpc.java:114)
at com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.runQuery(HttpDatastoreRpc.java:182)
at com.google.cloud.datastore.DatastoreImpl$1.call(DatastoreImpl.java:178)
at com.google.cloud.datastore.DatastoreImpl$1.call(DatastoreImpl.java:174)
at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:89)
at com.google.cloud.RetryHelper.run(RetryHelper.java:74)
at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:51)
at com.google.cloud.datastore.DatastoreImpl.runQuery(DatastoreImpl.java:173)

.....

密码是 PERMISSION_DENIED

  • 如果我从 App2 的 app.yaml 文件中遗漏了环境变量 GOOGLE_APPLICATION_CREDENTIALS,则会收到“未验证”错误,因此我认为它正在读取文件,所以我不确定问题出在哪里
  • 我正在使用 Objectify v6

我不明白为什么相同的凭据(使用所有者角色创建)在从应用程序的本地运行实例查询数据存储时工作正常,但在从相同的已部署版本查询数据存储时却不起作用应用程序(部署到灵活的环境)。通过 app.yaml 中的环境变量设置凭证文件的路径是文档中推荐的方法,除非我弄错了。

  • GOOGLE_APPLICATION_CREDENTIALS 环境变量是否未在 app.yaml 中正确设置?
  • 我的设计在概念上是否存在问题?

感谢所有帮助。

最佳答案

您的设计中存在一个阻塞问题:一个应用程序无法将任务排入以另一个应用程序的服务为目标的推送队列中。来自<target> (push queues) Syntax 中的行两个表 queue.yaml queue.xml 引用资料:

The string is prepended to the domain name of your app when constructing the HTTP request for a task. For example, if your app ID is my-app and you set the target to my-version.my-service, the URL hostname will be set to my-version.my-service.my-app.appspot.com.

如果你想使用任务队列,那么你必须让这两个服务成为同一个应用程序的一部分。作为(积极的)副作用,您不必再担心为数据存储访问设置身份验证 - 两种服务都可以直接访问应用程序的数据存储。

关于google-app-engine - App 引擎应用程序和 Datastore 的权限问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49762440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com