Menjalankan fungsi dengan Framework Functions

Fungsi Cloud Run menggunakan library Framework Functions open source untuk menggabungkan fungsi yang di-deploy ke dalam aplikasi HTTP persisten.

Framework Functions juga dapat berjalan pada platform lain yang mendukung bahasa itu sendiri, termasuk mesin lokal Anda, server lokal, Compute Engine, dan Cloud Run.

Menginstal dependensi

Di direktori fungsi, instal library Framework Functions untuk bahasa Anda:

Lihat library Framework Functions Java untuk mengetahui informasi selengkapnya.

Node.js

npm install --save-dev @google-cloud/functions-framework

Python

pip3 install functions-framework

Go

go install github.com/GoogleCloudPlatform/functions-framework-go/funcframework

Java

Maven

Jika Anda menggunakan Maven, tambahkan kode berikut ke file pom.xml:

<dependency>
  <groupId>com.google.cloud.functions</groupId>
  <artifactId>functions-framework-api</artifactId>
  <version>1.1.0</version>
  <scope>provided</scope>
</dependency>

Gradle

Jika Anda menggunakan Gradle, tambahkan kode berikut ke file build.gradle:

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

C#

Perintah di bawah ini menggunakan Template .NET untuk membuat codebase fungsi Cloud Run .NET baru dengan library Framework Functions.NET sebagai dependensi:

# HTTP functions
dotnet new gcf-http

# CloudEvent functions
dotnet new gcf-event

Ruby

Di Ruby, Framework Functions harus ditambahkan ke dependensi fungsi Anda untuk menerapkannya ke fungsi Cloud Run:

bundle add functions_framework

PHP

composer require google/cloud-functions-framework

Mengonfigurasi Framework Functions

Sebelum menjalankan fungsi menggunakan Framework Functions, pertama-tama Anda harus menentukan jenis dan nama fungsi yang ingin dijalankan. Atribut ini dapat ditentukan sebagai flag antarmuka command line (CLI) atau sebagai variabel lingkungan.

Jenis fungsi yang didukung

Framework Functions mendukung kedua jenis fungsi yang didukung oleh fungsi Cloud Run. Semua runtime bahasa mendukung jenis tanda tangan http dan cloudevent.

Jenis fungsi Jenis tanda tangan Deskripsi Mendukung Runtime
Fungsi yang dipicu HTTP http Fungsi yang menerima dan merespons permintaan HTTP. Semua runtime
Fungsi CloudEvent cloudevent Format acara standar industri Semua runtime

Menentukan fungsi yang akan dijalankan

Sebelum menjalankan fungsi dengan Framework Functions, Anda harus terlebih dahulu menentukan fungsi mana dalam kode Anda yang harus dijalankan. Untuk sebagian besar bahasa, Anda dapat melakukannya dengan menentukan nama metode fungsi target seperti yang ditunjukkan pada tabel di bawah ini. (Pengecualian untuk aturan ini seperti Java dan .NET juga ditampilkan di bawah.)

Petunjuk per bahasa

Lihat tabel di bawah ini untuk daftar opsi konfigurasi yang didukung oleh setiap bahasa.

Node.js

Argumen CLI Variabel Lingkungan Deskripsi
--port PORT Port untuk memproses permintaan. (Default: 8080)
--target FUNCTION_TARGET Nama fungsi export yang akan dipanggil. (Default: function)
--signature-type FUNCTION_SIGNATURE_TYPE Jenis tanda tangan yang digunakan oleh fungsi Anda. Dapat berupa http (default) atau cloudevent.

Python

Argumen CLI Variabel Lingkungan Deskripsi
--port PORT Port untuk memproses permintaan. (Default: 8080)
--target FUNCTION_TARGET Nama fungsi export yang akan dipanggil. (Default: function)
--signature-type FUNCTION_SIGNATURE_TYPE Jenis tanda tangan yang digunakan oleh fungsi Anda. Dapat berupa http (default) atau cloudevent.

Go

Variabel Lingkungan Deskripsi
PORT Port untuk memproses permintaan. (Default: 8080)

Java

Nama Argumen Variabel Lingkungan Deskripsi
run.port PORT Port untuk memproses permintaan. (Default: 8080)
run.functionTarget FUNCTION_TARGET Nama fungsi export yang akan dipanggil. (Default: function)

C#

Argumen CLI Variabel Lingkungan Deskripsi
--port PORT Port untuk memproses permintaan. (Default: 8080)
--target (atau hanya argumen) FUNCTION_TARGET classname fungsi yang akan dipanggil. (Default: function)

Ruby

