Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在firebase函数中创建Google云任务_Node.js_Firebase_Google Cloud Functions_Google Cloud Tasks - Fatal编程技术网

Node.js 在firebase函数中创建Google云任务

Node.js 在firebase函数中创建Google云任务,node.js,firebase,google-cloud-functions,google-cloud-tasks,Node.js,Firebase,Google Cloud Functions,Google Cloud Tasks,调用尝试创建任务的firebase HTTP函数时,firebase控制台函数日志中出现错误 错误:7权限被拒绝:主体(用户或服务帐户)缺少IAM权限“cloudtasks.tasks.create”,用于资源“项目/my gcloud项目id/locations/us-central1/queues/myqueuename”(或资源可能不存在) 也许我混淆了gcloud id和位置与firebase id和位置 编辑:我已通过运行gcloud--project my gcloud projec

调用尝试创建任务的firebase HTTP函数时,firebase控制台函数日志中出现错误

错误:7权限被拒绝:主体(用户或服务帐户)缺少IAM权限“cloudtasks.tasks.create”,用于资源“项目/my gcloud项目id/locations/us-central1/queues/myqueuename”(或资源可能不存在)

也许我混淆了gcloud id和位置与firebase id和位置

编辑:我已通过运行
gcloud--project my gcloud project id tasks locations list

或者我需要设置权限

我的代码:



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);
});


为了创建Google任务,您必须在IAM上添加正确的权限,在本例中,如错误消息所示,您必须向调用云函数的服务帐户添加
cloudtasks.tasks.create
权限


这可以通过进入云控制台,然后进入IAM来完成,搜索服务帐户类似于
服务项目-number@gcf-admin robot.iam.gserviceaccount.com
(更新:它是
我的项目-id@appspot.gserviceaccount.com
)并添加所需的权限,如果您具有基于角色的权限,则云任务排队器应足以创建任务。

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


这可以通过进入云控制台,然后进入IAM来完成,搜索服务帐户类似于
服务项目-number@gcf-admin robot.iam.gserviceaccount.com
(更新:它是
我的项目-id@appspot.gserviceaccount.com
)并添加所需的权限,如果您具有基于角色的权限,则云任务排队器应足以创建任务。

这可能会有所帮助。这可能会有所帮助。谢谢,我已将该角色添加到我的gcf admin robot服务帐户中,但仍然会收到相同的错误。知道我如何诊断这是否仍然是权限问题,而我没有正确的云任务队列资源名称吗?我尝试使用//cloudresourcemanager.googleapis.com/projects/my-gcloud-project-id和cloudtasks.tasks.create并获得了一个绿色复选标记:已授予访问权限。因此,可能我指定的资源名称有误?这两种情况都有可能,最好的方法是查看正在使用的所有服务帐户,并添加角色
云任务排队器
,您可以在Firebase控制台的“设置”>“项目设置”选项卡中查看与项目关联的所有服务帐户。谢谢@Emmanuel!接下来,我的问题是,我有两个名字相似的谷歌云项目,我对它们感到困惑。关于@astromme的后续信息,请参见“谢谢你”,你能添加哪个是你添加权限的SA的净化名称吗?谢谢,我将该角色添加到我的gcf admin robot服务帐户,但仍然收到相同的错误。知道我如何诊断这是否仍然是权限问题,而我没有正确的云任务队列资源名称吗?我尝试使用//cloudresourcemanager.googleapis.com/projects/my-gcloud-project-id和cloudtasks.tasks.create并获得了一个绿色复选标记:已授予访问权限。因此,可能我指定的资源名称有误?这两种情况都有可能,最好的方法是查看正在使用的所有服务帐户,并添加角色
云任务排队器
,您可以在Firebase控制台的“设置”>“项目设置”选项卡中查看与项目关联的所有服务帐户。谢谢@Emmanuel!接下来,我的问题是,我有两个名字相似的谷歌云项目,我对它们感到困惑。关于@astromme的后续内容,请参见“谢谢”,您能否添加您添加权限的SA的净化名称?