DEV Community

Jonathan
Jonathan

Posted on

Crear una función en Python para desplegar en OpenFaas (2/2)

Lo primero que necesitamos es el cliente de Open Faas “faas-cli” para lo cual podemos escoger desde su página los diferentes binarios CLI Install

En mi caso y para este ejemplo lo realizaré en Windows, para descargar el cliente lo primero es obtener la versión última del cli:

$version = (Invoke-WebRequest "https://api.github.com/repos/openfaas/faas-cli/releases/latest" | ConvertFrom-Json)[0].tag_name
Enter fullscreen mode Exit fullscreen mode

Y ahora descargamos el ejecutable de acuerdo a la última versión:

(New-Object System.Net.WebClient).DownloadFile("https://github.com/openfaas/faas-cli/releases/download/$version/faas-cli.exe", "faas-cli.exe")
Enter fullscreen mode Exit fullscreen mode

Podríamos agregar como variable de entorno en la ruta PATH para poder acceder a él sin necesidad de invocar toda la ruta o sino utilizarlo mediante la ruta absoluta del ejecutable.

En el blog anterior hable sobre la instalación de OpenFaas en el cual al finalizar se obtiene el password del servidor para poder ingresar

https://dev.to/jevillanueva/openfaas-con-k3s-en-un-servidor-arm64-2ib2

Ese password guardaremos en un archivo para poder iniciar sesión llamado “password.txt” esta es una forma de realizar el login, posteriormente conectamos utilizando el archivo “password.txt” apuntando al gateway de openfaas

cat .\password.txt | faas-cli.exe login -s --gateway https://faas.jevillanueva.dev
Enter fullscreen mode Exit fullscreen mode

Nos generará las credenciales para nuestro usuario almacenado en la carpeta de “usuarios/.openfaas”.

Fass cli, nos permite gestionar las imágenes de docker para ser cargadas a openfaas, utilizando build, push, deploy y up.

Existe muchas opciones para deployar cuenta con una variedad de templates

Para esta guía utilizaremos python

faas-cli new echo --lang python3

Crear Funcion

Genera una estructura de proyecto similar a esta

Estructura Proyecto

En el archivo handler.py se encuentra el request que se recibirá cuando esté en línea

def handle(req):
    """handle a request to the function
    Args:
        req (str): request body
    """
    return req
Enter fullscreen mode Exit fullscreen mode

Modificaremos el archivo “echo.yml” con las características de nuestro servidor de openfaas

#echo.yml
version: 1.0
provider:
  name: openfaas
  gateway: https://faas.jevillanueva.dev/ #Dirección del servidor openfaas
functions:
  echo:
    lang: python3
    handler: ./echo
    image: jevillanueva/echo-openfaas:latest #nombre de la imagen de docker
Enter fullscreen mode Exit fullscreen mode

Para estos ejemplos se esta utilizando imágenes públicas para que sea de fácil consumo y deploy utilizando Docker Hub como Container Registry

Realizamos el build

faas-cli build -f ./echo.yml
Enter fullscreen mode Exit fullscreen mode

Subimos al docker hub

faas-cli push -f ./echo.yml
Enter fullscreen mode Exit fullscreen mode

Una vez compilada y publicada la imagen en el docker hub ya podemos levantar la función en nuestro servidor openfaas

Levantamos la función utilizando

faas-cli deploy -f ./echo.yml
Enter fullscreen mode Exit fullscreen mode

Podemos visualizar desde la página de administración la función e invocar.

Funcion desplegada

Podemos probar nuestro endpoint utilizando postman o un curl

curl --request GET 'https://faas.jevillanueva.dev/function/echo' --header 'Content-Type: application/json' --data-raw '{"message": "Hola Mundo"}'
Enter fullscreen mode Exit fullscreen mode

Desde Postman

EXTRA

Como estamos trabajando sobre Windows en un equipo con Arquitectura de 64 Bits, y el servidor de OpenFaas está sobre ARM64 necesitaremos compilar las imágenes de docker de manera compatible para ARM utilizaremos para esto Buildx, donde nos permitirá otra forma de generar las imagenes y QEMU para virtualizar un entorno ARM. Para lo cual primero debemos descargar las herramientas de QEMU

docker run --rm --privileged  multiarch/qemu-user-static --reset -p yes
Enter fullscreen mode Exit fullscreen mode

Una vez descargadas las herramientas se puede realizar el publish multiarch en docker hub

faas-cli publish -f ./echo.yml --platforms linux/arm64,linux/amd64
Enter fullscreen mode Exit fullscreen mode

El proyecto implementado se encuentra en:
https://github.com/jevillanueva/echo-openfaas

https://hub.docker.com/r/jevillanueva/echo-openfaas

Recursos Utilizados:
https://docs.openfaas.com/cli/install/
https://docs.openfaas.com/cli/templates/
https://docs.docker.com/build/buildx/
https://www.qemu.org/

Para ver el post anterior de levantamiento de servidor de Open Faas pueden ver el post anterior
"OpenFaaS con K3S en un servidor ARM64 (1/2)"

Ahí les dejo mi página personal jevillanueva.dev

Top comments (0)