Membuat dan men-deploy fungsi HTTP Cloud Run menggunakan Java (generasi ke-1)

Panduan ini membawa Anda melalui proses penulisan fungsi Cloud Run menggunakan runtime Java. Ada dua jenis fungsi Cloud Run:

  • Fungsi HTTP, yang Anda panggil dari permintaan HTTP standar.
  • Fungsi berbasis peristiwa, yang Anda gunakan untuk menangani peristiwa dari Cloud infrastruktur IT, seperti pesan pada topik Pub/Sub, atau perubahan bucket Cloud Storage.

Dokumen ini menunjukkan cara membuat fungsi HTTP sederhana dan membangunnya menggunakan Maven atau Gradle.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API Cloud Functions and Cloud Build.

    Mengaktifkan API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan API Cloud Functions and Cloud Build.

    Mengaktifkan API

  8. Instal dan lakukan inisialisasi Google Cloud SDK.
  9. Update dan instal komponen gcloud:
    gcloud components update
  10. Siapkan lingkungan pengembangan Anda.

    Buka panduan penyiapan Java

Membuat fungsi

Bagian ini menjelaskan cara membuat fungsi.

Maven

  1. Buat direktori di sistem lokal Anda untuk kode fungsi:

    Linux atau Mac OS X:

     mkdir ~/helloworld
     cd ~/helloworld
    

    Windows:

     mkdir %HOMEPATH%\helloworld
     cd %HOMEPATH%\helloworld
    
  2. Buat struktur project untuk memuat direktori sumber dan file sumber.

    mkdir -p src/main/java/functions
    touch src/main/java/functions/HelloWorld.java
    
  3. Tambahkan konten berikut ke file HelloWorld.java:

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

    Fungsi contoh ini menghasilkan ucapan "Halo Dunia!"

Gradle

  1. Buat direktori di sistem lokal Anda untuk kode fungsi:

    Linux atau Mac OS X:

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

    Windows:

     mkdir %HOMEPATH%\helloworld-gradle
     cd %HOMEPATH%\helloworld-gradle
    
  2. Buat struktur project untuk memuat direktori sumber dan file sumber.

     mkdir -p src/main/java/functions
     touch src/main/java/functions/HelloWorld.java
    
  3. Tambahkan konten berikut ke file HelloWorld.java:

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

    Fungsi contoh ini menghasilkan ucapan "Halo Dunia!"

Menentukan dependensi

Langkah berikutnya adalah menyiapkan dependensi:

Maven

Ubah direktori ke direktori helloworld yang Anda buat di atas, dan buat file pom.xml:

 cd ~/helloworld
 touch pom.xml

Untuk mengelola dependensi menggunakan Maven, tentukan dependensi di bagian <dependencies> di dalam file pom.xml project Anda. Untuk latihan ini, salin konten berikut ke file pom.xml Anda.

<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>

Lihat helloworld untuk mengetahui contoh lengkap berdasarkan Maven.

Gradle

Ubah direktori ke direktori helloworld-gradle yang Anda buat di atas, lalu buat file build.gradle:

 cd ~/helloworld-gradle
 touch build.gradle

Untuk mengelola dependensi menggunakan Gradle, tentukan dependensi dalam file build.gradle project Anda. Untuk latihan ini, salin konten berikut ke file build.gradle Anda. Perhatikan bahwa file build.gradle ini menyertakan tugas kustom untuk membantu Anda menjalankan fungsi secara lokal.

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)
  }
}

Lihat helloworld-gradle untuk mengetahui contoh lengkap berdasarkan Gradle.

Membuat dan menguji secara lokal

Sebelum men-deploy fungsi, Anda dapat membangun dan mengujinya secara lokal:

Maven

Jalankan perintah berikut untuk mengonfirmasi bahwa fungsi Anda di-build:

mvn compile

Opsi lainnya adalah menggunakan perintah mvn package untuk mengompilasi kode Java, menjalankan pengujian, dan mengemas kode ke dalam file JAR dalam direktori target. Anda dapat mempelajari lebih lanjut siklus proses build Maven di sini.

Untuk menguji fungsi, jalankan perintah berikut:

mvn function:run

Gradle

Jalankan perintah berikut untuk mengonfirmasi bahwa fungsi Anda dibangun:

gradle build

Untuk menguji fungsi, jalankan perintah berikut:

gradle runFunction -Prun.functionTarget=functions.HelloWorld

Jika berhasil diselesaikan, pengujian akan menampilkan URL yang dapat Anda buka di browser web untuk melihat cara kerja fungsi: http://localhost:8080/. Anda akan melihat pesan Hello World!.

Atau, Anda dapat mengirim permintaan ke fungsi ini menggunakan curl dari jendela terminal lain:

curl localhost:8080
# Output: Hello World!

Men-deploy cloud function

Maven

Untuk men-deploy fungsi dengan pemicu HTTP, jalankan perintah berikut di direktori helloworld:

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

dengan my-first-function adalah nama terdaftar yang akan digunakan untuk mengidentifikasi fungsi Anda di Konsol Google Cloud, dan --entry-point menentukan nama class yang sepenuhnya memenuhi syarat (FQN) dari fungsi Anda.

Gradle

Untuk men-deploy fungsi dengan pemicu HTTP, jalankan perintah berikut di direktori helloworld-gradle:

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

dengan my-first-function adalah nama terdaftar yang akan digunakan untuk mengidentifikasi fungsi Anda di Konsol Google Cloud, dan --entry-point menentukan nama class yang sepenuhnya memenuhi syarat (FQN) dari fungsi Anda.

Menguji fungsi yang di-deploy

  1. Setelah fungsi selesai di-deploy, catat properti httpsTrigger.url atau temukan menggunakan perintah berikut:

    gcloud functions describe my-first-function
    

    Kodenya akan terlihat seperti berikut:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/my-first-function
  2. Kunjungi URL ini di browser Anda. Anda akan melihat pesan Hello World!.

Lihat log

Log untuk fungsi Cloud Run dapat dilihat menggunakan Google Cloud CLI, dan di UI Cloud Logging.

Menggunakan alat command line

Untuk melihat log fungsi Anda dengan gcloud CLI, gunakan perintah logs read, diikuti dengan nama fungsi:

gcloud functions logs read my-first-function

Output akan terlihat seperti berikut:

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
...

Menggunakan dasbor Logging

Anda juga dapat melihat log untuk fungsi Cloud Run dari Konsol Google Cloud.