Introducción a Terraform: Instalación, comandos y certificaciones

Introducción a Terraform: Instalación, comandos  y certificaciones

Javier López | SysAdmin & Cloud engineer
en Qualoom Expertise Technology

Terraform es una herramienta de infraestructura como código (IaC) de código abierto desarrollada por HashiCorp, con la que se puede configurar y administrar los recursos desplegados en la nube de forma eficiente, escalable y segura. Está diseñado para trabajar con la mayoría de los proveedores de nube más populares, como Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP) y muchos más. Esto significa que puedes usar Terraform para configurar y administrar una infraestructura de una manera consistente y segura. Es una herramienta de automatización de la infraestructura muy poderosa, con la que puedes administrar recursos como máquinas virtuales, bases de datos, servidores web, redes virtuales y etc. Fue creado por HashiCorp en 2014 y es uno de los primeros y más populares sus productos. Desde entonces, se ha convertido en una de las herramientas de automatización de infraestructura más importantes en el mercado. La idea que hay detrás de Terraform es que los usuarios puedan definir y administrar su infraestructura de nube a través de código. Esto significa que los usuarios pueden administrar la infraestructura de un modo mucho más sencillo, ya que el código puede ser fácilmente versionado y administrado.

Características de Terraform

Terraform es una herramienta que posee una variedad de características útiles, incluyendo entre ellas:
  • Una sintaxis de configuración de código abierto: Terraform usa una sintaxis de configuración de código abierto, lo que significa que es fácil de entender para los desarrolladores. Esto también significa que puede ser fácilmente versionado y administrado.
  • Soporte para una variedad de proveedores de nube: es compatible con la mayoría de los proveedores de nube populares, lo que significa que puede usarse en una variedad de entornos.
  • Administración de recursos: Terraform te permite administrar tus recursos de nube de una manera fácil y eficiente. Puedes usarlo para crear, cambiar y combinar recursos de nube como máquinas virtuales, bases de datos, servidores web, redes virtuales y mucho más.
  • Escalabilidad: Terraform se ha diseñado para poder escalar fácilmente y de acuerdo con las necesidades existentes, permitiendo hacer crecer la infraestructura de nube de forma segura y eficiente.
  • Facilidad de uso: es una herramienta relativamente fácil de usar. Esto significa que incluso los usuarios sin experiencia con la automatización de infraestructura pueden usar la herramienta sin problemas.
  • Soporte para múltiples plataformas: Es compatible con la mayoría de las plataformas, incluyendo Windows, macOS y Linux. Esto significa que puedes usarla en una variedad de entornos.

Comandos de Terraform

