A lo largo de los años, el desarrollo en la nube ha experimentado un cambio de paradigma importante. Aplicaciones más nuevas y complejas se implementan rápidamente en la nube para minimizar el tiempo de inactividad. Y a través de todo esto, ha surgido el concepto de Infraestructura como Código y diversas herramientas para simplificar el proceso de desarrollo de aplicaciones.
Te estarás preguntando: ¿qué es la Infraestructura como Código? ¿Cómo mejora el proceso y la experiencia de desarrollo, y dónde entra Terraform en la imagen? Bueno, exploraremos todo esto y más en esta guía. Pero antes de comenzar, aquí hay algunos requisitos previos:
-
Conocimientos básicos sobre la nube y terminología de la nube
-
Acceso a una PC para implementar ejemplos de código
-
Una cuenta de GCP
Con esto, comencemos.
A continuación, cubriremos:
Visión General de la Infraestructura como Código (IaC)
La infraestructura como código se refiere a la generación de herramientas y aplicaciones de infraestructura en la nube con un documento de configuración basado en código. Este proceso, al ejecutarse, automatiza la secuencia y el proceso de creación de bases de datos, máquinas virtuales y servidores. Esto mejora la experiencia del usuario al reducir la frecuencia de implementaciones manuales de servicios en la nube, especialmente para múltiples servicios idénticos.
Existen dos enfoques distintos para la infraestructura como código: el enfoque Imperativo
y el enfoque Declarativo
.
Cuando utilizas el enfoque Declarativo para la generación de infraestructura, simplemente detallas tus salidas esperadas/deseadas para que se genere la Infraestructura, y luego la herramienta de IaC que estés utilizando se encarga de producir esa salida.
Por otro lado, el enfoque Imperativo implica especificar los pasos exactos necesarios para lograr el estado de infraestructura deseado. Mientras que el enfoque Imperativo parece más adecuado para configuraciones de infraestructura complejas, el enfoque Declarativo también puede funcionar igual de bien.
Algunas herramientas son capaces de ambos enfoques, mientras que otras solo son adecuadas para uno u otro. Ejemplos de algunas de las herramientas de IaC populares utilizadas a nivel global incluyen Terraform IaC, AWS Cloud Formation, Ansible, y Pulumi, Chef, entre otros.
Como su nombre indica – infraestructura como código – el código que crea la infraestructura se escribe en varios lenguajes de plantillas dentro del espacio de IaC. Los lenguajes de plantillas populares incluyen JSON, YAML, plantilla ARM, HCL, scripts Heat, y así sucesivamente.
También puedes utilizar herramientas de scripting para ejecutar infraestructura en la nube. Algunas populares incluyen Bash y PowerShell. Estas a veces vienen preinstaladas en la mayoría de las computadoras personales.
De todas estas herramientas, sin embargo, Terraform es distinta por varias razones, y es la que examinaremos en este artículo.
¿Qué es Terraform?
Terraform es una herramienta de código abierto desarrollada por HashiCorp en 2014. Ha evolucionado a lo largo de los años y ahora sirve como una herramienta de infraestructura agnóstica de la nube que te permite crear infraestructura en múltiples proveedores de servicios en la nube.
Terraform también ofrece Terraform Cloud, una herramienta de software como servicio basada en la nube. Permite el despliegue basado en la nube de herramientas en la nube, en lugar de utilizar los antiguos métodos locales que teníamos en la ya desaparecida herramienta Terraform CLI.
Además, al igual que otras herramientas de IaC que utilizan lenguajes de plantillas, el marco de plantillas utilizado para crear infraestructura en Terraform es el lenguaje de plantillas de HashiCorp (HCL).
Beneficios de Terraform
Ahora destacaré algunos de los beneficios de usar Terraform como ingeniero en la nube, junto con el papel clave de la herramienta en el ecosistema de la nube.
1. Enfoque Declarativo
Este enfoque para la automatización de la infraestructura de la nube asegura que toda la infraestructura requerida para ser desplegada (bases de datos, servidores, y demás) se declare explícitamente y se ejecute en consecuencia. Esto ayuda a evitar conflictos.
2. Manejo de Conflictos
Además de sus capacidades eficientes de automatización de herramientas en la nube, Terraform cuenta con robustas propiedades de detección y manejo de conflictos. Una de las formas en que maneja los conflictos es a través de la función Terraform plan
. Esta función resalta cualquier conflicto percibido o potencial de orquestación de infraestructura, lo que permite una fácil corrección antes del despliegue. Discutiré esto más a fondo en secciones posteriores.
3. Independiente de la Nube
Terraform es un proveedor de servicios de automatización multipropósito y multi-nube con capacidades eficientes de automatización de infraestructura a través de los principales proveedores de servicios en la nube (AWS, GCP y Azure). También permite la automatización híbrida e inter-proveedor.
4. Fácil de Usar
Terraform es una de las herramientas de automatización en la nube más grandes con las comunidades de usuarios más amplias. Tiene tutoriales extensos amigables para principiantes que te ayudan a familiarizarte rápidamente con la herramienta. Aquí hay un enlace a su documentación para que puedas profundizar más.
5. Capacidades de Gestión de Archivos
Terraform crea automáticamente una copia de seguridad local de los estados de automatización en tu computadora local para asegurar un recuerdo inmediato y manejo de archivos en caso de que algo salga mal. También ofrece opciones de copia de seguridad remota a proveedores de servicios en la nube remotos cuando es necesario.
6. Control de Versiones
Al igual que el sistema de control de versiones Git, Terraform tiene un sistema de control de versiones incorporado que te permite rastrear cambios en un archivo de Terraform. También te permite volver a versiones anteriores de tu código si hay errores en la versión actual, por ejemplo.
7. Reutilización de código
Terraform ofrece una amplia variedad de plantillas de código para facilitar la reutilización en su página de documentación para desarrolladores.
Ahora que hemos resaltado los beneficios de Terraform, aprendamos algunos términos comunes utilizados en Terraform y lo que significan.
Términos comunes utilizados en Terraform
Antes de empezar a usar Terraform, debes estar familiarizado con algunos términos clave que se mencionan con frecuencia. Aquí tienes lo que necesitas saber:
-
Proveedores: en Terraform, un Proveedor es una interfaz de programación que permite a Terraform interactuar con varios APIs y servicios en la nube. Por ejemplo, usarías un proveedor para interactuar con un proveedor de servicios en la nube como GCP o Azure.
-
Módulos: Los módulos se crean específicamente dentro del marco de Terraform y sirven como componentes reutilizables que te permiten orquestar fácilmente servicios en la nube. También puedes almacenar información clave sobre servicios en la nube en un módulo, y luego modificarlo para garantizar la singularidad utilizando variables de módulo.
-
Recursos: Los recursos en Terraform se refieren a los componentes de infraestructura en la nube que se van a crear. Ejemplos incluyen redes en la nube, máquinas virtuales, zonas de disponibilidad y otras infraestructuras.
-
Estado: El concepto de estado en Terraform forma la base de su eficiencia. El estado realiza un seguimiento de la configuración actual de tus recursos de infraestructura y contiene detalles sobre cada recurso que Terraform ha creado, modificado o eliminado. El sistema de control de versiones de Terraform lo utiliza para rastrear los cambios que realices en un archivo de código y utiliza esa información para destruir y aprovisionar infraestructura según sea necesario.
-
Workspace: un espacio de trabajo funciona de manera similar a un sistema de control de versiones, ya que crea una especie de restricción alrededor de un archivo de trabajo. Los espacios de trabajo te permiten gestionar múltiples instancias de una sola configuración de infraestructura de forma limpia y aislada dentro del mismo backend. Puedes utilizar los espacios de trabajo para separar entornos como desarrollo, preparación y producción mientras utilizas la misma configuración de Terraform.
Proyecto de Demostración: Cómo Escribir una Configuración de Terraform
En esta sección, profundizaremos en la escritura de nuestro primer archivo de Terraform para orquestar una máquina virtual de programa de Google Cloud con solo unas pocas líneas de código. Pero antes de comenzar, discutiremos los diversos comandos que debes entender antes de implementar el proyecto de demostración.
Comandos Comunes de Terraform
-
Terraform init
: Este comando inicializa la herramienta Terraform y descarga archivos esenciales específicos del proveedor de la nube. También establece una conexión entre Terraform y el proveedor de la nube en cuestión. En nuestro caso, es entre GCP y el proveedor de Terraform. -
Terraform fmt
:Este comando garantiza automáticamente un formato de código e indentación óptimos. Asegura una ejecución ordenada del código y minimiza errores. -
Terraform plan
:Este comando describe los pasos de ejecución del código Terraform y detecta cualquier error que pueda ocurrir durante el proceso de ejecución. También resalta cualquier error en el código de Terraform que pueda obstaculizar la ejecución. Por último, trabaja junto con la gestión del estado de Terraform para detectar cualquier cambio de estado y desaprovisionar o generar servicios en la nube adicionales si es necesario. -
Terraform apply
: Este comando ejecuta el estado de Terraform planificado implementado por el comandoTerraform plan
. -
Terraform destroy
: Este comando es el comando final en el esquema de Terraform que se utiliza para desactivar o destruir todos los servicios en la nube creados utilizando el comando Terraform apply. Es importante tener en cuenta que debes ejecutar los comandos enumerados anteriormente de forma secuencial para asegurarte de que tu infraestructura se cree correctamente.
Creación de una Máquina Virtual de GCP Potenciada por IaC
Ahora que has aprendido estos comandos importantes, probémoslos creando nuestra primera máquina virtual de GCP potenciada por IaC.
En tu editor de código, escribe el siguiente código:
provider "google" {
project = "your-gcp-project-id" # Replace with your GCP Project ID
region = "us-central1"
zone = "us-central1-a"
}
Este código resalta el proveedor en la nube que estamos utilizando para generar los recursos en la nube que necesitamos. En nuestro caso, es el programa de Google Cloud. El nombre asignado a él es simplemente “google”. Otros proveedores en la nube como AWS y Azure son “aws” y “azure” respectivamente.
La segunda línea identifica el identificador de suscripción de GCP, que es único para cada cuenta de GCP (y ayuda a facilitar una integración precisa). Deberías usar el tuyo en el espacio proporcionado.
También necesitarás incluir una región de recursos adecuada y una zona de disponibilidad de recursos. Esto sirve como base física para la máquina virtual que crearemos para poder ejecutarla. En este escenario, elegí la región central de EE. UU. y la zona de disponibilidad 1-a, respectivamente. Puedes leer más aquí sobre las regiones y zonas de disponibilidad en la nube.
resource "google_compute_instance" "vm_instance" {
name = "example-vm"
machine_type = "e2-medium"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
El fragmento de código anterior especifica el recurso de cómputo exacto que será orquestado, que en nuestro caso es una instancia de máquina virtual codificada como “vm_instance”. 'example-vm'
es el nombre que queremos asignar a la máquina virtual que crearemos para este proyecto. Es importante tener en cuenta que el nombre de la máquina virtual también debe ser único. El tipo de máquina virtual que elegimos fue el VM de tipo E2 (Propósito general)-mediano. Puedes obtener más información sobre los tipos de máquinas virtuales aquí.
Además, especificamos el sistema operativo esperado que se iniciará (“boot_disk”), que es una imagen del sistema operativo Debian Linux versión 11 en mi caso.
network_interface {
network = "default" # Attach to the default VPC network
access_config {
}
}
output "instance_ip" {
value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}
Para completar la creación de nuestra máquina virtual, necesitamos configurar una Red Virtual para permitir el acceso remoto a la VM. El bloque de interfaz de red conecta la máquina virtual a la red VPC (Virtual Private Cloud) predeterminada proporcionada por GCP. No podremos interactuar con nuestra máquina virtual sin la red VPC. El bloque de salida también muestra la dirección IP de acceso predeterminada en la terminal, que podemos usar para conectarnos a la máquina virtual.
Aquí está el código final esperado:
provider "google" {
project = "your-gcp-project-id" # Replace with your GCP Project ID
region = "us-central1"
zone = "us-central1-a"
}
resource "google_compute_instance" "vm_instance" {
name = "example-vm"
machine_type = "e2-medium"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = "default" # Attach to the default VPC network
access_config {
}
}
output "instance_ip" {
value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}
A partir de ahí, ahora ejecutaremos este código utilizando los comandos resaltados en la imagen a continuación:
El comando terraform -v
confirma que Terraform se ha instalado correctamente en la terminal. La salida esperada será la versión de la herramienta Terraform instalada.
El siguiente comando ejecutado es la función terraform init
que inicializa una comunicación con el proveedor de servicios en la nube, que en nuestro caso es GCP. También se instalan todas las dependencias necesarias.
El comando terraform fmt
también se ejecuta para asegurar un formato adecuado del código y la indentación. Luego se ejecuta el comando terraform plan
de forma secuencial.
Desde la imagen anterior, puedes ver los pasos que Terraform pretende utilizar para generar la máquina virtual esperada.
Una vez que se haya ejecutado exitosamente Terraform plan, entonces ejecutaremos la función terraform apply
para ejecutar los pasos delineados por Terraform plan.
Esto generará una solicitud pidiendo confirmación de la ejecución de Terraform, como se muestra arriba. Escribir “Sí” permitirá que la operación continúe sin problemas.
En la ejecución exitosa, se mostrará un mensaje de éxito como se muestra arriba. Con eso, hemos creado nuestra infraestructura en la nube solo con código. Luego se puede llamar al comando terraform destroy
para eliminar las máquinas virtuales creadas.
Conclusión
En este artículo, has aprendido lo básico sobre la infraestructura como código. Discutimos Terraform, sus beneficios y algunas de sus características y comandos clave. También ilustramos su uso en un proyecto de demostración.
Para ampliar tu conocimiento, puedes consultar la documentación de Terraform para obtener más ejemplos de código. También recomendaría utilizar tus conocimientos recién adquiridos para automatizar un proyecto con usos en la vida real.
No dudes en enviarme un mensaje con cualquier comentario o pregunta. También puedes ver mis otros artículos aquí. ¡Hasta la próxima, sigue programando!
Source:
https://www.freecodecamp.org/news/a-beginners-guide-to-terraform-infrastructure-as-code-in-practice/