Создание облачной задачи: ошибка: 3 INVALID_ARGUMENT: запрос содержит недопустимый аргумент

Я следую этому руководству: 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"
  }
}

(или с телом: строка json в кодировке base64.)

Я использую следующий код:

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

Отсутствие подробностей в ошибке заставляет меня упираться в стену ...

Какие-либо предложения ?


person Thomas    schedule 27.08.2020    source источник


Ответы (2)


В моей учетной записи службы не хватало части ...

это было

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

вместо того

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

Я пропустил .iam во время многочисленных тестов, чтобы он заработал.

Конечно, сообщения об ошибках можно улучшить.

person Thomas    schedule 27.08.2020

У меня была такая же проблема. В вашем случае я думаю, что в параметре задачи нет свойства scheduleTime. Для меня scheduleTime.seconds имел неправильное значение.

person Anderson Luiz Nogueira    schedule 17.04.2021