1. Übersicht
Google Cloud Functions ist eine ereignisgesteuerte serverlose Computing-Plattform. Mit Cloud Functions können Sie Code schreiben, ohne sich um die Bereitstellung von Ressourcen oder die Skalierung zur Bewältigung sich ändernder Anforderungen kümmern zu müssen.
In JavaScript geschriebene Cloud Functions werden in einer Node.js-Umgebung auf der Google Cloud Platform ausgeführt. Sie können Ihre Cloud Functions-Funktion in jeder standardmäßigen Node.js-Laufzeit ausführen. Das sorgt für Portabilität und vereinfacht lokales Testen.
Schritt-für-Schritt-Anleitung
In diesem Codelab erstellen Sie eine Cloud Functions-Funktion für Node.js, die meldet, ob eine angegebene Temperatur akzeptabel oder zu hoch ist. Sie erstellen, testen und debuggen Ihre Cloud-Funktion mit Visual Studio Code auf Ihrem lokalen Computer. Zum Schluss stellen Sie Ihre Funktion in der Google Cloud Platform bereit.
Lerninhalte
- Functions Framework für Node.js.
- HTTP-Cloud Functions-Funktion lokal erstellen und testen
- HTTP-Funktionen auf dem lokalen Computer debuggen
- HTTP-Funktion vom lokalen Computer bereitstellen
2. Einrichtung und Anforderungen
Voraussetzungen
- Cloud SDK
- Visual Studio Code
- Node.js 8.6.0 oder höher (nvm verwenden, um Node.js zu installieren; mit „node –version“ können Sie Ihre Version prüfen)
- Leitfaden „Die erste Funktion: Node.js“ durchgearbeitet
Kosten
Für dieses Codelab ist nur ein Aufruf einer bereitgestellten Cloud Functions-Funktion erforderlich. Sie sollten sich jedoch die Preisinformationen zur Cloud Functions API ansehen, um zu verstehen, wie die Abrechnung funktioniert.
Viele Google-APIs können kostenlos verwendet werden, die Nutzung der Google Cloud Platform (d.h. ihrer Produkte und APIs) ist jedoch nicht kostenlos. Sie benötigen ein aktives Rechnungskonto, um Cloud Functions verwenden zu können. Für bestimmte Google Cloud Platform-Produkte (GCP) gibt es eine kostenlose Stufe, die Sie überschreiten müssen, damit Kosten anfallen. Für dieses Codelab wird jeder Cloud Functions-Aufruf auf dieses kostenlose Kontingent angerechnet. Solange Sie die Limits insgesamt (innerhalb eines Monats) nicht überschreiten, sollten keine Gebühren anfallen.
3. Functions Framework für Node.js installieren
Das Functions Framework für Node.js ist ein Open-Source-FaaS-Framework (Function as a Service) zum Schreiben portabler Node.js-Funktionen, das vom Google Cloud Functions-Team entwickelt wurde.
Mit Functions Framework können Sie einfache Funktionen schreiben, die in vielen verschiedenen Umgebungen ausgeführt werden, darunter:
- Google Cloud Functions
- Ihre lokale Entwicklungsmaschine
- Cloud Run und Cloud Run in GKE
- Knative-basierte Umgebungen
Erstellen Sie eine neue Node.js-App.
npm init
Achten Sie beim Akzeptieren der Standardeinstellungen darauf, dass index.js der Einstiegspunkt für Ihre App ist.
Installieren Sie nun Functions Framework für Node.js.
npm install @google-cloud/functions-framework
Öffnen Sie die Datei „package.json“. Prüfen Sie, ob das Functions Framework als Abhängigkeit aufgeführt ist, wie im Beispiel unten.
"dependencies": {
"@google-cloud/functions-framework": "^1.7.1"
}
Das Functions Framework wurde jetzt installiert. Sie können jetzt Ihre Cloud-Funktion erstellen.
4. HTTP-Cloud Functions-Funktion lokal erstellen und testen
Lokale Cloud Functions-Funktion erstellen
In diesem Abschnitt erstellen und testen Sie eine HTTP-Funktion, die auf HTTP-Anfragen reagiert.
Erstellen Sie im selben Verzeichnis wie Ihre package.json-Datei eine neue Datei mit dem Namen index.js.
Geben Sie folgende Ausdrücke ein. (Verwenden Sie hier und im weiteren Verlauf des Labs jeweils nur die englischen Begriffe):
exports.validateTemperature = async (req, res) => {
try {
if (req.body.temp < 100) {
res.status(200).send("Temperature OK");
} else {
res.status(200).send("Too hot");
}
} catch (error) {
//return an error
console.log("got error: ", error);
res.status(500).send(error);
}
};
Jetzt können Sie die Funktion testen.
Funktion in Visual Studio Code testen
Ab diesem Punkt wird in diesem Codelab das integrierte Terminal in Visual Studio Code verwendet.
Öffnen Sie in Visual Studio Code ein Terminalfenster.
Führen Sie dazu diesen Befehl aus:
node node_modules/@google-cloud/functions-framework --target=validateTemperature
Mit diesem Befehl wird ein lokaler Server gestartet, der bereit ist, die Funktion validateTemperature aufzurufen, wenn der Server eine HTTP-Anfrage empfängt.
Im Terminalfenster sollte folgende Ausgabe angezeigt werden:
Serving function... Function: validateTemperature URL: http://localhost:8080/
Erstellen Sie in VS Code ein zweites Terminalfenster, indem Sie im Bereich „Terminalfenster“ auf das Pluszeichen New Terminal klicken. Sie wechseln zwischen diesen beiden Terminalfenstern: das erste zum Bereitstellen der Funktion und das zweite zum Aufrufen der Funktion mit „curl“.

