Azure Functions en Kubernetes

Si estás trabajando con Azure Functions y también con Kubernetes es posible que, en algunos escenarios, te interese valorar el despliegue de tus funciones en tu clúster. En este artículo te cuento cómo crear y desplegar una Azure Function dentro de Kubernetes.
Crear una Azure Function de ejemplo
Existen diferentes formas de crear una Azure Function. Lo más sencillo es haciendo uso de las extensión de Visual Studio Code, o a través de los asistentes de Visual Studio 2019 o Visual Studio for Mac. Sin embargo para este artículo voy a hacerlo a través de la línea de comandos con las Azure Functions Core Tools.
Parar crear el proyecto que almacenará tus funciones debes utilizar func init:
Durante el asistente he elegido node y javascript para este ejemplo.
Esto crea el proyecto, pero ahora necesito crear una función que desplegar:
Antes de preparar nuestra función para poder ser desplegada en un contendor, puedes comprobar que funciona correctamente ejecutándola en local a través del siguiente comando:
Si todo es correcto, en el resultado debería de devolverte la URL para acceder a tu función.

Ahora que ya tienes todo listo, antes de continuar, para esta prueba modifica el nivel de autorización de tu Azure Functions en function.json a anonymous.
Dockerizar tu función para Kubernetes
Como te puedes imaginar, para que tu función pueda correr en Kubernetes esta debe estar dockerizada. La forma más sencilla de conseguirlo es a través del siguiente comando:
Esto generará dos archivos: un Dockerfile, con este contenido:
y un .dockerignore para omitir el archivo local.settings.json de la imagen que se va a generar.
Desplegar tu Azure Function
El último paso es llevar a cabo el despliegue:
Cuando lanzas este comando, lo primero que ocurre es la creación de la imagen y, en este ejemplo, la sube a la cuenta de docker con la que has iniciado sesión. Una vez que esta disponible genera tres recursos: un secreto, un servicio y un deployment en el Kubernetes que tienes en el contexto:
Si consultas tus pods verás que tu función ya está up and running
Para poder acceder a ella, necesitas consultar los servicios disponibles:
y a través de la IP que te haya asignado para el servicio hello-k8s-http, en este caso AKS, debes utilizar la siguiente URL para acceder a tu función: http://20.40.132.31/api/HttpHello?name=gis
¡Saludos!