【问题标题】:Cloud Task Creation : Error: 3 INVALID_ARGUMENT: Request contains an invalid argument云任务创建:错误:3 INVALID_ARGUMENT:请求包含无效参数
【发布时间】:2020-12-16 13:15:26
【问题描述】:

我正在关注这个教程:https://cloud.google.com/tasks/docs/tutorial-gcf

创建一个调用云函数的任务。

我已经做了很多尝试,仍然得到这个错误:

如果我将正文编码更改为其他内容,我会收到另一个关于序列化方法的错误。

这可能不是权限问题,因为我之前遇到过一些并摆脱了它。

传递给 createTask() 的对象如下:

task: {
  httpRequest: {
    url: "https://europe-west1-project_id.cloudfunctions.net/FunctionName"
    httpMethod: "POST"
    oidcToken: {
      serviceAccountEmail: "cf-targetFunctionSA@project_id.gserviceaccount.com"
    }
  body: ""
  headers: {
    Content-Type: "application/json"
  }
}

(或带有正文:base64 编码的 json 字符串。)

我使用的代码如下:

'use strict';
const common            = require('./common');
const {v2beta3}         = require('@google-cloud/tasks');
const cloudTasksClient  = new v2beta3.CloudTasksClient();

let projectName = common.getProjectName();
let location    = "europe-west3";
let queue       = "compute-stats-on-mysql";
const parent    = cloudTasksClient.queuePath(projectName, location, queue);

async function createTask(url, serviceAccount, data)
{
  const dataBuffer  = Buffer.from(JSON.stringify(data)).toString('base64');
  const task = {
    httpRequest: {
      httpMethod: 'POST',
      url:url,
      oidcToken: {
        serviceAccountEmail: serviceAccount,
      },
      headers: {
        'Content-Type': 'application/json',
      },
      body:dataBuffer,
    },
  };


  try
  {
    // Send create task request.
    common.logDebug(`Before creating task`, {parent:parent,task:task, data:data});
    const [response] = await cloudTasksClient.createTask({parent, task});
    common.logDebug(`Created task ${response.name}`, {parent:parent,task:task, response:response, data:data});
    return response;
  }
  catch (error)
  {
    // Construct error for Stackdriver Error Reporting
    console.error("error while creating tasks",error);
  }
}

module.exports = {
  createTask : createTask,
  cloudTasksClient:cloudTasksClient
};

错误中缺乏细节让我撞到了墙盲......

有什么建议吗?

【问题讨论】:

    标签: grpc google-cloud-tasks


    【解决方案1】:

    我的服务帐户缺少一部分...

    原来是这样

    "cf-"+functionName+"@"+projectName+".gserviceaccount.com";
    

    而不是

    "cf-"+functionName+"@"+projectName+".iam.gserviceaccount.com";
    

    我在无数次测试中省略了“.iam”以使其正常工作。

    当然,错误消息还有改进的余地。

    【讨论】:

      【解决方案2】:

      我有同样的问题。在您的情况下,我认为任务参数中没有属性 scheduleTime。 对我来说, scheduleTime.seconds 的值是错误的。

      【讨论】:

        猜你喜欢
        • 2020-01-06
        • 2019-02-14
        • 2022-01-08
        • 2019-01-20
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        • 2021-07-09
        • 2021-08-07
        相关资源
        最近更新 更多