Saltar al contenido

Aplicaciones Flogo ejecutándose como Funciones de Azure

Serverless ya está aquí. Lo sabemos. Incluso para las empresas que están comenzando su viaje en la nube moviéndose a plataformas basadas en contenedores, ya saben que serverless está en su visión futura al menos para algunos casos de uso específicos.

Su simplicidad sin necesidad de preocuparse por nada relacionado con la plataforma solo se enfoca en el código y también la economía que viene con ellos hace que este modelo de computación sea un cambio de juego.

La plataforma principal para este enfoque en este momento es AWS Lambda de Amazon, hemos leído y escuchado mucho sobre AWS Lambda, pero todas las plataformas van por ese camino. Google con sus Google Functions, Microsoft con su Azure. Esto no es solo una cosa para los proveedores de nube pública, también si estás operando en un enfoque de nube privada puedes usar este modo de implementación usando frameworks como KNative o OpenFaaS. Si necesitas más detalles al respecto, también tuvimos algunos artículos sobre este tema:

Todas estas plataformas están actualizando y mejorando su opción para ejecutar cualquier tipo de código que desees en ellas, y esto es lo que Azure Function acaba de anunciar hace unas semanas, el lanzamiento de un enfoque de Custom Handler para soportar cualquier tipo de lenguaje que puedas imaginar:

Y vamos a probar eso haciendo lo que más nos gusta ………..

…. ¡Ejecutar una aplicación Flogo sobre eso!

Así que, ¡empecemos a trabajar!

Foto de Serghei Trofimov en Unsplash

Lo primero que necesitamos hacer es crear nuestra aplicación Flogo. Voy a usar Flogo Enterprise para hacer eso, pero puedes hacer lo mismo usando la versión de código abierto también:

Vamos a crear una aplicación simple, solo un servicio REST de Hello World. Como puedes ver aquí:

El archivo JSON de la aplicación Flogo puedes encontrarlo en el repositorio de GitHub que se muestra a continuación:

Pero las configuraciones principales son las siguientes:

  • El servidor escuchará en el puerto especificado por la variable de entorno FUNCTIONS_HTTPWORKER_PORT
  • El servidor escuchará una solicitud GET en la URI /hello-world
  • La respuesta será bastante simple “Invocando una aplicación Flogo dentro de Azure Functions”

Ahora, que tenemos el archivo JSON, solo necesitamos comenzar a crear los artefactos necesarios para ejecutar una función de Azure.

Necesitaremos instalar el paquete npm para las Azure Functions. Para hacer eso necesitamos ejecutar el siguiente comando:

npm i -g azure-functions-core-tools@3 --unsafe-perm true

Es importante tener el “@3” porque de esa manera hacemos referencia a la versión que tiene esta nueva lógica de Custom Handler para poder ejecutarla.

Crearemos una nueva carpeta llamada flogo-func y ejecutaremos el siguiente comando dentro de esa carpeta:

func init --docker

Ahora deberíamos seleccionar node como el entorno de ejecución a usar y javascript como el lenguaje. Eso podría ser algo extraño porque no vamos a usar ni node, ni dotnet ni python ni powershell. Pero seleccionaremos eso para mantenerlo simple ya que solo intentamos enfocarnos en el enfoque de Docker para hacerlo.

Después de eso solo necesitamos crear una nueva función, y para hacer eso necesitamos escribir el siguiente comando:

func new

En la interfaz basada en CLI que nos muestra las Azure Function Core Tools, solo necesitamos seleccionar HTTP trigger y proporcionar un nombre.

En nuestro caso, usaremos hello-world como el nombre para mantenerlo similar a lo que definimos como parte de nuestra aplicación Flogo. Terminaremos con la siguiente estructura de carpetas:

Ahora necesitamos abrir la carpeta que se ha creado y necesitamos hacer varias cosas:

  • Primero que todo, necesitamos eliminar el archivo index.js porque no necesitamos ese archivo ya que esta no será una función de node JS.
  • Necesitamos copiar el HelloWorld.json (nuestra aplicación Flogo) a la carpeta raíz de la función.
  • Necesitamos cambiar el archivo host.json al siguiente contenido:
{
  "version": "2.0",
  "httpWorker": {
     "description": {
            "arguments": ["-app"],
            "defaultExecutablePath": "engine-windows-amd64.exe",
            "defaultWorkerPath": "HelloWorld.json"
      }
   }
}

Ahora, necesitamos generar el engine-windows-amd64.exe y para poder hacer eso necesitamos ir al FLOGO_HOME en nuestra máquina e ir a la carpeta FLOGO_HOME/flogo/<VERSION>/bin y lanzar el siguiente comando:

./builder-windows-amd64.exe build

Y deberías obtener el engine-windows-amd64.exe como salida como puedes ver en la imagen a continuación:

Ahora, solo necesitas copiar ese archivo dentro de la carpeta de tu función, y deberías tener la siguiente estructura de carpetas como puedes ver aquí:

Y una vez que tengas eso, solo necesitas ejecutar tu función para poder probarla localmente:

func start

Después de ejecutar ese comando deberías ver una salida similar a la que se muestra a continuación:

¡Solo me gustaría resaltar el tiempo de inicio para nuestra aplicación Flogo alrededor de 15 milisegundos! Ahora, solo necesitas probarlo usando cualquier navegador y solo ir a la siguiente URL:

http://localhost:7071/api/hello-world

Este ha sido solo el primer paso en nuestro viaje, pero fueron los pasos necesarios para poder ejecutar nuestra aplicación Flogo como parte de tu entorno serverless alojado por la plataforma Microsoft Azure!