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 --runtime java17 --trigger-http --allow-unauthenticated --memory 512MB
Groovy
gcloud functions deploy groovy-helloworld --entry-point functions.GroovyHelloWorld --runtime java17 --trigger-http --allow-unauthenticated --memory 512MB
Scala
gcloud functions deploy scala-helloworld --entry-point functions.ScalaHelloWorld --runtime java17 --trigger-http --allow-unauthenticated --memory 512MB
事件驱动的函数示例
如果您希望间接调用 Cloud Run functions 函数来响应异步事件(例如,有关 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 --runtime java17 --trigger-topic my-topic --allow-unauthenticated --memory 512MB
Groovy
gcloud functions deploy groovy-hello-pubsub --entry-point functions.GroovyHelloPubSub --runtime java17 --trigger-topic my-topic --allow-unauthenticated --memory 512MB
Scala
gcloud functions deploy scala-hello-pubsub --entry-point functions.ScalaHelloPubSub --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'