问题标签 [google-cloud-tasks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1818 浏览

go - cloudtasks.CreateTask fails: `lacks IAM permission "cloudtasks.tasks.create"` even though my account has that permission

I'm following the Creating HTTP Target tasks guide. When I run the code posted below I get this error:

I have signed in with gcloud auth login my@email.com. my@email.com has the following permissions set by my custom cloud task role:

  • cloudtasks.locations.get
  • cloudtasks.locations.list
  • cloudtasks.queues.get
  • cloudtasks.queues.list
  • cloudtasks.tasks.create
  • cloudtasks.tasks.delete
  • cloudtasks.tasks.fullView
  • cloudtasks.tasks.get
  • cloudtasks.tasks.list
  • cloudtasks.tasks.run

I don't get it. What more should I check?

main.go

The Cloud Tasks API is enabled.

0 投票
2 回答
1034 浏览

javascript - 从 Cloud Functions 中删除 Cloud Task

我正在尝试通过云功能删除 Google 云任务。这是我认为我需要基于谷歌文档的代码。

当这个函数被调用时,我得到一个错误

其中 6cDN... 是我要删除的任务 ID,所以我的问题是我没有为谷歌任务提供足够的信息来删除我收到 PERMISSION_DENIED 错误的任务吗?此外,如果有更多信息,我应该提供相应的字段名称,因为从我在谷歌文档中看到的 deleteTask 只取“名称”。感谢您提出任何建议。

我真的很感谢所有的帮助,所以现在我的代码看起来像这样。

它工作得很好,谢谢你,我仍然在这个 catch 方法中遇到错误

如果我担心这一点,我已经对其进行了多次测试,结果一致,它似乎确实按预期工作

0 投票
1 回答
58 浏览

google-cloud-tasks - 可以将任务与谷歌云任务链接起来吗?

大家好,我对谷歌云任务很陌生。

我想知道是否可以链接任务。

0 投票
3 回答
836 浏览

google-app-engine - 谷歌云任务“创建任务”请求抛出 ServiceUnavailable:503

我正在将我的任务从 AppEngine TaskQueues 转换为 Google Cloud Tasks。

有问题的是每小时检查 S3 存储桶的新文件的 cron 作业。cron 作业为每个找到的文件启动一个新任务。然后,这些任务下载各自的文件并在其文件中的每条记录启动一个新任务。

在此扇出期间,某些调用create_task()似乎因 ServiceUnavailable: 503 而失败(https://googleapis.dev/python/cloudtasks/latest/gapic/v2/api.html#google.cloud.tasks_v2.CloudTasksClient .create_task

这是一个

这是另一个

我是否同时排队太多任务?我能做些什么来处理这个问题?

0 投票
5 回答
2042 浏览

django - 每个任务都无法在 Google Cloud Tasks 上执行

我需要在 Django 应用程序中运行一些异步任务,我开始研究 Google Cloud Tasks。我想我已经遵循了所有的指示——以及我能想到的所有可能的变化,但到目前为止没有成功。

问题是所有创建的任务都进入队列,但无法执行。控制台和日志仅报告 http 代码 301(永久重定向)。为简单起见,我将相同的代码部署到 App Engine(标准)的两个服务中,并将任务请求仅路由到其中一个。

看起来代码本身运行良好。当我转到“ https://[proj].appspot.com/api/v1/tasks ”时,例程执行得很好,并且根据 DevTools/Network 没有重定向。当 Cloud Tasks 尝试调用“/api/v1/tasks”时,每次都会失败。

如果有人可以查看下面的代码并指出可能导致此失败的原因,我将不胜感激。

谢谢你。

更新:

以下是执行的日志:

0 投票
1 回答
109 浏览

firebase - 如何创建具有一定时差的http目标云任务列表

我有一个 firebase 云功能,可以在 firebase firestore 上写入特定文件时触发onWriteFile

该函数onWriteFile创建一个 http 云任务以在未来的某个时间运行,如下所示:

这对我来说很好。

但是,如何在相同的功能中创建相差 10 秒的任务数量onWrieteFile

0 投票
1 回答
780 浏览

google-app-engine - Google Cloud Tasks:位置“europe-west1”不是有效位置

我正在尝试使用 Cloud Function 运行 Google Cloud Tasks 任务,但我遇到了一个错误,我尝试使用的任何区域都是错误的。

代码是基本的。一切都很好,直到由于以下错误而停止:

错误:{"code":3,"message":"Location ' europe-west1' 不是有效位置。使用 ListLocations 列出有效位置。","details":[]}

例如,如果我尝试使用 us-central1,它将报告:

错误:{"code":3,"message":"位置必须等于 europe-west1,因为与此项目关联的 App Engine 应用位于 europe-west1 ","details":[]}

我正在使用带有 Node.js 的 Google Cloud Tasks API 来创建新任务:

一个完整的例子可以在这里找到:https ://github.com/googleapis/nodejs-tasks/blob/master/samples/createHttpTaskWithToken.js

调用的 URL 是:“” https://cloudtasks.googleapis.com:443/$rpc/google.cloud.tasks.v2beta3.CloudTasks/CreateTask

如果我运行位置列表命令,这是输出:

编辑:使用具有相同配置的 REST API ( https://cloud.google.com/tasks/docs/reference/rest/v2beta3/projects.locations.queues.tasks/create ) 可以工作。可能是客户端的bug?

我真的不确定我的设置有什么问题。

不确定哪些信息对调试有帮助,所以如果没有足够的信息,请提前道歉。

0 投票
1 回答
595 浏览

python - google.api_core.exceptions.PermissionDenied 但服务帐户具有所需的权限

我目前正在使用 python GCP API 创建云任务队列。我的代码是从示例代码修改的,逻辑是检查队列是否存在,如果不存在则创建一个新队列并将新任务放入该队列。所以我使用 try-except 和 importfrom google.api_core import exceptions来处理错误。但是现在的问题一直是我的服务帐户没有权限云任务。这是错误。

这是我的代码。

我的服务帐户的权限 X

0 投票
4 回答
2168 浏览

service-accounts - Google Cloud Tasks 无法向 Cloud Run 进行身份验证

我正在尝试使用此处文档中所述的 Cloud Tasks 调用 Cloud Run 服务。

我有一个正在运行的 Cloud Run 服务。如果我使该服务可公开访问,它会按预期运行。

我创建了一个云队列,并使用本地脚本安排了云任务。这个是用我自己的账号。脚本看起来像这样

我看到任务出现在队列中,但它失败并立即重试。原因(通过检查日志)是 Cloud Run 服务返回 401 响应。

我自己的用户具有“服务帐户令牌创建者”和“服务帐户用户”的角色。它没有明确的“Cloud Tasks Enqueuer”,但由于我能够在队列中创建任务,我想我已经继承了所需的权限。服务帐户“my-service-account@my-project.iam.gserviceaccount.com”(我在任务中用于获取 OIDC 令牌)具有以下角色:

  • Cloud Tasks Enqueuer(虽然我认为它不需要这个,因为我正在使用自己的帐户创建任务)
  • 云任务任务运行器
  • 云任务查看器
  • 服务帐户令牌创建者(我不确定这是否应该添加到我自己的帐户 - 安排任务的帐户 - 或应该执行调用 Cloud Run 的服务帐户)
  • 服务帐户用户(此处相同)
  • Cloud Run 调用程序

所以我做了一个肮脏的把戏:我为服务帐户创建了一个密钥文件,在本地下载它并通过在我的 gcloud 配置中添加一个带有密钥文件的帐户来模拟本地。接下来,我跑

这样可行!(顺便说一句,当我切换回自己的帐户时,它也可以使用)

最终测试:如果我oidc_token在创建任务时从任务中删除 ,我会收到来自 Cloud Run 的 403 响应!不是 401...如果我从服务帐户中删除“Cloud Run Invoker”角色并使用 curl 在本地重试,我也会得到 403 而不是 401。

如果我最终使 Cloud Run 服务可以公开访问,那么一切正常。

因此,Cloud Task 似乎无法为服务帐户生成令牌以在 Cloud Run 服务上正确进行身份验证。

我错过了什么?

0 投票
2 回答
279 浏览

google-cloud-platform - Cloud Tasks 条件执行

我正在使用云任务。只有在任务 A 和任务 B 成功完成后,我才需要触发任务 C 的执行。所以我需要某种方式来阅读/被通知触发的任务状态。但是我在 GCP 的文档中看不到这样做的方法。如果有帮助的话,使用 Node.js SDK 创建任务和 Cloud Functions 作为任务处理程序。

编辑:

根据要求,这里有更多关于我们正在做什么的信息:

任务 1 到 10 每个都发出 HTTP 请求、获取数据、根据这些数据更新 Firestore 中的各个集合。这 10 个任务可以并行运行,并且没有特定的顺序,因为它们彼此之间没有任何依赖关系。所有这些任务实际上都是在 GCF 内部实现的。

任务 11 实际上依赖于任务 1 - 10 更新的 Firestore 集合数据。所以它只能在任务 1 - 10 成功完成后运行。

我们确实发布了一个 RunID 作为通用标识符,以对所有任务 (1 - 11) 的特定运行进行分组。