Los comandos de Terraform son una forma concisa de realizar tareas comunes, como la creación, la eliminación, la modificación y el seguimiento de los recursos creados en la nube. Estos comandos son útiles para ahorrar tiempo y proporcionar una forma consistente de administrar los recursos de la nube. A continuación, se detallan los principales comandos de Terraform y una breve descripción:
  • terraform -help: Terraform tiene un sistema de ayuda incorporado al que se puede acceder desde la línea de comandos, que nos permite obtener el detalle sobre los comandos con los que no estamos familiarizados o sobre los que queremos obtener más información.
  • terraform version: Muestra la versión actual de Terraform e informa si hay una versión más reciente disponible para descargar.
  • terraform console: Abre una consola interactiva que se pude utilizar para llevar a cabo pruebas. Este comando nunca modificará el estado
  • terraform fmt: Formatea la configuración de Terraform de acuerdo con los estándares de codificación. Esto ayuda a mantener la configuración consistente y limpia. Este debe ser el primer comando que ejecute después de crear los archivos de configuración para asegurarse de que el código está correctamente formateado. Esto hace quesea más fácil de seguir y ayuda a la colaboración.
  • terraform init: Este comando es el primer paso para empezar a utilizar Terraform. Inicializa los directorios locales requeridos para almacenar la configuración de Terraform. Para preparar el directorio de trabajo, este comando realiza la inicialización del backend, la instalación del módulo secundario y la instalación de plugins.
  • terraform validate: Valida los archivos de configuración en un directorio, y ejecuta comprobaciones que verifican si una configuración es sintácticamente válida y, por lo tanto, principalmente útil para la verificación general de módulos reutilizables, incluida la corrección de los nombres de atributo y los tipos de valor. Terraform init debe ejecutarse antes de este comando.
    • terraform validate -json: para ver más fácil el número de errores y advertencias existentes.
  • terraform plan: Este comando muestra una previsualización de los recursos que serán creados, eliminados o modificados antes de que los cambios se apliquen. Esto ayuda a verificar los cambios antes de que se implementen y generará un plan de ejecución, que mostrará qué acciones se llevarán a cabo sin realizar realmente las acciones planificadas.
    • terraform plan -out=<path>: Guarda el plan en un fichero dentro de la ruta determinada.
    • terraform plan -destroy: Crea un plan para destruir todos los recursos
  • terraform apply: Este comando toma la configuración de Terraform y aplica los cambios a la infraestructura. Una vez que Terraform haya terminado de aplicar la configuración, obtenemos un informe detallado de los cambios realizados, que ayuda a comprender qué cambios se hicieron en la infraestructura de nube y así, poder asegurarnos de que todo se haya realizado según lo previsto. Terraform apply también escribirá datos en el archivo terraform.tfstate. De forma predeterminada, primero se generará un plan, el cual deberá aprobarse antes de poder aplicarlo.
    • terraform apply -auto-approve: Permite aplicar los cambios sin tener que aprobar interactivamente el plan. Útil en canalizaciones de CI/CD de automatización.
    • terraform apply -lock=false: Se recomienda no mantener un bloqueo sobre el archivo de estado durante la operación de terraform apply, teniendo en cuenta que otros desarrolladores no estén ejecutando comandos simultáneos en el mismo espacio de trabajo.
    • terraform apply -parallelism=<n>: Determina el número de operaciones ejecutadas en paralelo. El valor predeterminado es 10
    • terraform apply -var=»environment=dev»: Pasa un valor como variable.
    • terraform apply -var-file=»varfile.tfvars»: Pasa las variables contenidas en un archivo.
    • terraform apply -target=”module.app»: Aplica cambios solo al recurso especificado.
  • terraform destroy: Permite destruir la infraestructura gestionada por Terraform, pidiendo confirmación antes de llevar a cabo la acción.
    • terraform destroy -target=”module.app»: Destruye solo el recurso especificado.
    • terraform destroy –auto-approve: Destruye la infraestructura sin tener que aprobar interactivamente el plan. Útil en canalizaciones de CI/CD de automatización.
  • terraform refresh: Lee la configuración actual de todos los objetos remotos administrados y actualiza el estado de Terraform para que coincida. Esto no modifica la infraestructura, pero modifica el archivo de estado.
  • terraform show: Muestra la salida de la ejecución de Terraform. Se utiliza para proporcionar una salida legible de un archivo de estado o plan, que se puede usar para inspeccionar un plan que garantice que se esperan las operaciones planificadas, o para inspeccionar el estado actual tal como lo ve Terraform.
    • terraform show <path to statefile>: Si queremos leer un archivo de estado específico, se puede proporcionar la ruta del mismo. Si no se proporciona ninguna ruta de acceso, se muestra el archivo de estado por defecto.
  • terraform state: Se utiliza para la administración avanzada del estado. A medida que el uso de Terraform es más avanzado, hay algunos casos en los que es posible que deseemos modificar el estado de Terraform. En lugar de modificar el estado directamente, los comandos de estado terraform se pueden usar en muchos casos. Este comando es un subcomando anidado, lo que significa que tiene más subcomandos:
    • terraform state list: enumera todos los recursos sobre los que se realiza un seguimiento en el archivo de estado actual.
    • terraform state mv: Mueve un elemento en el archivo de estado. Es útil cuando necesitamos decirle a Terraform que se ha renombrado un elemento
    • terraform state pull > state.tfstate: Obtiene el estado actual y lo envía a un archivo local.
    • terraform state push: Actualiza el estado remote a partir del archivo de estado local.
    • terraform state replace-provider: Reemplaza un proveedor, lo cual es útil cuando se cambia a un registro de proveedores personalizado.
    • terraform state rm: Elimina el recurso especificado del archivo de estado. Es útil cuando un recurso se ha eliminado manualmente fuera de Terraform
    • terraform state show <resourcename>: Muestra el recurso especificado del archivo de estado
  • terraform import: Se utiliza para importar a la configuración de Terraform recursos ya existentes.
  • terraform providers: Muestra información sobre los requisitos del proveedor de la configuración en el directorio de trabajo actual, como ayuda para comprender desde dónde se detectó cada requisito.
  • terraform workspace: Utilizado para administrar espacios de trabajo. Se debe utilizar uno de los siguientes subcomandos con el comando workspace. Los espacios de trabajo pueden ser útiles cuando un desarrollador quiere probar una versión ligeramente diferente del código. No se recomienda utilizar espacios de trabajo para aislar o separar la misma infraestructura entre diferentes etapas de desarrollo, por ejemplo, dev / staging / production, o diferentes equipos internos.
    • terraform workspace show: Muestra el nombre del espacio de trabajo actual.
    • terraform workspace list: Enumera los espacios de trabajo existentes.
    • terraform workspace select <workspace>: Selecciona un espacio de trabajo específico.
    • terraform workspace new <workspace>: Crea un nuevo espacio de trabajo con el nombre especificado.
    • terraform workspace delete <workspace>: Borra el espacio de trabajo especificado.
  • terraform output: Enumera todos los outputs (salidas) que se encuentran actualmente en el archivo de estado, y se muestran por defecto al final de ejecutar un terraform apply. Este comando puede ser útil si queremos verlos de forma independiente.
  • terraform graph: Genera un gráfico en lenguaje DOT que muestra las dependencias entre los objetos del archivo de estado. Esto puede ser renderizado por un programa llamado Graphwiz (entre otros).

