08 - Cloud Functions mit HTTP-Trigger in Java¶
In dieser Aufgabe werden wir eine Google Cloud Functions-Anwendung bereitstellen, die über einen HTTP-Trigger ausgeführt werden kann.
Projekt vorbereiten¶
Für Google Cloud Functions muss eine Reihe von APIs im GCP-Projekt aktiviert sein. Wechseln Sie als erstes im Browser in das GCP-Projekt, in dem Sie arbeiten möchten. Rufen Sie dann die API-Bibliothek auf:
https://console.cloud.google.com/apis/library
Aktivieren Sie dort die folgenden APIs:
- Cloud Functions API
- Cloud Build API
- Artifact Registry API
- Cloud Run API
- Cloud Logging API
Java-Projekt anlegen und vorbereiten¶
Erstellen Sie ein neues Maven-Projekt.
mvn archetype:generate -DgroupId=com.example -DartifactId=gcf \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
cd gcf
Fügen Sie danach in der POM folgende dependency und folgende build-Config
hinzu:
<dependencies>
<dependency>
<groupId>com.google.cloud.functions</groupId>
<artifactId>functions-framework-api</artifactId>
<version>1.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.functions</groupId>
<artifactId>function-maven-plugin</artifactId>
<version>0.11.0</version>
<configuration>
<functionTarget>functions.HelloWorld</functionTarget>
</configuration>
</plugin>
</plugins>
</build>
Main-Klasse hinzufügen¶
Entfernen Sie das src/test-Verzeichnis sowie die Datei App.java im
Verzeichnis src/main/java/com/example.
Legen Sie ein neues Verzeichnis src/main/java/functions an und darin eine neue
Datei HelloWorld.java mit folgendem Code ein:
package functions;
import com.google.cloud.functions.HttpFunction;
import com.google.cloud.functions.HttpRequest;
import com.google.cloud.functions.HttpResponse;
import java.io.BufferedWriter;
import java.io.IOException;
public class HelloWorld implements HttpFunction {
// Simple function to return "Hello World"
@Override
public void service(HttpRequest request, HttpResponse response)
throws IOException {
BufferedWriter writer = response.getWriter();
writer.write("Hello World!");
}
}
Funktion lokal ausführen¶
Um zu testen, ob die Funktion korrekt aufgesetzt ist, können Sie im Projektverzeichnis folgenden Befehl ausführen:
mvn function:run
Sie werden aufgefordert, die Funktion im Browser aufzurufen:

Funktion deployen¶
Um die Funktion in der Google Cloud zu deployen, führen Sie zuletzt folgende Befehle aus.
gcloud functions deploy java-http-function \
--gen2 \
--entry-point=functions.HelloWorld \
--runtime=java17 \
--region=europe-west1 \
--source=. \
--trigger-http \
--allow-unauthenticated
Wenn Sie dabei Fehler wie den folgenden erhalten, müssen Sie den Befehl wiederholen:
Enabling service [cloudbuild.googleapis.com] on project
[my-firebase-project-428308]...
Operation "operations/acf.p2-635965646353-abf09b33-b8a4-457f-9cee-16a51aed30ad"
finished successfully.
ERROR: (gcloud.functions.deploy) ResponseError: status=[404], code=[Ok],
message=[Service account projects/-/serviceAccounts/
635965646353-compute@developer.gserviceaccount.com was not found.]
Hintergrund ist dass die notwendigen Service Accounts erst nach dem Aktivieren der APIs angelegt werden. Wenn Sie weiter oben alle APIs aktiviert haben, sollten Sie hier allerdings nicht mehr in solche Fehler laufen.
Wenn die Funktion erfolgreich deployt wurde, erhalten Sie die folgende Ausgabe:
state: ACTIVE
updateTime: '2024-07-03T13:41:15.155204213Z'
url:
https://REGION-PROJECT.cloudfunctions.net/java-http-function
Die URL wird entsprechend anders aussehen. Rufen Sie die Seite auf und prüfen Sie das Ergebnis.