HTTP-Cloud Run Functions-Funktion mit Java (1. Generation) erstellen und bereitstellen

In diesem Leitfaden wird der Schreibvorgang für eine Cloud Run Functions-Funktion mit der Java-Laufzeit beschrieben. Es gibt zwei Arten von Cloud Run-Funktionen:

  • Eine HTTP-Funktion, die Sie über Standard-HTTP-Anfragen aufrufen.
  • Eine durch ein Ereignis ausgelöste Funktion, mit der Sie Ereignisse aus Ihrer Cloud-Infrastruktur verarbeiten können, z. B. Nachrichten in einem Pub/Sub-Thema oder Änderungen in einem Cloud Storage-Bucket.

In diesem Dokument wird gezeigt, wie Sie eine einfache HTTP-Funktion mit Maven oder Gradle erstellen.

Vorbereitung

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions and Cloud Build APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Functions and Cloud Build APIs.

    Enable the APIs

  8. Installieren und initialisieren Sie das Google Cloud SDK.
  9. Aktualisieren und installieren Sie gcloud-Komponenten:
    gcloud components update
  10. Bereiten Sie die Entwicklungsumgebung vor.

    Zum Einrichtungsleitfaden für Java

Funktion erstellen

In diesem Abschnitt wird beschrieben, wie Sie eine Funktion erstellen.

Maven

  1. Erstellen Sie in Ihrem lokalen System ein Verzeichnis für den Funktionscode:

    Linux oder Mac OS X:

     mkdir ~/helloworld
     cd ~/helloworld
    

    Windows:

     mkdir %HOMEPATH%\helloworld
     cd %HOMEPATH%\helloworld
    
  2. Erstellen Sie die Projektstruktur, die das Quellverzeichnis und die Quelldatei enthält.

    mkdir -p src/main/java/functions
    touch src/main/java/functions/HelloWorld.java
    
  3. Fügen Sie der HelloWorld.java-Datei diesen Inhalt hinzu:

    
    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!");
      }
    }

    Diese Beispielfunktion gibt die Begrüßung "Hello World!" aus.

Gradle

  1. Erstellen Sie in Ihrem lokalen System ein Verzeichnis für den Funktionscode:

    Linux oder Mac OS X:

     mkdir ~/helloworld-gradle
     cd ~/helloworld-gradle
    

    Windows:

     mkdir %HOMEPATH%\helloworld-gradle
     cd %HOMEPATH%\helloworld-gradle
    
  2. Erstellen Sie die Projektstruktur, die das Quellverzeichnis und die Quelldatei enthält.

     mkdir -p src/main/java/functions
     touch src/main/java/functions/HelloWorld.java
    
  3. Fügen Sie der HelloWorld.java-Datei diesen Inhalt hinzu:

    
    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!");
      }
    }

    Diese Beispielfunktion gibt die Begrüßung „Hello World!“ aus.

Abhängigkeiten angeben

Im nächsten Schritt werden die Abhängigkeiten eingerichtet:

Maven

Wechseln Sie in das Verzeichnis helloworld, das Sie oben erstellt haben, und erstellen Sie eine pom.xml-Datei:

 cd ~/helloworld
 touch pom.xml

Zum Verwalten von Abhängigkeiten mithilfe von Maven geben Sie die Abhängigkeiten im Abschnitt <dependencies> der Datei pom.xml Ihres Projekts an. Kopieren Sie für diese Übung die folgenden Inhalte in die Datei pom.xml.

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example.functions</groupId>
  <artifactId>functions-hello-world</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <properties>
    <maven.compiler.target>11</maven.compiler.target>
    <maven.compiler.source>11</maven.compiler.source>
  </properties>

  <dependencies>
    <!-- Required for Function primitives -->
    <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>
        <!--
          Google Cloud Functions Framework Maven plugin

          This plugin allows you to run Cloud Functions Java code
          locally. Use the following terminal command to run a
          given function locally:

          mvn function:run -Drun.functionTarget=your.package.yourFunction
        -->
        <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>
</project>

Unter helloworld finden Sie ein vollständiges Beispiel, das auf Maven basiert.

Gradle

Wechseln Sie in das Verzeichnis helloworld-gradle, das Sie oben erstellt haben, und erstellen Sie eine build.gradle-Datei:

 cd ~/helloworld-gradle
 touch build.gradle

Zum Verwalten von Abhängigkeiten mithilfe von Gradle geben Sie die Abhängigkeiten in der Datei build.gradle Ihres Projekts an. Kopieren Sie für diese Übung die folgenden Inhalte in die Datei build.gradle. Beachten Sie, dass die Datei build.gradle eine benutzerdefinierte Aufgabe enthält, damit Sie Funktionen lokal ausführen können.

apply plugin: 'java'

repositories {
  jcenter()
  mavenCentral()
}
configurations {
    invoker
}