IDE para Terraform

Un IDE (Integrated Development Environment) es un entorno de desarrollo integrado que permite a los desarrolladores escribir, compilar, depurar, probar y ejecutar código. Esto se logra proporcionando herramientas como un editor de código, una ventana de depuración, una vista previa de los cambios y una herramienta de validación para ayudar a los desarrolladores a crear código de Terraform de forma eficiente. Algunos IDE populares para trabajar con Terraform son Visual Studio Code, Atom, Sublime Text y Pycharm. Todos estos IDE ofrecen una variedad de características que facilitan la escritura, depuración y ejecución de código Terraform, incluyendo herramientas de validación para ayudar a los desarrolladores a identificar errores antes de ejecutar un plan de despliegue. Además de los IDE populares, también hay muchas herramientas de línea de comandos disponibles para trabajar con Terraform, que permiten a los usuarios ejecutar comandos para realizar tareas como crear, actualizar y eliminar recursos; pueden ser útiles para los usuarios que desean realizar tareas básicas con Terraform sin tener que usar un IDE.

Certificaciones

Las certificaciones de Terraform ofrecen una excelente manera de demostrar a los clientes potenciales y al departamento de recursos humanos que se tiene una comprensión profunda de la herramienta. Hay varias certificaciones diferentes ofrecidas por Terraform. La certificación HashiCorp Certified: Terraform Associate es una de las certificaciones más populares. Esta certificación es una excelente manera de demostrar que uno entiende los conceptos básicos de Terraform y puede usarlo para implementar infraestructuras de forma eficiente.

Conclusión

Terraform es una herramienta de automatización de la infraestructura muy poderosa. Está diseñado para trabajar con la mayoría de los proveedores de nube populares, por lo que puede usarse en una variedad de entornos. También incluye una variedad de características útiles, como una sintaxis de configuración de código abierto, soporte para una variedad de proveedores de nube, administración de recursos, seguridad y escalabilidad. Si estás buscando una forma fácil y segura de administrar tu infraestructura de nube, Terraform es una herramienta perfecta para ti. Es fácil de usar, escalable, seguro y compatible con múltiples proveedores de nube. Si deseas automatizar y administrar tu infraestructura de nube de una forma consistente y segura, Terraform es la herramienta perfecta para ti. Descubre más en otros artículos relacionados: ¿Qué es la Infraestructura como código (Infrastructure as Code)? Introducción a AWS CloudFormation