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
pom.xml
檔案 (HTTP 範例)
以下是上述範例的 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
開發背景函式時,您會為觸發函式的事件定義類別。不過,如果事件類別未遵循特定規範,GSON 配對可能無法在 Kotlin 中運作。
在 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'