dependencies {
  // Every function needs this dependency to get the Functions Framework API.
  compileOnly 'com.google.cloud.functions:functions-framework-api:1.1.0'

  // To run function locally using Functions Framework's local invoker
  invoker 'com.google.cloud.functions.invoker:java-function-invoker:1.3.1'

  // These dependencies are only used by the tests.
  testImplementation 'com.google.cloud.functions:functions-framework-api:1.1.0'
  testImplementation 'junit:junit:4.13.2'
  testImplementation 'com.google.truth:truth:1.4.0'
  testImplementation 'org.mockito:mockito-core:5.10.0'

}

// Register a "runFunction" task to run the function locally
tasks.register("runFunction", JavaExec) {
  main = 'com.google.cloud.functions.invoker.runner.Invoker'
  classpath(configurations.invoker)
  inputs.files(configurations.runtimeClasspath, sourceSets.main.output)
  args(
    '--target', project.findProperty('run.functionTarget') ?: '',
    '--port', project.findProperty('run.port') ?: 8080
  )
  doFirst {
    args('--classpath', files(configurations.runtimeClasspath, sourceSets.main.output).asPath)
  }
}

Unter helloworld-gradle finden Sie ein vollständiges Beispiel, das auf Gradle basiert.

Build lokal erstellen und testen

Bevor Sie die Funktion bereitstellen, können Sie sie lokal erstellen und testen:

Maven

Führen Sie den folgenden Befehl aus, um zu prüfen, ob Ihre Funktion erstellt wird:

mvn compile

Eine weitere Option besteht darin, den Befehl mvn package zu verwenden, um Ihren Java-Code zu kompilieren, Tests auszuführen und den Code in einer JAR-Datei im Zielverzeichnis zu verpacken. Weitere Informationen zum Maven-Build-Lebenszyklus

Testen Sie mit diesem Befehl die Funktion:

mvn function:run

Gradle

Führen Sie den folgenden Befehl aus, um zu prüfen, ob Ihre Funktion erstellt wird:

gradle build

Testen Sie mit diesem Befehl die Funktion:

gradle runFunction -Prun.functionTarget=functions.HelloWorld

Wenn der Test erfolgreich abgeschlossen ist, wird die URL angezeigt, die Sie in Ihrem Webbrowser aufrufen können, um die Funktion in Aktion zu sehen: http://localhost:8080/. Die Meldung Hello World! sollte angezeigt werden.

Alternativ können Sie Anfragen mit curl von einem anderen Terminalfenster aus an diese Funktion senden:

curl localhost:8080
# Output: Hello World!

Funktion implementieren

Maven

Stellen Sie die Funktion mit einem HTTP-Trigger mit diesem Befehl im Verzeichnis helloworld bereit:

gcloud functions deploy my-first-function --no-gen2 --entry-point functions.HelloWorld --runtime java17 --trigger-http --memory 512MB --allow-unauthenticated

Dabei ist my-first-function der registrierte Name, mit dem die Funktion in der Google Cloud Console identifiziert wird, und --entry-point der vollständig qualifizierter Klassennamen (FQN) der Funktion.

Gradle

Stellen Sie die Funktion mit einem HTTP-Trigger mit diesem Befehl im Verzeichnis helloworld-gradle bereit:

gcloud functions deploy my-first-function --no-gen2 --entry-point functions.HelloWorld --runtime java17 --trigger-http --memory 512MB --allow-unauthenticated

Dabei ist my-first-function der registrierte Name, mit dem die Funktion in der Google Cloud Console identifiziert wird, und --entry-point der vollständig qualifizierter Klassennamen (FQN) der Funktion.

So testen Sie die bereitgestellte Funktion

  1. Notieren Sie sich nach der Bereitstellung der Funktion das Attribut von httpsTrigger.url oder suchen Sie es mit diesem Befehl:

    gcloud functions describe my-first-function
    

    Dies sollte so aussehen:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/my-first-function
  2. Rufen Sie diese URL in Ihrem Browser auf: Die Meldung Hello World! sollte angezeigt werden.

Logs ansehen

Logs für Cloud Run Functions-Funktionen können über die Google Cloud CLI und in der Cloud Logging-UI aufgerufen werden.

Befehlszeilentool verwenden

Wenn Sie mit der gcloud CLI Logs für Ihre Funktion aufrufen möchten, verwenden Sie den Befehl logs read, gefolgt vom Namen der Funktion:

gcloud functions logs read my-first-function

Die Ausgabe sollte in etwa so aussehen:

LEVEL  NAME               EXECUTION_ID  TIME_UTC                 LOG
D      my-first-function  k2bqgroszo4u  2020-07-24 18:18:01.791  Function execution started
D      my-first-function  k2bqgroszo4u  2020-07-24 18:18:01.958  Function execution took 168 ms, finished with status code: 200
...

Logging-Dashboard verwenden

Sie können Logs für Cloud Run Functions-Funktionen auch über die Google Cloud Console aufrufen.