Облачные функции Google - облачная функция nodejs6 не работает в nodejs8(бета)

Мой код успешно работает в nodejs6. Я просто хотел развернуть его в nodejs8.

index.js содержит код ниже

// [START functions bgMCMA]
/**
 * Background Cloud Function - Triggered by PubSub.
 * @param {!Object} event The Cloud Functions event.
 * @param {!Function} The callback function.
 */
exports.bgScrapeMCMA = (event, callback) => {

    //Logic to avoid infinite loop on timeout
    const eventAge = Date.now() - Date.parse(event.timestamp);
    const eventMaxAge = 420000; //7Minutes as timeout is set as 504 seconds(9Minutes)

    // Ignore events that are too old
    if (eventAge > eventMaxAge) {
      console.log(`INFINITE-LOOP-BREAK : Dropping context ${context} with age ${eventAge} ms.`);
      callback(); // Don't forget to call the callback. Remember its either a callback() or promise
      return;
    }    

    // The Cloud Pub/Sub Message object.
    const pubSubMessage = event.data;
    const message = pubSubMessage.data ? Buffer.from(pubSubMessage.data, 'base64').toString() : 'NONE';

    console.log('MCMA triggered time : ' + DateTime.getCurrentISTdt("yyyy-mmm-dd hh:mm:ss") + ' Message : ' + message);

    MCMA.start().then( (resp) =>{
        console.log('MCMA : Success : '+resp);
        callback(); // Don't forget to call the callback. Remember its either a callback() or promise        
    }).catch( (e) =>{
        console.error('MCMA : Error : '+e);
        callback(); // Don't forget to call the callback. Remember its either a callback() or promise
    });

};
// [END functions bgMCMA]

Развернуто на nodejs8 с помощью команды ниже

gcloud functions deploy bgScrapeMCMA --trigger-resource psTriggerbgScrapeMCMA --trigger-event google.pubsub.topic.publish --entry-point=bgScrapeMCMA --timeout=540s --runtime nodejs8

Функция успешно развернута.

Я запускаю код через pubsub. В консоли функций я нажму на тему и опубликую сообщение типа "ТЕСТ" в текстовой области сообщения.

Что ожидается?
При проверке в журналах обычно отображается сообщение "ТЕСТ". Итак, я могу понять, что функция срабатывает успешно.

Что я вижу после развертывания в nodejs8?

  1. После ввода сообщения "ТЕСТ" в pubsub. В журнале я вижу сообщение "НЕТ". Таким образом, мое понимание - функция, вызванная тем, что она не получила мое сообщение.

  2. После выполнения функции в течение 45 секунд. Это происходит сбой с сообщением textPayload: "Ошибка: функция вышла из области действия запроса. Функция прервана".

  3. Когда я запускаю то же самое, на этот раз происходит сбой из-за памяти textPayload: "Ошибка: превышен лимит памяти. Вызов функции был прерван".

Со второго раза происходит сбой из-за памяти, в настоящее время используется 256 МБ. Поэтому я редактирую функцию и увеличиваю ее до 512 МБ. Первая ошибка возвращается снова: "Ошибка: функция вышла из области действия. Вызов функции был прерван".

На данный момент я сомневаюсь, что моя программа, которая ранее работала, просто для обновления до nodejs8. Я удалил предыдущую рабочую функцию и попытался развернуть ее с новой версией узла. Так что я возвращаюсь и заново развертываю с nodejs6 и 256MB памяти. Когда я выполняю функцию, она работает.

То, что функция в основном делает, это очищает сайт и обновляет базу данных. Прошло около 10–45 с.

Поэтому я хотел бы знать две вещи: что изменилось в NodeJS8 в GCP.
1. Простое сообщение от pubsub не приходит в журнал

const pubSubMessage = event.data;
const message = pubSubMessage.data ? Buffer.from(pubSubMessage.data, 'base64').toString() : 'NONE';

console.log('MCMA triggered time : ' + DateTime.getCurrentISTdt("yyyy-mmm-dd hh:mm:ss") + ' Message : ' + message);
  1. Потребляет много памяти. То, что рабочий узел js6 с 256 МБ дает сбой даже с 512 МБ.

Я знаю, что nodejs8 находится в бета-версии. В конце концов это придет в GA. Как решить это.

1 ответ

Комментарий ниже показывает, как эта проблема была решена.