Idiomas da JVM
É possível escrever a sua função usando diferentes linguagens JVM (como Kotlin, Groovy ou Scala), desde que estejam em conformidade com as seguintes regras:
A função é uma classe pública que implementa uma das interfaces de funções (
HttpFunction
,BackgroundFunction
ouRawBackgroundFunction
) e tem um construtor público sem argumentos.Se estiver a implementar a partir da origem:
- Pode ser criado a partir do Maven.
- O ficheiro de compilação contém todos os plug-ins para produzir classes compiladas.
Se estiver a implementar a partir de um JAR pré-criado:
- Pode usar quaisquer ferramentas de compilação para produzir este JAR.
- O JAR pré-criado tem de ser um JAR completo com todas as respetivas classes de dependência ou o respetivo manifesto tem de conter uma entrada
Class-Path
com as localizações relativas dos JARs que contêm essas classes de dependência.
Exemplos de funções HTTP
Use funções HTTP quando quiser invocar a sua função através de um pedido HTTP(S). Os exemplos seguintes geram a mensagem
"Hello World!"
Kotlin
Groovy
Scala
pom.xml
para exemplos de HTTP
Seguem-se os ficheiros pom.xml
para os exemplos acima:
Kotlin
Groovy
Scala
Implementar as funções 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
Exemplos de funções orientadas por eventos
Use funções orientadas por eventos quando quiser que a sua função do Cloud Run seja invocada indiretamente em resposta a um evento assíncrono, como uma mensagem num tópico do Pub/Sub, uma alteração num contentor do Cloud Storage ou um evento do Firebase.
Existem dois tipos de funções acionadas por eventos: funções em segundo plano e funções CloudEvent. Os idiomas JVM só suportam funções em segundo plano.
Kotlin
Quando desenvolve funções em segundo plano, define classes para os eventos que acionam as suas funções. No entanto, a serialização GSON pode não funcionar imediatamente para Kotlin se a sua classe de eventos não seguir determinadas diretrizes.
Na classe de eventos Kotlin, as propriedades têm de estar em conformidade com estas diretrizes:
- Podem ser definidas como
null
. - Não têm um valor predefinido atribuído.
- Não são propriedades delegadas.
Outra abordagem é criar as classes de eventos em Java e usá-las a partir da classe de funções Kotlin.
Groovy
Scala
Implementar as funções em 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
Teste os exemplos de fundo
Pode testar os exemplos de fundo da seguinte forma:
Publique uma mensagem no seu tópico Pub/Sub para acionar a sua função:
gcloud pubsub topics publish my-topic --message Flurry
Consulte os registos:
gcloud functions logs read --limit 10
Deve ver algo semelhante a isto, com uma mensagem que inclui o nome que publicou no tópico do 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'