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