動かざることバグの如し

近づきたいよ 君の理想に

GCPのCloud FunctionsでPuppeteerキャプチャサーバーを構築

マジで簡単だったのでメモ

Functionの作成

GCPの管理画面から「Functions」を開く

  • 名前:任意
  • 割り当てるメモリ量:1GB
  • トリガー:HTTP
  • ランタイム:Nodejs 今回は8にした

index.jsの中身を以下

const puppeteer = require('puppeteer');

exports.screenshot = async (req, res) => {
  const url = req.query.url;
  if (!url) {
    return res.send('params error');
  }

  const args = [
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--disable-gpu',
    '--ignore-certificate-errors',
    '--disable-infobars',
    '--lang=ja'
  ];
  const browser = await puppeteer.launch({
    args: args,
    // headless: false
  });
  const page = await browser.newPage();
  await page.setExtraHTTPHeaders({
    'Accept-Language': 'ja'
  });
  await page.goto(url, {waitUntil: 'domcontentloaded', timeout: 15 * 1000});
  const imageBuffer = await page.screenshot({
    fullPage: true,
    quality: 10,
    type: 'jpeg'
  });
  res.set('Content-Type', 'image/jpeg');
  res.send(imageBuffer);
};

package.jsonは以下

  { 
  "name": "screenshot",
  "version": "0.0.1",
  "dependencies": { 
    "puppeteer": "1.14.0" 
  }
}
  • 実行する関数:screenshot

これだけでキャプチャサーバー作れるの強すぎる。。。 けどなんかタイムアウト多いし、表示までが遅い気がする(メモリ1GBが少ない説はある