Wie man Puppeteer in Google Cloud Functions v2 verwendet

Hier erfährst du, wie du Puppeteer in Cloud Functions v2 zum Laufen bringst

Justus

Justus

owntag Gründer

veröffentlicht am 23. November 2022

Die Headless-Browser-Automatisierungsbibliothek puppeteer erfordert einige zusätzliche Schritte, um in Google Cloud Functions v2 ausgeführt zu werden:

Zunächst sollte man puppeteer wie üblich installieren:

npm install puppeteer -S

Deine package.json-Datei sollte dann etwa so aussehen:

{
  "name": "puppeteer-cloud-function",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
  },
  "devDependencies": {
    "@google-cloud/functions-framework": "^3.1.2",
  },
  "dependencies": {
    "puppeteer": "^19.2.2"
  }
}

Das Bereitstellen der Funktion funktioniert einwandfrei, aber sobald du versuchst, sie zum ersten Mal auszuführen, erhältst du Fehler wie diesen in den Cloud Function / Cloud Run Protokollen:

Error: Could not find Chromium (rev. 1056772). This can occur if either
1. you did not perform an installation before running the script (e.g. `npm install`) or
2. your cache path is incorrectly configured (which is: /workspace/.cache/puppeteer).
For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.
at ChromeLauncher.resolveExecutablePath (/workspace/node_modules/puppeteer-core/lib/cjs/puppeteer/node/ProductLauncher.js:120:27)
at ChromeLauncher.executablePath (/workspace/node_modules/puppeteer-core/lib/cjs/puppeteer/node/ChromeLauncher.js:166:25)
at ChromeLauncher.launch (/workspace/node_modules/puppeteer-core/lib/cjs/puppeteer/node/ChromeLauncher.js:70:37)

Um diese zu beseitigen, füge diese Zeile zum scripts Abschnitt deiner package.json hinzu:

"gcp-build": "node node_modules/puppeteer/install.js"

so dass die gesamte Datei etwa so aussieht (plus alle anderen Zeilen, die du möglicherweise speziell für dein Projekt hast):

{
  "name": "puppeteer-cloud-function",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "gcp-build": "node node_modules/puppeteer/install.js"
  },
  "devDependencies": {
    "@google-cloud/functions-framework": "^3.1.2",
  },
  "dependencies": {
    "puppeteer": "^19.2.2"
  }
}

Das gcp-build Skript ist ein benutzerdefinierter Build-Schritt, der immer nach Abschluss der Installation ausgeführt wird. Es wird die erforderlichen Chromium-Binaries herunterladen und an der richtigen Stelle platzieren, damit deine Cloud Function Chromium finden kann.

Cache-Pfad konfigurieren

Du musst auch den Cache-Pfad konfigurieren, indem du deine [Projektverzeichnis]/.puppeteerrc.cjs Datei bearbeitest. Erstelle eine, falls du noch keine hast:

const {join} = require('path');

/**
 * @type {import("puppeteer").Configuration}
 */
module.exports = {
    // Ändert den Cache-Speicherort für Puppeteer.
    cacheDirectory: join(__dirname, '.cache', 'puppeteer'),
};

Danke an Felix Eichler für den Hinweis.

Hinweis: Speicher muss mindestens 1024MB betragen

Ein weiterer wichtiger Punkt bei der Verwendung von Puppeteer: Wenn du den Speicher deiner Cloud Function nicht definiert hast, solltest du ihn auf mindestens 1 GB setzen, sonst läuft Puppeteer nicht. Du kannst den zugewiesenen Speicher als --memory Flag zu deinem Deploy-Befehl hinzufügen:

gcloud functions deploy datalayer-test --memory=1024M --gen2 --runtime=nodejs16  --source=. --entry-point=hello --trigger-http --allow-unauthenticated

Falls das fehlschlägt, versuche deine Funktion vollständig zu löschen und dann mit dem obigen Befehl neu zu deployen.

Werde zum Server Side Tagging Profi mit owntag

Übernimm die Kontrolle über deine digitale Datenerhebung mit Server Side Tagging und dem Server Side GTM – einfach gehostet mit owntag.

App screenshot