Кукольник Google Cloud Function Pub / Sub Trigger не может открыть браузер - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь создать функцию Guppeteer в GCP, которая может быть вызвана сообщениями Pub / Sub.Функция вызывается, но не работает должным образом и выдает ошибку времени ожидания, когда браузер пытается инициализироваться.Может ли триггер использовать среду NodeJS, отличную от HTTP-триггера?

Я также очень плохо знаком с NodeJS, поэтому заранее прошу прощения, если проблема очевидна.

I 'Мы создали HTTP-триггер для функции, которая ведет себя как ожидалось.Я копирую / вставляю нижеприведенную функцию Puppeteer в index.js при создании облачной функции, но в качестве примера выделю ее, чтобы оба триггера выполняли одинаковую функцию.

Функция Puppeteer

const puppeteer = require('puppeteer');

scrapeUglyWebsite = () => {
    return new Promise(async(resolve, reject) => {
        await puppeteer.launch({
            headless: true,
            args: ['--no-sandbox']
        })
            .then(async (browser) => {
                const page = await browser.newPage();
                await page.goto('http://suzannecollinsbooks.com/', {waitUntil: 'load', timeout: 0})
                    .then(async () => {
                        //Wait for content to load
                        await page.waitForFunction('document.body !== null && document.body.innerText.includes(\'Jon Scieszka\')');
                        //Evaluate page contents
                        const dom_eval = await page.evaluate(() => document.body.innerText.includes("Here’s a picture of me with a rat"));
                        await browser.close();
                        resolve(dom_eval);
                    });
            }).catch((err) => {
                reject(err);
            });
    });
};

HTTP Trigger - index.js

exports.cloudFunctionTest = (req, res) => {
    scrapeUglyWebsite()
        .then((results) => {
            if(results) {
                res.send('Suzanne Collins takes pictures with rats.');
            } else {
                res.send("Suzzane Collins doesn't take pictures with rats.");
            };
        })
        .catch((err) => {
            res.send(err.toString());
        });

Pub / Sub Trgger - index.js

exports.cloudFunctionTest = (data, context) => {
    scrapeUglyWebsite()
        .then((results) => {
            if(results) {
                console.log('Suzanne Collins takes pictures with rats.');
            } else {
                console.log("Suzzane Collins doesn't take pictures with rats.");
            };
        })
        .catch((err) => {
            console.log(err.toString());
        });
};

package.json

{
  "name": "test",
  "version": "0.0.1",
  "engines": {
    "node": "8"
  },
  "dependencies": {
    "puppeteer": "^1.6.0"
  }
}

HTTP Trigger работает правильно сожидаемый результат

Suzanne Collins takes pictures with rats.

Pub / Sub Trigger выдает следующую ошибку без вывода

TimeoutError: Timed out after 30000 ms while trying to connect to Chrome! The only Chrome revision guaranteed to work is r662092
...