TFLint
Los errores de sintaxis a veces no son fáciles de entender al ejecutar código. Los linters proporcionan información crucial para acelerar la depuración y ahorrar tiempo de desarrollo. También puedes integrarlos en el pipeline de CI/CD para implementar mejoras continuas.
Terraform se basa en el HCL (HashiCorp Language), un lenguaje que describe el estado de tu infraestructura. TFLint es un plugin linter que admite Terraform y su lenguaje. Además de la revisión de código, también es un marco con características ampliables mediante otros plugins.
Esto es lo que TFLint puede hacer por tu proyecto de IaC:
- Encontrar posibles errores para los principales proveedores de nube: AWS/Azure/GCP.
- Advertir sobre sintaxis deprecada y declaraciones no utilizadas.
- Aplicar las mejores prácticas y convenciones de nomenclatura.
Instalación en Linux
curl -s https://raw.githubusercontent.com/terraform-linters/tflint/master/install_linux.sh | bash
Inicio rápido
Por defecto, TFLint inspecciona los archivos en el directorio actual. Puedes cambiar este comportamiento con las opciones que encontrarás en argumentos en –help:
Usage:
tflint [OPTIONS] [FILE or DIR...]Application Options:
-v, --version Print TFLint version
--init Install plugins
--langserver Start language server
-f, --format=[default|json|checkstyle|junit|compact] Output format
(default: default)
-c, --config=FILE Config file name
(default: .tflint.hcl)
--ignore-module=SOURCE Ignore module sources
--enable-rule=RULE_NAME Enable rules from the
command line
--disable-rule=RULE_NAME Disable rules from
the command line
--only=RULE_NAME Enable only this
rule, disabling all
other defaults. Can
be specified multiple
times
--enable-plugin=PLUGIN_NAME Enable plugins from
the command line
--var-file=FILE Terraform variable
file name
--var='foo=bar' Set a Terraform
variable
--module Inspect modules
--force Return zero exit
status even if issues
found
--no-color Disable colorized
output
--loglevel=[trace|debug|info|warn|error] Change the loglevelHelp Options:
-h, --help Show this help message
También se puede pasar un archivo de configuración a TFLint según esta prioridad:
- Directorio actual (./.tflint.hcl)
- Directorio de inicio (~/.tflint.hcl)
En el .tflint.hcl , se puede realizar las siguientes acciones:
- Definir la configuración de TFLint
- Declarar los plugins a utilizar
- Activar/Desactivar reglas TFLint específicas
Un ejemplo de archivo de configuración TFLint:
config {
plugin_dir = "~/.tflint.d/plugins"
module = true
force = false
disabled_by_default = false
ignore_module = {
"terraform-aws-modules/vpc/aws" = true
"terraform-aws-modules/security-group/aws" = true
}
varfile = ["example1.tfvars", "example2.tfvars"]
variables = ["foo=bar", "bar=[\"baz\"]"]
}plugin "aws" {
enabled = true
version = "0.12.0"
source = "github.com/terraform-linters/tflint-ruleset-aws"
}rule "aws_instance_invalid_type" {
enabled = false
}
Para ejecutar un simple lint:
tflint
Si no obtiene el comportamiento esperado, se puede ver los registros detallados con el modo depuración:
TFLINT_LOG=debug tflint
Utilizar plugins para proveedores de nube
Utilizando proveedores de AWS, Azure o GCP, se puede utilizar el plugin correspondiente:
El código siguiente muestra el uso del plugin de AWS:
plugin "aws" {
enabled = true
version = "0.12.0"
source = "github.com/terraform-linters/tflint-ruleset-aws"
}
El siguiente comando instala los plugins:
tflint --init
Terraform no valida las cuestiones específicas del proveedor. Aquí hay un ejemplo con el siguiente archivo de configuración:
resource "aws_instance" "foo" {
ami = "ami-0ff8a91507f77f867"
instance_type = "t1.2xlarge" # invalid type!
}
El t1.2xlarge es un tipo de instancia no válido. Se producirá un error al ejecutar «terraform apply». Pero los comandos «terraform validate» y «terraform plan» no muestran ningún error. Se trata de un problema específico del proveedor de AWS y no de la sintaxis de Terraform. El plugin TFLint ayuda a detectar este error antes de la aplicación del código: