在 firebase 函数中创建 Google Cloud Task

Posted

技术标签:

【中文标题】在 firebase 函数中创建 Google Cloud Task【英文标题】:creating Google Cloud Task in a firebase function 【发布时间】:2020-11-25 20:48:12 【问题描述】:

在调用尝试创建任务的 firebase HTTP 函数时,我在 firebase 控制台函数日志中遇到错误。

错误:7 PERMISSION_DENIED:委托人(用户或服务帐户)缺少资源“projects/my-gcloud-project-id/locations/us-central1/queues/myqueuename”的 IAM 权限“cloudtasks.tasks.create” (或者资源可能不存在)。

也许我在 gcloud id & location 与 firebase id & location 之间感到困惑?

编辑:我通过运行 gcloud --project my-gcloud-project-id tasks locations list 确认我的位置是 us-central1

或者也许我需要设置权限?

我的代码:



const functions = require('firebase-functions');
const  CloudTasksClient  = require('@google-cloud/tasks')

const projectId = 'my-firebase-project-id';
const location = 'us-central1'
const queue = 'myqueuename'

exports.onFormSubmit = functions.https.onRequest(async (req, res) => 
  const tasksClient = new CloudTasksClient()
  const queuePath = tasksClient.queuePath('my-gcloud-project-id', location, queue);

  const url = `https://google.com/` // edited for stack overflow
  const delaySeconds = 5;
  console.log('delaying for ', delaySeconds, ' seconds');

  const task = 
      httpRequest: 
          httpMethod: 'POST',
          url,
          body: '',
          headers: 
              'Content-Type': 'application/json',
          ,
      ,
      scheduleTime: 
          seconds: delaySeconds
      
  

  const [ response ] = await tasksClient.createTask( parent: queuePath, task )

  console.log('task name', response.name);
);

【问题讨论】:

这可能有助于thecloudfunction.com/blog/… 【参考方案1】:

为了创建 Google 任务,您必须在 IAM 上添加正确的 permissions,在这种情况下,如错误消息所示,您必须向调用云的服务帐户添加 cloudtasks.tasks.create 权限功能。

这可以通过进入 Cloud Console 然后进入 IAM 来完成,搜索服务帐户 usually 类似于 service-project-number@gcf-admin-robot.iam.gserviceaccount.com更新:它是 my-project-id@appspot.gserviceaccount.com)并添加所需的权限,如果您有基于角色的权限Cloud Tasks Enqueuer 应该足以创建任务。

【讨论】:

谢谢,我将该角色添加到我的 gcf-admin-robot 服务帐户,但仍然收到相同的错误。知道如何诊断这是否仍然是权限问题,而我的云任务队列资源名称不正确? 我尝试将console.cloud.google.com/iam-admin/troubleshooter 与 //cloudresourcemanager.googleapis.com/projects/my-gcloud-project-id 和 cloudtasks.tasks.create 一起使用,并得到一个绿色复选标记:访问权限已授予。所以也许我以某种方式指定了错误的资源名称? 两者都可以,最好的办法是查看所有used from Firestore的服务账号,并添加角色Cloud Tasks Enqueuer,您可以在@987654325中查看与您的项目关联的所有服务账号@ 您的设置选项卡 > Firebase 控制台中的项目设置。 谢谢@Emmanuel!跟进这里,我的问题最终是我有两个名称相似的谷歌云项目,我对它们感到困惑。见***.com/questions/63305239/… 感谢您的跟进@astromme,您能补充一下您添加权限的 SA 的净化名称吗?

以上是关于在 firebase 函数中创建 Google Cloud Task的主要内容,如果未能解决你的问题,请参考以下文章

如何在firebase中创建两个onCreate函数

(firebase.firestore 不是函数)尝试在 Firestore 中创建集合时

无法在 razorpay [firebase_functions/internal] 内部的 firebase 云函数中创建订单 ID

在 Firebase Cloud Functions 中创建 PDF

在 Google AdWords 中创建可重用函数

如何使用节点读取在 Firestore 中创建的最新文档?