Creando una función Spring Cloud Function sobre Fn Project

Si en este post explicábamos la base de Spring Cloud Function hoy toca ver cómo crear una función Spring Cloud Function sobre el runtime de Fn.

Para eso seguiremos estos pasos:

PASOS PREVIOS:

  1. Arranco Fn (en este post explicábamos cómo instalar Fn)

fn start

O sudo fn start en Linux

  1. Me descargo la última imagen del runtime JDK para Java que incluye el soporte Spring (para hacer el pull tendréis que haber hecho el login en Docker con docker login)

docker pull fnproject/fn-java-fdk:1.0-latest

CREAR APP Y FUNCIÓN

  1. Para crear una función de tipo Spring Cloud Function usaré el Runtime Java lanzando algo tipo::

fn init –runtime java springcloudfunction-fn

Esto inicializará el runtime Java y creará la app de ejemplo.

Luego creo la app con fn create app springcloudfunction-app

  1. Me muevo al directorio springcloudfunction-fn, que habrá creado un pom.xml (proyecto Maven), un func.yaml (Descriptor Fn) y una carpeta src para los fuentes (con una función y un test):
  1. Para usar Spring Cloud Function tengo que añadir las dependencias en el pom.xml, para eso lo más sencillo es que copiemos las dependencias del repositorio https://github.com/fnproject/fn-spring-cloud-function-example que es un ejemplo de aplicación Spring Cloud Function, concretamente añadiré esta dependencia:

NOTA: Justo en el tiempo que escribía este artículo (versión 1.0.124) el proyecto fnproject ha pasado de com.fnproject.fn a io.fnproject.fn por lo que es posible que necesitéis actualizar el pom.xml generado.

  1. Ahora cambiaré la función de ejemplo que se ha creado,

Convirtiéndola en

Código aquí

  1. Puedo ejecutar el Test para comprobar que la función ejecuta:

Y

O hacer un mvn clean install

  1. Ahora ya puedo hacer el build de mi función con fn build

  1. Y hacer el deploy con fn deploy –local –app springcloudfunction-app

  1. Para invocarlo puedo usar fn invoke springcloudfunction-app springcloudfunction-fn (de fn invoke <app> <function>)

O

  1. O bien hacer un fn inspect function springcloudfunction-app springcloudfunction-fn (de fn inspect function <app> <function>) para extraer la URL directa de invocación:

E invocarlo con curl -X “POST” http://localhost:8080/invoke/01F32KP510NG8G00GZJ0000002

  1. Para acabar crearé un Trigger HTTP de mi función para poder invocarla desde http con una url tipo http://localhost:8080/t/springcloudfunction-fn/hello

Para eso en mi func.yml añadiré esto:

Haré un nuevo deploy: fn deploy –local –app springcloudfunction-app

Y comprobaré que se ha creado el trigger: fn list triggers springcloudfunction-app

Ahora podré invocar mi función a través de este endpoint con: curl -d “Luismi” -X “POST” http://localhost:8080/t/springcloudfunction-app/hello

Podéis encontrar el ejemplo completo creado en este post aquí: https://github.com/lmgracia/fn_project-spring-cloud-function_example

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s