Argumen CLI Variabel Lingkungan Deskripsi
--port PORT Port untuk memproses permintaan. (Default: 8080)
--target FUNCTION_TARGET Nama fungsi export yang akan dipanggil. (Default: function)

PHP

Variabel Lingkungan Deskripsi
FUNCTION_TARGET Nama fungsi yang akan dipanggil. (Default: function)
FUNCTION_SIGNATURE_TYPE Jenis tanda tangan yang digunakan oleh fungsi Anda. Dapat berupa http (default) atau cloudevent.

Ikuti petunjuk di bawah untuk mengonfigurasi dan menjalankan Framework Functions:

Node.js

Dengan Framework Functions Node.js, Anda dapat menentukan nama fungsi dan jenis tanda tangan sebagai argumen command line atau variabel lingkungan.

Anda juga dapat menentukan nilai ini dalam buildfile package.json dengan menambahkan skrip start dengan argumen CLI yang diperlukan seperti yang ditunjukkan pada contoh di bawah.

"scripts": {
  "start": "npx functions-framework --target=YOUR_FUNCTION_NAME [--signature-type=YOUR_SIGNATURE_TYPE]"
}

Hal yang sama dapat dilakukan menggunakan variabel lingkungan:

"scripts": {
  "start": "FUNCTION_TARGET=YOUR_FUNCTION_NAME FUNCTION_SIGNATURE_TYPE=YOUR_SIGNATURE_TYPE npx functions-framework"
}

Ganti YOUR_FUNCTION_NAME dengan nama metode fungsi Anda, dan YOUR_SIGNATURE_TYPE (jika ada) dengan jenis tanda tangan fungsi Anda seperti yang ditunjukkan dalam tabel di atas.

Python

Dengan Framework Functions Python, Anda dapat menentukan nama dan jenis tanda tangan fungsi sebagai argumen command line atau variabel lingkungan. Argumen command line harus ditentukan saat Anda menjalankan framework.

Go

Framework Functions Go menggunakan funcframework.RegisterHTTPFunctionContext untuk menentukan target fungsi dan jenis tanda tangan.

Java

Framework Functions Java menerima data konfigurasi dari tiga sumber yang berbeda, dalam urutan prioritas berikut (paling spesifik ke paling tidak spesifik):

  • Argumen command line
  • File Build
  • Variabel lingkungan

Argumen command line

Maven

Anda dapat menentukan fungsi yang ingin dijalankan dengan menambahkan tanda antarmuka command line (CLI) berikut ke perintah mvn:

-Drun.functionTarget=YOUR_FUNCTION_NAME

Anda juga dapat menentukan port target dengan menambahkan flag CLI berikut dengan cara yang sama:

-Drun.port=12345

Gradle

Flag CLI Gradle hampir identik dengan Maven. Satu-satunya perubahan yang dilakukan Gradle adalah menukar -D utama di setiap flag dengan -P seperti yang ditunjukkan dalam contoh di bawah:

# Maven version
-Drun.functionTarget=...

# Gradle version
-Prun.functionTarget=...

File Build

Anda juga bisa menetapkan fungsi yang ingin dijalankan di file build project Anda. Meskipun Maven dan Gradle memiliki flag CLI yang serupa, klausa file build-nya memiliki perbedaan yang signifikan.

Maven

File build Maven diberi nama pom.xml. Tambahkan klausa berikut ke file ini untuk menentukan fungsi target:

<plugin>
  <groupId>com.google.cloud.functions</groupId>
  <artifactId>function-maven-plugin</artifactId>
  <version>0.11.0</version>
  <configuration>
    <functionTarget>functions.HelloWorld</functionTarget>
  </configuration>
</plugin>

Ganti <functionTarget> dengan nama class fungsi Anda. (Misalnya, fungsi dalam paket functions dengan nama class HelloCloudFunctions akan memiliki nama class functions.HelloCloudFunctions. Ini berhubungan dengan file build induk - pom.xml atau build.gradle).

Gradle

File build Gradle diberi nama build.gradle. Tambahkan klausa berikut ke file ini untuk menentukan fungsi target:

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

C#

Jika Anda membuat project menggunakan dotnet new dan salah satu template yang ditentukan di atas, Framework Functions .NET akan otomatis mendeteksi fungsi Anda.

Jika project Anda berisi beberapa fungsi, lihat bagian Menjalankan Framework untuk mengetahui informasi tentang cara menjalankan fungsi tertentu.

Ruby

Dengan Framework Functions Ruby, Anda dapat menentukan nama fungsi dan jenis tanda tangan sebagai argumen command line atau variabel lingkungan. Argumen command line harus ditentukan saat Anda menjalankan framework.

PHP

