Implementar Azure Function App con Terraform

Terraform nos permite implementar y destruir infraestructura en minutos. Las herramientas/tecnologías de IaC se han convertido en pilares fundamentales para el desarrollo y la gestión de la Infra.

A través de la implementación de soluciones de Infraestructura como Código podemos garantizar la consistencia, replicabilidad y escalabilidad de nuestros entornos, minimizando los errores manuales y optimizando el despliegue.

En este caso estaremos desplegando y destruyendo una pequeña infraestructura de Azure Functions utilizando Terraform.

Repositorio utilizado

Estaremos utilizando el siguiente repo https://github.com/mdiloreto/madsblog-terraform-01 para realizar este laboratorio.

Descripción del codigo del repositorio

En este repositorio encontraremos los siguientes archivos:

  • main.tf
    • Declaración del provider
  • En caso de que estes configurando un entorno colaborativo de terraform te recomiendo generar un Remote State File
    • Creación del RG, Storage Account y App Service Plan:
  • Creación de Azure Functions, configuración de runtime, version de runtime y habilitación de Cors para Portal.Azure. Esto ultimo nos permitira utilizar la sección de Test de “Code+Test”
  • locals.tf
    • Aquí tenemos las variables utilizadas para los nombres.
  • variables.tf
    • Aquí declararemos el provider de “Random” para los string de numeros de las variables:

Cómo conectarnos a Azure CLI

Debemos realizar el login a nuestro tenant y subscripción de Azure. Para esto debemos ingresar los siguientes comandos en Azure CLI:

  • az login
  • az account list –output table
  • az account set –subscription <SubscriptionId>

Desplegar infraestructura con Terraform

Para desplegar infraestructura con Terraform existen 3 etapas Plan + Apply + Destroy.

Planear (Plan): Antes de hacer cambios reales en la infraestructura, Terraform crea un plan de ejecución que muestra qué acciones se llevarán a cabo. Esto permite revisar los cambios propuestos y asegurarse de que el resultado será el esperado.

Aplicar (Apply): Una vez que se ha revisado y aprobado el plan, Terraform procede a realizar los cambios necesarios para alcanzar el estado deseado descrito en el código. Durante esta fase, se crean, modifican o eliminan recursos, según sea necesario. A ejecutar esta etapa se incluye Plan.

Destruir (Destroy): Si en algún momento es necesario eliminar toda la infraestructura desplegada (por ejemplo, para reducir costos o porque el proyecto ha finalizado), Terraform puede destruir todos los recursos que creó. Esto se hace de manera ordenada y controlada, evitando errores manuales y garantizando que no queden recursos huérfanos.

Terraform Apply

Al ejecutar <terraform apply> nos mostrará el plan de ejecución de todos los recursos en nuestros archivos .tf del repositorio.

  • En este caso estaremos generando todos los recursos para nuestra Function App.
  • Cómo podemos ver en la proxima imagen, se destruirá un RG que estaba siendo administrado por Terraform y fue quitado de los archivos .tf.
  • Una vez verificado atentamente nuestro plan de ejecución podremos completar la implementación.
  • Para esto debemos ingresar el valor: “yes”.
  • Ahora podremos ver el detalle de los recursos a crearse:

Comprobación de los recursos creados

Terraform destroy

Una vez que ya hemos utilizado nuestra infra para el proposito deseado, podemos proceder a destruirla: esto lo haremos en cuestion de segundos. Terraform controla toda la infra y conoce las configuraciones, dependencias e interrelaciones. Nosotros no debemos encargarnos de nada.

  • Verificamos que no hay cambios a través de un Terraform Plan.
  • Ahora procederemos a ejecutar <terraform destroy>
  • Podremos ver inmediatamente, al igual que con <terraform apply> el plan de “destrucción”.
  • En este caso, podremos ver detalladamente, todos los recursos que serán destruidos.
  • Para ejecutar la operación, ingresamos el valor: “yes”.
  • Al finalizar veremos la cantidad de recursos destruidos.

Posted

in

, , ,

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.