Despliega tu Azure Function App con Terraform y Azure DevOps

¡Hola, brainers! En este post, vamos a aprender a desplegar una Azure Function en Azure, con pipelines en Azure DevOps y utilizando Terraform como herramienta para definir la infraestructura objetivo.

Terraform es una de las herramientas que nos permite definir nuestra Infraestructura como Código (aka Infrastructure as Code, IaC) para nuestras diferentes soluciones.

En uno de los últimos objetivos de mi entorno laboral, buscamos la creación de tests de integración para Azure Functions, por lo que necesitaríamos despliegues de infraestructura para las mismas.

¿Cómo lo logramos?

Vamos a desgranar paso a paso.

Utilizando Terraform

Lo primero que necesitaríamos es la plantilla de Terraform con la que describir la infraestructura deseada. En resumen:

  • un grupo de recursos en el que operar
  • una storage account
  • un service plan
  • una function app con las siguientes características, que puede variar dependiendo de tu proyecto:
    • que se ejecute con .NET
    • una función HTTP
    • en modo solo lectura
    • y en versión 3

He aquí la plantilla utilizada, que podéis encontrar en Gist por si necesitáis replicarla y modificarla para vuestros proyectos:

Una vez que la plantilla se ajuste a nuestras necesidades (más infraestructura, nombres acordes a las convenciones de nuestra suscripción de Azure o al equipo…), es el momento de que lo añadas a tu repositorio junto a tu solución en la se encuentra la Azure Function que vamos a desplegar.

Build pipeline para CD

En nuestra build pipeline para Continuous Deployment vamos a definir las diferentes Tasks para obtener el Artifact con el que realizar el despliegue al entorno objetivo.

Realizaremos la compilación de nuestra Function para obtener el Artifact que desplegar, junto con otro elemento que será la plantilla Terraform

Aquí podéis encontrar la pipeline en formato YAML, para que podáis ajustarla a vuestro proyecto o bien parametrizar fácilmente vuestras Tasks en el editor clásico:

Creando la release pipeline

En este ejemplo, uso la extensión de Terraform de Peter Groenewegen para Azure DevOps. Con esta extensión, definimos los tres pasos de Terraform: init, plan y apply.

La última task, de Azure Function App Deploy, necesitará que especifiques en el parámetro «Package or folder» la ruta al ZIP ya extraído de tu app al que tienes acceso en el Artifact.


Si tienes dudas o quieres seguir ampliando sobre Terraform, Alberto Picazo creó un fantástico vídeo en el que puedes ver paso a paso cómo crear esta pipeline con todo detalle en sus tasks:

¡Y esto es todo!

Cuando todo esté preparado, puedes iniciar tus pipelines para comenzar la creación de tu Artifact, crear una nueva release acorde a las circunstancias y arrancar un despliegue en Azure DevOps.

Dejo algunos enlaces de interés por si queréis seguir explorando:

Espero que os resulte útil e instructivo. ¡Hasta el próximo artículo!