Lenguajes de JVM
Puedes escribir tu función con diferentes lenguajes de JVM (como Kotlin, Groovy o Scala) siempre que se cumplan las siguientes reglas:
La función es una clase pública que implementa una de las interfaces de la función (
HttpFunction
,BackgroundFunction
oRawBackgroundFunction
) y tiene un constructor público sin argumentos.Si realizas la implementación desde la fuente:
- Se puede compilar desde Maven.
- El archivo de compilación contiene todos los complementos necesarios para producir clases compiladas.
Si realizas la implementación desde un archivo JAR compilado previamente, haz lo siguiente:
- Puedes usar cualquier herramienta de compilación para producir este archivo JAR.
- El archivo JAR ya compilado debe ser un fat JAR con todas sus clases de dependencia, o su manifiesto debe contener una entrada
Class-Path
con las ubicaciones relativas de los archivos JAR que contienen esas clases de dependencia.
Ejemplos de funciones de HTTP
Debes usar funciones de HTTP cuando quieres invocar tu función a través de una solicitud HTTP(S). Los siguientes ejemplos generan el mensaje "Hello World!"
Kotlin
Groovy
Scala
Archivo pom.xml
para ejemplos de HTTP
Estos son los archivos pom.xml
de los ejemplos anteriores:
Kotlin
Groovy
Scala
Implementa las funciones de 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
Ejemplos de funciones controladas por eventos
Debes usar funciones controladas por eventos cuando quieres que se invoque la función de Cloud Run Functions de forma indirecta en respuesta a un evento asíncrono, como un mensaje en un tema de Pub/Sub, un cambio en un bucket de Cloud Storage o un evento de Firebase.
Existen dos tipos de funciones controladas por eventos: funciones en segundo plano y funciones de CloudEvent. Los lenguajes JVM solo admiten funciones en segundo plano.
Kotlin
Cuando desarrollas funciones en segundo plano, debes definir las clases para los eventos que activan tus funciones. Sin embargo, es posible que la serialización de GSON no funcione de inmediato para Kotlin si tu clase de evento no sigue ciertos lineamientos.
En tu clase de evento Kotlin, las propiedades deben cumplir con estos lineamientos:
- Se pueden configurar en
null
. - No tienen un valor predeterminado asignado.
- No son propiedades delegadas.
Otro enfoque es crear tus clases de eventos en Java y usarlas desde tu clase de función de Kotlin.
Groovy
Scala
Implementa las funciones en segundo plano
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
Prueba los ejemplos en segundo plano
Puedes probar los ejemplos en segundo plano de la siguiente manera:
Publica un mensaje en tu tema de Pub/Sub para activar tu función:
gcloud pubsub topics publish my-topic --message Flurry
Consulta los registros:
gcloud functions logs read --limit 10
Deberías ver algo como esto, con un mensaje que incluya el nombre que publicaste en el tema de 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'