облачная задача Google не отправляет тело в облачную функцию http - PullRequest
0 голосов
/ 08 января 2020

У меня есть задача gcloud, где код, который я в основном скопировал из документации по облачным задачам. https://cloud.google.com/tasks/docs/creating-http-target-tasks

Цель облачной функции состоит в том, чтобы иметь возможность получить sh dateTo и dateFrom для нее, чтобы она могла l oop периода и создавать облачные задачи из Это. Я еще не создал l oop, потому что сначала хочу, чтобы эта проблема была решена.

Проблема в том, что тело не выполняет функцию облака http. Облачная функция http работает при использовании CURL.

curl -X POST "posturl" -H "Content-Type:application/json" --data '{"date": "2019-12-01", "lastRun": false}'

Я проверил метод, как упомянуто здесь, и это POST, поэтому он должен быть в порядке. { ссылка }

Проверка интерфейса на отсутствие полезной нагрузки. Использование gcloud beta описывает задачи ... в полезной нагрузке нет тела или ничего.

httpRequest:
  headers:
    User-Agent: Google-Cloud-Tasks
  httpMethod: POST
  url: correcthttpurl
name: name
scheduleTime: '2020-01-07T15:45:24.774042Z'
view: view
scheduleTime: '2020-01-07T15:45:24.774042Z'
view: BASIC

Это код для облачной функции, создающей задачи. Задачи добавляются в очередь, но при нажатии кнопки «Выполнить» они, похоже, не вызывают функцию. (вероятно, потому что для работы функции требуется тело)

/**
 * Background Cloud Function to be triggered by Pub/Sub.
 * This function is exported by index.js, and executed when
 * the trigger topic receives a message.
 *
 * @param {object} pubSubEvent The event payload.
 * @param {object} context The event metadata.
 */

// gcloud functions deploy queueAffiliateApiTasks --trigger-topic queue-affiliate-api-tasks --region europe-west1 --runtime=nodejs8

const moment = require("moment");


exports.queueAffiliateApiTasks = async (pubSubEvent, context) => {
  const data =
    pubSubEvent.data || Buffer.from(pubSubEvent.data, "base64").toString();

  const attributes = pubSubEvent.attributes;

  // take 30 days ago untill yesterday
  let dateFrom = moment().subtract(1, "days");
  let dateTo = moment().subtract(1, "days");

  // if dates provided in pubsub use those
  if (attributes && "dateFrom" in attributes && "dateTo" in attributes) {
    console.log("with attributes");
    dateFrom = attributes.dateFrom;
    dateTo = attributes.dateTo;
  } else {
    console.log("no attributes");
  }

  console.log(dateFrom);
  console.log(dateTo);

  // use dates for looping
  dateFrom = moment(dateFrom);
  dateTo = moment(dateTo);

  console.log(dateFrom);
  console.log(dateTo);

  const date = dateTo.format("YYYY-MM-DD").toString();
  const lastRun = false;
  const url =
    "the correct url to the http cloud function";
  const payload = JSON.stringify({ date: date, lastRun: false }, null, 2);

  await createHttpTask(url, payload);
};

async function createHttpTask(url, payload) {
  const project = "xxx";
  const queue = "affiliate-api-queue";
  const location = "europe-west1";
  const inSeconds = 0 // Delay in task execution
  // [START cloud_tasks_create_http_task]
  // Imports the Google Cloud Tasks library.
  const {CloudTasksClient} = require('@google-cloud/tasks');

  // Instantiates a client.
  const client = new CloudTasksClient();

  // Construct the fully qualified queue name.
  const parent = client.queuePath(project, location, queue);

  const task = {
    httpRequest: {
      httpMethod: 'POST',
      url,
    },
  };

  task.httpRequest.body = Buffer.from(payload).toString('base64');

  if (inSeconds) {
    // The time when the task is scheduled to be attempted.
    task.scheduleTime = {
      seconds: inSeconds + Date.now() / 1000,
    };
  }

  // Send create task request.
  console.log('Sending task:');
  console.log(task);
  const request = {parent, task};
  const [response] = await client.createTask(request);
  console.log(`Created task ${response.name}`);
  console.log(`Response: ${JSON.stringify(response.httpRequest, null, 2)}`);
  // [END cloud_tasks_create_http_task]
}

Чего мне не хватает?

enter image description here

, как вы можете видеть задача добавлена, но не выполнена enter image description here полезные данные и заголовки пусты

Ответы [ 2 ]

1 голос
/ 09 января 2020

Я обнаружил проблему, движок приложения по какой-то причине не был включен. Запросы работают сейчас!

0 голосов
/ 08 января 2020

Согласно Google docs , по умолчанию responseView имеет значение BASIC; не вся информация извлекается по умолчанию, потому что некоторые данные, такие как полезные данные, может быть желательно возвращать только при необходимости из-за их большого размера или из-за чувствительности содержащихся в них данных.

...