Облачные функции 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?
После ввода сообщения "ТЕСТ" в pubsub. В журнале я вижу сообщение "НЕТ". Таким образом, мое понимание - функция, вызванная тем, что она не получила мое сообщение.
После выполнения функции в течение 45 секунд. Это происходит сбой с сообщением textPayload: "Ошибка: функция вышла из области действия запроса. Функция прервана".
Когда я запускаю то же самое, на этот раз происходит сбой из-за памяти 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);
- Потребляет много памяти. То, что рабочий узел js6 с 256 МБ дает сбой даже с 512 МБ.
Я знаю, что nodejs8 находится в бета-версии. В конце концов это придет в GA. Как решить это.