Wie man Puppeteer in Google Cloud Functions v2 verwendet
Hier erfährst du, wie du Puppeteer in Cloud Functions v2 zum Laufen bringst
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.