Probando el código de Terraform

Probando el código de Terraform

Terraform es tan bueno y hay tantos proveedores deferentes están escritos para él, que podemos usarlo no solo para enfoque de Infraestructura como código (Infrastructure as a Code, IaC), pero además para controlar la configuración de otras aplicaciones y sistemas. Por ejemplo, con ayuda de proveedor para Zabbix, puedes controlar casi por completo el servicio de monitoreo, y con un proveedor para Azure DevOps, ¡es posible transferir el control de la utilidad CI/CD al código!

Como resultado, las configuraciones de Terraform se aumentan de tamaño, usan muchos trucos diferentes, lo que hace sea necesario monitorear los archivos en modo de automatización, es decir, probar el código Terraform en busca de errores y estilo.

¿Qué tenemos?

Generalmente, en este momento yo conozco los dos métodos más populares para probar el código Terraform:

  • terraform validate - un enfoque nativo que verifica la configuración escrita, PERO SIN ir a ningún otro sistema.
  • tflint - una utilidad de terceros que hace casi lo mismo que el primer párrafo más:
    • comprobación si hay errores al trabajar con servicios en la nube (por ejemplo, ¿realmente existe el tamaño del servidor virtual que va a crear?)
    • verificación de variables excesivos
    • comprobación de el cumplimiento de algunas de las mejores prácticas

A pesar de que, según la descripción, tflint debería cubrir la funcionalidad de terraform validate, a veces este último encuentra errores que el primero no encontró.

A continuación yo describiré cómo utilizar estas opciones disponibles y sus funciones que conozco.

Usamos terraform validate

Este es el comando nativo de ejecutable Terraform, que implica, que el soporte todos funciones actuales del lenguaje HCL. También su comodidad está en lo que vosotros no tenéis necesidad a instalar o mantener ningunas otros archivos - ¡todo ya está en el binario del Terraform!

Aquí están funciones características del comando terraform validate:

  1. Verificación de sintaxis: el comando verifica los archivos de configuración en busca de errores de sintaxis. Si se encuentran errores en los archivos, el comando devolverá mensajes de error indicando las líneas y la ubicación del problema.
  2. Verificar los argumentos requeridos: verifica que todos los argumentos requeridos para los recursos y módulos sean correctos. Esto incluye verificar la existencia y corrección de las variables y atributos especificados.
  3. Verificación de referencias de recursos y módulos: también verifica que todas las referencias de recursos y módulos en los archivos de configuración existan y tengan los nombres correctos.
  4. Verificar el uso de variables y expresiones: el equipo puede verificar el uso de variables y expresiones en los archivos de configuración para asegurarse de que se usen correctamente y coincidan con los tipos de datos esperados.
  5. Verificación de existencia de proveedores: verifica que todos los proveedores en uso (como AWS, Azure, etc.) estén listados y disponibles.
  6. Advertencias de compatibilidad de la versión del proveedor: en algunos casos, el equipo puede advertir sobre la compatibilidad de la versión del proveedor para evitar posibles problemas al aplicar cambios.
  7. Validación de módulos: si utiliza módulos en su configuración, el comando terraform validar también verificará la sintaxis y el uso correcto de los módulos.

Antes de ejecutar el terraform validate, os necesita descargar los módulos y proveedores, cuales se están usando en el configuración. Podéis hacerlo con terraform init. Luego simplemente ejecutamos terraform validate en el misma carpeta - ¡y listo!

terraform validate

La desventaja de este enfoque es obvia: el equipo no sabe qué valores son válidos para diferentes proveedores y, por lo tanto, no los verifica.

Usamos tflint

La utilidad tflint tiene funciones similares, pero además de verificar el código y encontrar errores en sintaxis, puede hacer las siguientes cosas:

  1. Comprobador de sintaxis y estilo: realiza comprobaciones de sintaxis en los archivos de configuración de Terraform. También advierte sobre violaciones del estilo de codificación según las pautas y estándares de Terraform.

  2. Verificador de mejores prácticas: incluye un conjunto de reglas que ayudan a identificar posibles problemas y violaciones de las mejores prácticas al escribir código de infraestructura. Esto puede incluir el uso incorrecto de recursos, variables de entorno, estilo, etc.

  3. Soporte para reglas personalizadas: puede definir sus propias reglas de análisis de código para adaptarse a su proyecto u organización.

  4. Compatibilidad con múltiples proveedores: admite la revisión de código para diferentes proveedores de Terraform, lo que le permite analizar configuraciones para diferentes plataformas en la nube.

  5. Informes y formato: puede generar resultados de análisis en una variedad de formatos, como salida de texto, JSON o Checkstyle XML, lo que facilita la integración con diversas herramientas y sistemas de gestión de errores.

Para ejecutar el comando, es necesario realizar los pasos siguientes:

  • Como primero, claro, descargar el binario y añadir su ruta a la variable PATH.
  • A continuación, creemos archivo del configuración en la misma carpeta, como y el código terraform. Aquí hay un ejemplo que uso en mi trabajo:
config {
  format = "default"
  module = true
}

plugin "terraform" {
  enabled = true
  preset  = "recommended"
}

# ====================================================

plugin "azurerm" {
    enabled = true
    version = "0.24.0"
    source  = "github.com/terraform-linters/tflint-ruleset-azurerm"
}

Preste atención a la línea 13: puede conectar varios complementos, si es necesario. Los desarrolladores proporcionan los siguientes complementos:

Luego, como siempre, terraform init y, por fin, los dos comandos en turno:

  • tflint --init, para descargar complementos
  • tflint, para ejecutar verificaciones

tflint

Es posible que tengas una situación (como yo) en la que no siempre uso algunas variables en los módulos o en la configuración.. Pero la regla terraform_unused_declarations da un error y bloquea los scripts de automatización. Para tales casos, tflint tiene una sintaxis especial para excluir cualquier regla para una línea:

# tflint-ignore: terraform_unused_declarations
variable "dev_be_storage_account_name" { type = string }

Conclusión

Probar el código de Terraform es una práctica importante por varias razones:

  1. Confianza en el cambio: en el desarrollo, usted realiza cambios en el código para agregar nuevos recursos, cambiar parámetros, etc. Las pruebas le permiten asegurarse de que cada cambio no rompa la infraestructura existente y la interacción entre los componentes.

  2. Seguimiento de dependencias: los recursos de Terraform pueden tener muchas dependencias. Las pruebas ayudan a garantizar que los cambios en una parte del código no dañen otras partes de la infraestructura.

  3. Automatización y velocidad: las pruebas automatizadas pueden comprobar de forma rápida y fiable el código en busca de errores. Esto le permite identificar y solucionar problemas rápidamente, ahorrando tiempo y garantizando la estabilidad del proceso de implementación.

Terraform (es)

  • Visto: 452
Add comment

Related Articles