Über das Drop-down-Menü können Sie zwischen Terminalfenstern wechseln. Wenn ein Terminalfenster gerade eine Funktion ausführt, wird es in der Drop-down-Liste als node bezeichnet. Andernfalls wird auf zsh (oder die von Ihnen verwendete Shell) verwiesen.
Führen Sie im zweiten Terminalfenster den folgenden Befehl aus, um eine Temperatur-Payload von 50 an den lokalen Server zu senden, der die validateTemperature-Funktion bereitstellt.
curl -X POST http://localhost:8080 -H "Content-Type:application/json" -d '{"temp":"50"}'
Sie sollten die folgende Antwort von der Cloud-Funktion erhalten:
Temperature OK
Testen Sie die Funktion im zweiten Terminalfenster noch einmal, indem Sie eine Nutzlast mit einer „zu hohen“ Temperatur senden, wie unten gezeigt:
curl -X POST http://localhost:8080 -H "Content-Type:application/json" -d '{"temp":"120"}'
Sie sollten die folgende Antwort von der Cloud-Funktion erhalten:
Too hot
Testen Sie die Funktion zum Schluss, indem Sie sie ohne Nutzlast aufrufen.
curl -X POST http://localhost:8080
Sie sollten die folgende Antwort von der Cloud-Funktion erhalten:
Too hot
Im Idealfall sollte die Funktion nicht „zu heiß“ zurückgeben, wenn keine Temperatur angegeben wird. Sie haben einen Fehler im Code entdeckt.
Achten Sie darauf, dass die Funktion nicht mehr ausgeführt wird. Drücken Sie dazu Ctrl + C im ersten Terminalfenster, in dem die Funktion bereitgestellt wird.
5. HTTP-Funktion auf dem lokalen Computer debuggen
Öffnen Sie die Befehlspalette in Visual Studio Code. Wenn Sie einen Mac verwenden, nutzen Sie Cmd + Shift + P. Wenn Sie Windows verwenden, nutzen Sie Ctrl + Shift + P..
Geben Sie auto attach in die Befehlspalette ein und wählen Sie das oberste Element in der Liste aus.

Wählen Sie für dieses Codelab Only With Flag aus, wie im Bild unten dargestellt:

Laden Sie nun das Terminalfenster neu, das Sie in VS Code zum Bereitstellen Ihrer Funktion verwendet haben. Bewegen Sie dazu den Mauszeiger auf das Warnsymbol ganz rechts.
Klicken Sie auf Relaunch Terminal.

Führen Sie im neu geladenen Terminalfenster das Functions Framework noch einmal aus, um Ihre Funktion mit dem folgenden Befehl bereitzustellen:
node --inspect node_modules/.bin/functions-framework --target=validateTemperature
Das Flag --inspect weist Node.js an, auf einen Debugging-Client zu warten. Weitere Informationen finden Sie in der Node-Dokumentation zum Debuggen.
Sie verwenden node_modules/.bin/functions-framework anstelle von node_modules/@google-cloud/functions-framework. Sie müssen die automatisch symlinked executable in /node_modules/.bin verwenden, um den Inspektionsmodus zu nutzen.
Diesmal sollte in VS Code eine orangefarbene Statusleiste angezeigt werden, die angibt, dass der Debugger angehängt ist.
Setzen Sie einen Haltepunkt in Zeile 3, indem Sie in den Rand links neben der Zeilennummer klicken.

Das Haltepunktsymbol sollte hellrot leuchten, was darauf hinweist, dass der Debugger auf diese Zeile zugreifen kann.

Erreichen Sie im zweiten Terminalfenster den Haltepunkt, indem Sie den folgenden curl-Befehl ausführen.
curl -X POST http://localhost:8080
Zeile 3 wird gelb hervorgehoben. Diese Markierung gibt an, dass diese Zeile die aktuelle Anweisung ist, die vom Debugger ausgewertet wird.

Bewegen Sie den Mauszeiger auf die temporäre Variable, um zu prüfen, ob ihr Inhalt undefined ist, da die Anfrage keine Temperatur-Nutzlast enthielt.

Klicken Sie auf das Symbol „Schritt überspringen“, um die nächste Anweisung auszuführen.
Die aktuelle Anweisung springt zum „else“-Teil der „if“-Anweisung.

Für diese Demo können Sie davon ausgehen, dass in der Spezifikation festgelegt ist, dass in allen Anfragen ein Temperaturmesswert gesendet werden muss. In dem unwahrscheinlichen Fall, dass keine Temperaturmessung erfolgt, sollte die Funktion eine Ausnahme auslösen.
Klicken Sie auf die Schaltfläche „Verbindung trennen“, um die Verbindung zum Debugger zu trennen.

