JVM 語言
只要符合下列規則,您就能使用不同的 JVM 語言 (例如 Kotlin、Groovy 或 Scala) 編寫函式:
函式是實作其中一個函式介面 (
HttpFunction
、BackgroundFunction
或RawBackgroundFunction
) 的公用類別,且具有公用無引數建構函式。如果您要從來源部署:
- 可從 Maven 建構。
- 建構檔案包含所有外掛程式,可產生已編譯的類別。
如果您是從預先建構的 JAR 部署:
- 您可以使用任何建構工具來產生這個 JAR。
- 預先建構的 JAR 必須是 Fat JAR,內含所有依附元件類別,或資訊清單必須包含
Class-Path
項目,其中含有包含這些依附元件類別的 JAR 相對位置。
HTTP 函式範例
如要透過 HTTP(S) 要求叫用函式,請使用 HTTP 函式。下列範例會輸出訊息 "Hello World!"
Kotlin
Groovy
Scala
HTTP 範例的 pom.xml
檔案
以下是上述範例的 pom.xml
檔案:
Kotlin
Groovy
Scala
部署 HTTP 函式
Kotlin
gcloud functions deploy kotlin-helloworld --entry-point functions.KotlinHelloWorld --no-gen2 --runtime java17 --trigger-http --allow-unauthenticated --memory 512MB
Groovy
gcloud functions deploy groovy-helloworld --entry-point functions.GroovyHelloWorld --no-gen2 --runtime java17 --trigger-http --allow-unauthenticated --memory 512MB
Scala
gcloud functions deploy scala-helloworld --entry-point functions.ScalaHelloWorld --no-gen2 --runtime java17 --trigger-http --allow-unauthenticated --memory 512MB
事件導向函式範例
當您想間接叫用 Cloud Run 函式來回應非同步事件時,請使用事件驅動函式,例如 Pub/Sub 主題上的訊息、Cloud Storage 值區的變更或 Firebase 事件。
事件驅動函式分為兩種:背景函式和 CloudEvent 函式。JVM 語言僅支援背景函式。
Kotlin
開發背景函式時,您會為觸發函式的事件定義類別。不過,如果您的事件類別不符合特定規範,Kotlin 的 GSON 編組可能無法正常運作。
在 Kotlin 事件類別中,屬性必須符合下列規範:
- 可設為
null
。 - 這些屬性沒有預設值。
- 這些不是委派屬性。
另一種做法是在 Java 中建立事件類別,然後從 Kotlin 函式類別中使用這些類別。
Groovy
Scala
部署背景函式
Kotlin
gcloud functions deploy kotlin-hello-pubsub --entry-point functions.KotlinHelloPubSub --no-gen2 --runtime java17 --trigger-topic my-topic --allow-unauthenticated --memory 512MB
Groovy
gcloud functions deploy groovy-hello-pubsub --entry-point functions.GroovyHelloPubSub --no-gen2 --runtime java17 --trigger-topic my-topic --allow-unauthenticated --memory 512MB
Scala
gcloud functions deploy scala-hello-pubsub --entry-point functions.ScalaHelloPubSub --no-gen2 --runtime java17 --trigger-topic my-topic --allow-unauthenticated --memory 512MB
測試背景範例
您可以按照下列方式測試背景範例:
將訊息發布至 Pub/Sub 主題,藉此觸發函式:
gcloud pubsub topics publish my-topic --message Flurry
查看記錄:
gcloud functions logs read --limit 10
您應該會看到類似下方的訊息,其中包含您發布至 Pub/Sub 主題的名稱:
D my-function ... Function execution started
I my-function ... Hello Flurry!
D my-function ... Function execution took 39 ms, finished with status: 'ok'