¿Cómo utilizar el módulo Serverless Manager?

Disponible desde la versión 3.2.0

Introducción

En esta guía explicaremos cómo utilizar el módulo Serverless de plataforma, para poder desplegar funciones de manera similar a la funcionalidad de los microservicios.

Recomendamos echar un vistazo a esta guía para comprender los diferentes conceptos involucrados en esta funcionalidad.

Conceptos

Se ha integrado un módulo nuevo en la plataforma que permite desarrollar componentes en forma de Funciones, utilizando una arquitectura serverless. Este módulo está basado en el proyecto Open Source fn project.

Siguiendo el esquema que propone fn, distinguimos dos conceptos a tener en cuenta: aplicaciones y funciones.

Las aplicaciones engloban un conjunto de funciones, y cada usuario de plataforma puede crear tantas aplicaciones como necesite. Estás aplicaciones tendrán asociado un repositorio de Git de trabajo, donde residirá el código de todas las funciones que pertenezcan a dichas aplicaciones.

Así mismo, dentro de cada aplicación se podrán crear N funciones. A efectos prácticos, una función será un proyecto de código (Java/Maven, Python,…) con una estructura que detallaremos más adelante. Cada función será responsable de ejecutar una funcionalidad específica.

Aplicaciones

Listado

Si te diriges dentro del menú de Desarrollo a Mis aplicaciones Serverless o Gestión de aplicaciones Serverless (dependiendo del rol que tengas), verás un listado donde se mostrarán todas tus aplicaciones creadas.

Para cada función se mostraran datos en la tabla como: propietario, repositorio de Git, nº de funciones en la aplicación…

Creación

Para crear una nueva aplicación, tendrás que darle dentro del listado al icono del ‘+'.

A la hora de crear una nueva aplicaciones, se te pedirán las credenciales de Git (GitHub o GitLab), y se te preguntará si quieres crear un proyecto nuevo asociado a dicha aplicación. En caso negativo, tendrás que especificar también la URL del repositorio Git existente.

Este repositorio Git creado o ya existente, será el repositorio de trabajo donde desarrollarás las funciones de la aplicación.

NOTA: Próximamente se incorporará una funcionalidad que permitirá crear las aplicaciones con varios arquetipos a modo de ejemplo sobre los que empezar a desarrollar las funciones.

Modificación

En la pantalla de modificación de aplicación, accesible desde el listado a través del icono del lápiz, podrás únicamente modificar la información relativa al nombre y la configuración de Git.

Borrado

La aplicación podrá ser borrada tanto desde el listado como desde las páginas de edición y vista.

Lo único que hay que tener en cuenta es que, aunque se borre tanto la aplicación como sus funciones, el repositorio de Git no se borrará.

Vista

Desde la página de vista, podrás ver tanto la información general de la aplicación como el listado de funciones de la misma.

Información general:

Aquí encontrarás la información relativa al Git, así como las variables de entorno definidas en la aplicación.

Estas variables de entorno serán accesibles desde todas y cada una de las funciones de la aplicación. No obstante, podrán ser sobrescritas a nivel de función.

Listado de funciones:

En la segunda pestaña de la vista, podrás ver un listado de funciones con datos relevantes como: versión de la función, memoria asignada, nombre, ruta relativa dentro del proyecto Git, endpoints de invocación…

Además desde este listado, podrás crear, editar, borrar y desplegar funciones.

Funciones

Creación

Desde la vista de una aplicación podemos crear nuevas funciones.

A la hora de crear una función se nos pedirá únicamente el nombre de la función y el path relativo dentro del repositorio Git. En el momento de la creación no es necesario que exista el código asociado a la función dentro del repositorio, pero sí tendrá que existir a la hora de desplegarla.

Estructura de código de una función:

La estructura de la función vendrá dada por el lenguaje de programación que se vaya a utilizar. Podrá ser un proyecto Maven, Java, Go, Python… Aquí hay una lista de los lenguajes soportados.

Sea cual sea el lenguaje, será necesario incluir en el directorio raíz de la función un fichero ‘func.yaml’, donde vendrá la información necesaria para la compilación, despliegue y ejecución de la función.

A continuación se muestra un ejemplo de estructura con una función maven y otra python.

Para completar el fichero func.yaml, recomendamos ver este documento dónde se explica cada propiedad.

Func.yaml de una función java:

schema_version: 20180708 name: ontology version: 0.0.26 runtime: java11 build_image: fnproject/fn-java-fdk-build:jdk11-1.0.124 run_image: fnproject/fn-java-fdk:jre11-1.0.124 cmd: com.minsait.onesait.OntologyCalculationFn::handleRequest config: API_KEY: 26104876616f40908e3643ed1f6357d1 GRAYLOG_HOST: log-centralizer GRAYLOG_PORT: "12201" triggers: - name: endpoint type: http source: /calculate

 

Func.yaml de una función python:

schema_version: 20180708 name: pythonfn version: 0.0.1 runtime: python entrypoint: /python/bin/fdk /function/func.py handler memory: 256 config: API_KEY: 26104876616f40908e3643ed1f6357d1 triggers: - name: endpoint type: http source: /pythonfn

 

A continuación dejamos un zip con 3 ejemplos de funciones.

Modificación

En la pantalla de modificación de una función puedes actualizar tanto el nombre de tu función como la ruta relativa dentro del repositorio.

Borrado

Puedes borrar una función (pero no el código del repositorio) desde el listado de funciones de una aplicación o desde la pantalla de modificación.

Despliegue

Cuando tengas lista tu función, podrás desplegarla desde el icono del cohete, en el listado de funciones.

Este podrá tardar hasta 1 minuto. Una vez finalizado el despliegue, se recargará la página y verás cómo se incrementa la versión de la función desplegada (quedará reflejado en el func.yaml del repositorio con un commit).

Invocación HTTP

Una vez desplegada la función, podrás invocarla vía HTTP para ejecutarla u probarla. Existen dos tipos de endpoints invocables: auto-generados y triggers HTTP.

Los primeros los genera automáticamente el gestor de fn, y los segundos se definen desde el func.yaml

Los auto-generados siempre tienen la forma de /fn/invoke/{UUID} , y serán siempre peticiones POST.

Los triggers pueden ser invocados con el verbo GET o POST, en función de si tu función necesita recibir algún payload o no.