Beenden Sie im ersten Terminalfenster die Ausführung der Funktion, indem Sie Ctrl + C drücken.
Aktualisieren Sie Ihre Funktion, um eine if-Anweisung hinzuzufügen, mit der eine Ausnahme ausgegeben wird, wenn die Temperatur nicht definiert ist.
exports.validateTemperature = async (req, res) => {
try {
// add this if statement below line #2
if (!req.body.temp) {
throw "Temperature is undefined";
}
...
Starten Sie die Cloud-Funktion in Ihrem ersten Terminalfenster noch einmal, indem Sie den folgenden Befehl ohne das Flag „–inspect“ ausführen, um das Anhängen des Debuggers zu vermeiden.
node node_modules/@google-cloud/functions-framework --target=validateTemperature
Prüfen Sie, ob eine Ausnahme ausgelöst wird, indem Sie den folgenden Befehl in Ihrem zweiten Terminalfenster ausführen:
curl -X POST http://localhost:8080
Die Anfrage sollte die folgende Ausgabe zurückgeben:
Temperature is undefined
Im ersten Terminalfenster sehen Sie auch den von Ihrer Funktion protokollierten Fehler.
Serving function... Function: validateTemperature URL: http://localhost:8080/ got error: Temperature is undefined
Sie können die Ausführung Ihrer Funktion jetzt beenden, indem Sie in Ihrem ersten Terminalfenster Strg + C drücken.
6. HTTP-Funktion vom lokalen Computer in Google Cloud bereitstellen
Nachdem Sie eine Cloud-Funktion auf Ihrem lokalen Computer erstellt, getestet und Fehler behoben haben, können Sie sie in Google Cloud bereitstellen.
Prüfen Sie mit dem folgenden Befehl, ob Sie das Projekt, das Sie in Schritt 2 erstellt haben, lokal verwenden:
gcloud config get-value project
Wenn das in Schritt 2 angegebene Projekt nicht die aktive Konfiguration ist, führen Sie den folgenden Befehl aus:
gcloud config set project <project-name-created-step-2>
Führen Sie in einem beliebigen Terminalfenster den folgenden Befehl aus:
gcloud functions deploy validateTemperature --trigger-http --runtime nodejs12 --allow-unauthenticated
Die Parameter werden so erklärt:
deploy validateTemperature: Das gcloud-Unternehmen zum Bereitstellen einer Cloud Functions-Funktion mit dem NamenvalidateTemperaturemit einem Einstiegspunkt namensvalidateTemperature--trigger-http– der Typ des auslösenden Ereignisses--runtime nodejs12: Die Ziellaufzeit für diese Funktion.--allow-unauthenticated– ermöglicht öffentlichen Zugriff zum Aufrufen der Funktion
Sie werden aufgefordert, die Cloud Functions APIs zu aktivieren. Geben Sie y ein, um die APIs zu aktivieren.
API [cloudfunctions.googleapis.com] not enabled on project [1057316433766]. Would you like to enable and retry (this will take a few minutes)? (y/N)? y
Nach Abschluss der Bereitstellung wird in der Ausgabe Folgendes angezeigt:
Deploying function (may take a while - up to 2 minutes)...done. availableMemoryMb: 256 buildId: <your-build-id> entryPoint: validateTemperature httpsTrigger: url: https://<your-region-and-project>.cloudfunctions.net/validateTemperature ...
Rufen Sie diesen öffentlichen Endpunkt in Ihrem Terminalfenster mit curl auf.
curl -X POST https://<your-region-and-project>.cloudfunctions.net/validateTemperature -H "Content-Type:application/json" -d '{"temp":"50"}'
und prüfen Sie anhand der entsprechenden Antwort, ob Ihre Cloud-Funktion erfolgreich bereitgestellt wurde.
Temperature OK
7. Bereinigen
Um unbeabsichtigte Gebühren zu vermeiden, z.B. wenn diese Cloud-Funktion versehentlich öfter aufgerufen wird als Ihr monatliches Cloud Functions-Aufrufkontingent im kostenlosen Kontingent, können Sie entweder die Cloud-Funktion oder das Projekt löschen, das Sie in Schritt 2 erstellt haben.
Wenn Sie die Cloud-Funktion löschen möchten, rufen Sie die Cloud Console für Cloud Functions unter https://console.cloud.google.com/functions/ auf. Achten Sie darauf, dass das Projekt, das Sie in Schritt 2 erstellt haben, das aktuell ausgewählte Projekt ist.
Wählen Sie die Funktion „validateTemperature“ aus, die Sie in Schritt 6 bereitgestellt haben. Klicken Sie dann auf „Löschen“.

Wenn Sie das gesamte Projekt löschen möchten, rufen Sie https://console.cloud.google.com/cloud-resource-manager auf, wählen Sie das Projekt aus, das Sie in Schritt 2 erstellt haben, und klicken Sie auf „Löschen“. Wenn Sie das Projekt löschen, müssen Sie das Projekt in Ihrem Cloud SDK ändern. Mit dem Befehl „gcloud projects list“ können Sie eine Liste aller verfügbaren Projekte aufrufen.
8. Glückwunsch!
Herzlichen Glückwunsch zum Abschluss des Codelabs. Weitere Informationen zur Unterstützung der Node.js-Laufzeit durch Cloud Functions und zum lokalen Debugging mit Cloud Functions
Behandelte Themen
- Functions Framework für Node.js.
- HTTP-Cloud Functions-Funktion lokal erstellen und testen
- HTTP-Funktionen auf dem lokalen Computer debuggen
- HTTP-Funktion vom lokalen Computer bereitstellen