Dengan Framework Functions PHP, Anda dapat menentukan variabel lingkungan sebagai argumen command line.

Anda juga dapat menentukan nilai ini dalam file build composer.json dengan menambahkan skrip start seperti yang ditunjukkan pada contoh di bawah.

"scripts": {
   "start": [
       "Composer\\Config::disableProcessTimeout",
       "FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:${PORT:-8080} vendor/bin/router.php"
    ]
}

Ganti YOUR_FUNCTION_NAME dengan nama fungsi Anda, dan YOUR_SIGNATURE_TYPE (jika ada) dengan jenis tanda tangan fungsi Anda seperti yang ditunjukkan dalam tabel di atas.

Menjalankan Framework Functions

Gunakan perintah berikut untuk menjalankan fungsi Anda dengan Framework Functions. Secara default, fungsi dapat diakses di localhost:8080 kecuali jika Anda menentukan nilai PORT.

Node.js

npm start

Python

Menggunakan argumen command line:

functions-framework --target=YOUR_FUNCTION_NAME

Menggunakan variabel lingkungan:

FUNCTION_TARGET=YOUR_FUNCTION_NAME functions-framework

Ganti YOUR_FUNCTION_NAME dengan nama metode fungsi Anda.

Go

cd cmd
go build
./cmd

Menggunakan variabel lingkungan:

cd cmd
go build
PORT=8080 ./cmd

Java

Maven

Gunakan perintah berikut untuk menjalankan fungsi yang ditentukan di pom.xml:

mvn function:run

Gunakan perintah berikut untuk menjalankan fungsi yang ditetapkan dalam argumen command line:

mvn function:run -Drun.functionTarget=YOUR_FUNCTION_NAME

Gunakan perintah berikut untuk menjalankan fungsi yang ditentukan sebagai variabel lingkungan:

FUNCTION_TARGET=YOUR_FUNCTION_NAME mvn function:run

Ganti YOUR_FUNCTION_NAME dengan nama class fungsi Anda.

Gradle

Gunakan perintah berikut untuk menjalankan fungsi yang ditentukan di build.gradle:

./gradlew runFunction

Gunakan perintah berikut untuk menjalankan fungsi yang ditetapkan dalam argumen command line:

./gradlew runFunction -Prun.functionTarget=YOUR_FUNCTION_NAME

Gunakan perintah berikut untuk menjalankan fungsi yang ditentukan sebagai variabel lingkungan:

FUNCTION_TARGET=YOUR_FUNCTION_NAME ./gradlew runFunction

Ganti YOUR_FUNCTION_NAME dengan nama class fungsi Anda.

C#

Gunakan perintah berikut untuk menjalankan fungsi saat hanya ada satu fungsi dalam project .NET saat ini. (Ini adalah struktur default untuk project yang dibuat dengan template.)

dotnet run

Jika project .NET Anda berisi beberapa fungsi, gunakan perintah berikut untuk menjalankan fungsi tertentu. Ganti YOUR_FUNCTION_CLASSNAME dengan nama class fungsi Anda, termasuk namespace.

dotnet run YOUR_FUNCTION_CLASSNAME

Jika ingin menjalankan beberapa fungsi secara bersamaan, Anda harus menjalankan beberapa instance Framework Functions. Untuk menghindari konflik antara menjalankan instance framework, setiap instance harus menggunakan nilai PORT yang berbeda. Perintah berikut menunjukkan cara menjalankan fungsi dengan nilai PORT 8080.

Menggunakan argumen command line:

dotnet run --target YOUR_FUNCTION_CLASSNAME --port 8080

Menggunakan variabel lingkungan:

FUNCTION_TARGET=YOUR_FUNCTION_CLASSNAME PORT=8080 dotnet run

Ruby

Menggunakan argumen command line:

bundle exec functions-framework-ruby --target YOUR_FUNCTION_NAME

Menggunakan variabel lingkungan:

FUNCTION_TARGET=YOUR_FUNCTION_NAME bundle exec functions-framework-ruby

Ganti YOUR_FUNCTION_NAME dengan nama metode fungsi Anda.

PHP

export FUNCTION_TARGET=YOUR_FUNCTION_NAME
php -S localhost:8080 vendor/bin/router.php

Ganti YOUR_FUNCTION_NAME dengan nama fungsi Anda.

Memanggil fungsi Anda

Lihat halaman memanggil fungsi lokal untuk mendapatkan petunjuk tentang cara berinteraksi dengan fungsi yang berjalan secara lokal.

Pembersihan

Setelah selesai menjalankan fungsi, hentikan instance framework yang sedang berjalan dengan menekan Control+C.