Lenguajes de JVM
Puedes escribir tu función en diferentes lenguajes de JVM (como Kotlin, Groovy o Scala) siempre que cumplan las siguientes reglas:
La función es una clase pública que implementa una de las interfaces de función (
HttpFunction
,BackgroundFunction
oRawBackgroundFunction
) y tiene un constructor público sin argumentos.Si vas a desplegar desde el código fuente:
- Se puede compilar desde Maven.
- El archivo de compilación contiene todos los complementos para generar clases compiladas.
Si vas a implementar desde un archivo JAR precompilado, haz lo siguiente:
- Puedes usar cualquier herramienta de compilación para generar este archivo JAR.
- El archivo JAR precompilado debe ser un archivo JAR Fat con todas sus clases de dependencia o su manifiesto debe contener una entrada
Class-Path
con las ubicaciones relativas de los archivos JAR que contengan esas clases de dependencia.
Ejemplos de funciones HTTP
Las funciones HTTP se usan cuando quieres invocar tu función mediante una solicitud HTTP(S). En los siguientes ejemplos se muestra 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
Desplegar las funciones 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
Ejemplos de funciones basadas en eventos
Las funciones basadas en eventos se usan cuando quieres que tu función de Cloud Run se invoque de forma indirecta en respuesta a un evento asíncrono, como un mensaje en un tema de Pub/Sub, un cambio en un segmento de Cloud Storage o un evento de Firebase.
Hay dos tipos de funciones basadas en eventos: funciones en segundo plano y funciones de CloudEvents. Los lenguajes de JVM solo admiten funciones en segundo plano.
Kotlin
Al desarrollar funciones en segundo plano, se definen clases para los eventos que activan las funciones. Sin embargo, es posible que la serialización de GSON no funcione de forma predeterminada en Kotlin si tu clase de evento no sigue determinadas directrices.
En tu clase de evento de Kotlin, las propiedades deben cumplir estas directrices:
- Se pueden configurar en
null
. - No tienen ningún valor predeterminado asignado.
- No son propiedades delegadas.
Otra opción es crear las clases de eventos en Java y usarlas desde la clase de función de Kotlin.
Groovy
Scala
Desplegar las funciones en segundo plano
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
Probar los ejemplos de fondo
Para probar los ejemplos de fondo, siga estos pasos:
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ía ver algo parecido a esto, con un mensaje que incluya el nombre que ha publicado 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'