Mostrando entradas con la etiqueta terraform. Mostrar todas las entradas
Mostrando entradas con la etiqueta terraform. Mostrar todas las entradas

sábado, 19 de octubre de 2024

Terraform o Infraestructura cómo código

 

Según la Wikipedia, la Infraestructura como Código (Infrastructure as Code, en Inglés) es: el proceso de gestión y aprovisionamiento de centros de datos informáticos a través de archivos de definición legibles por máquina, en lugar de configuración de hardware físico o herramientas de configuración interactiva.

Básicamente:

  • Es la capacidad de aprovisionar y respaldar su infraestructura de computación a través de código en lugar de procesos y configuraciones manuales.  
  • Permite definir el estado deseado de su infraestructura sin incluir todos los pasos para llegar a ese estado.
  • Automatiza la administración de la infraestructura para que los desarrolladores puedan centrarse en crear y mejorar las aplicaciones en lugar de administrar los entornos.

Enfoques diferentes de la infraestructura como código

Declarativa

La IaC declarativa permite al desarrollador describir los recursos y la configuración que componen el estado final de un sistema deseado.

A continuación, la solución de IaC crea este sistema a partir del código de infraestructura. Esto hace que la IaC declarativa sea fácil de usar, siempre que el desarrollador sepa qué componentes y configuraciones necesita para ejecutar su aplicación.

Imperativa

La IaC imperativa permite al desarrollador describir todos los pasos para configurar los recursos y llegar al sistema y al estado de ejecución deseados.

Si bien no es tan sencillo escribir la IaC imperativa como la IaC declarativa, el enfoque imperativo se hace necesario en las implementaciones de infraestructuras complejas. Esto es especialmente cierto cuando el orden de los eventos es crítico.

¿Qué es Terraform?

Terraform es una herramienta de Infraestructura como Código (IaC) que permite definir, provisionar y gestionar infraestructura en la nube o en entornos locales mediante archivos de configuración.

Estos archivos, escritos en un lenguaje declarativo llamado HashiCorp Configuration Language (HCL), describen los recursos y servicios que se quieren desplegar, como servidores, redes, bases de datos, entre otros.

Terraform es capaz de interactuar con múltiples proveedores de servicios en la nube (como AWS, Azure, Google Cloud) y otras plataformas, facilitando la creación y modificación de infraestructuras complejas de forma eficiente.

Se relaciona con IaC porque permite automatizar y versionar la infraestructura de la misma manera que se gestiona el código de software, asegurando que las configuraciones sean reproducibles, auditables y escalables.

Instalando Terraform

En Linux:

Abrimos una terminal y escribimos estos comandos:


# Actualizar paquetes
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common

# Añadir repositorio oficial de HashiCorp:

wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list

# Instalar Terraform
sudo apt-get update && sudo apt-get install terraform

# Verificar instalación
terraform -v

Tendremos instalado Terraform en Linux.

En Mac OS:

Abrimos una terminal y escribimos estos comandos:


# Instala Terraform con Homebrew:
brew tap hashicorp/tap

brew install hashicorp/tap/terraform

terraform -v

Tendremos instalado Terraform en Mac OS.

En Windows:

Para esto es necesario contar con Chocolatey instalado en nuestras máquinas:

choco install terraform

Verificamos la instalación:

terraform -v

Tendremos Terraform instalado.

Ahora imaginemos que queremos crear una instancia de EC2 en AWS. Usaremos Terraform para lograrlo. La extensión del programa será *.tf

main.tf

# Especifica el proveedor de nube, en este caso AWS
provider "aws" {
  region = "us-east-1"  # Región donde se va a desplegar la infraestructura
}

# Definir una clave SSH para conectarse a la instancia
resource "aws_key_pair" "example" {
  key_name   = "example-key"
  public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3..."  # Llave pública SSH
}

# Crear una instancia de EC2 en AWS
resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"  # Identificador de la AMI (Amazon Machine Image)
  instance_type = "t2.micro"  # Tipo de la instancia

  # Configurar la clave SSH para la instancia
  key_name = aws_key_pair.example.key_name

  tags = {
    Name = "Terraform Example Instance"  # Etiqueta para identificar la instancia
  }
}

# Salida para ver la IP pública de la instancia creada
output "instance_public_ip" {
  value = aws_instance.example.public_ip
}

1. Inicializamos el proyecto:

$ terraform init

2. Previsualizar los cambios (plan):

$ terraform plan

3. Aplicar cambios:

$ terraform apply

4. Destruir la infraestructura (cuando ya no sea necesaria):

$ terraform destroy

Hemos dado una breve explicación de lo que es IaC y cómo se relaciona con Terraform.

Enlaces:

https://chocolatey.org/
https://www.terraform.io/

lunes, 1 de enero de 2024

Cosas por aprender... cosas nuevas por aprender

 

Quien se dedique a la programación debería saber que SIEMPRE HAY ALGO NUEVO QUE APRENDER.  Quien ose de creer que lo sabe todo en un futuro estará obligado (quiera o no) a demostrar que así es. Lo que antes era moda hoy es casi "obsoleto" (VB .Net, PHP, Delphi, Informix, etc.). Cosas como Docker, Kubernetes, Terraform, gRPC y demás cosas son lo de hoy. Y llegará un futuro en el que vendrán otros a decir "Esto es lo de hoy, olvídate del pasado". 


El programador incipiente dirá cosas como: "¡No puede ser! ¡Apenas estoy aprendiendo a programar en Angular y ya salió su reemplazo!"

Y es que las cosas son así: Evolucionas o te estancas

"Pepepero, ¿Debo aprender todo lo que salga? ¿Debo convertirme en un Todologo?

Dirán tanto el programador incipiente y como experto. Y la respuesta más discordante y neurótica será: Si y no. Si, porque debes familiarizarte con lo actual. No, porque es imposible saber al 100% algo. Es bueno saber que existe X o Y cosa, y mejor si se puede especializarse en algo. Muy difícil sería saberlo todo (nadie lo sabe todo aunque así lo crea).

Y no todo es sobre programación

También debemos aprender a comunicarnos. Saber escribir, saber leer correctamente. Saber como comunicar nuestras ideas. Saber como resolver cosas antes de que éstas ocurran.

El modelado de sistemas, procesos, etc. también es muy útil. El programador debe saber modelar, esto para evaluar si la organización para la que trabajas está logrando sus objetivos y si está satisfaciendo las necesidades de sus clientes.

En está época donde las IAs están siendo cada vez más populares el programador o quien trabaja con grandes cantidades de información debe familiarizarse con ellas o comenzar a pensar a que se dedicara en un futuro, pues nada se detiene, todo avanza y cambia. El que no vaya a la misma velocidad quedará atrás de todos.



¿Y qué con otros idiomas?

En este post ya hablamos un poco de la importancia de los idiomas (entre otras cosas).  Saber más de un idioma es indispensable en el mundo de informática. Ya sea para leer y entender documentación o hablar con clientes o usuarios. Incluso para exponer proyectos, crear manuales, o resolver incidencias.

Saber un idioma extra al que ya hablas es una ventaja. Saber más de 3 idiomas te pone arriba de otros. Y si hablas más de 3 o 6 podrías trabajar en cualquier parte del mundo, sobre todo si entre éstos son Inglés, Alemán , Koreano o Mandarín.

Certificaciones

Una certificación no te hace experto en algo. Indica que sabes ciertas cosas, solo eso. La experiencia muchas veces es lo que te ayuda a resolver problemas, no un papel. 

Es bueno tener certificaciones si tu trabajo lo requiere. Si eres programador Backend una certificación en Consumo y creación de APIs es un plus para tu carrera. Y si eres más de administración, tener certificaciones en Gestión de proyectos te abrirá otras puertas.

Todos los días podemos aprender cosas nuevas o reforzar lo que ya sabemos (o creemos saber).

Solo basta abrir un poco los ojos y ver en qué podemos mejorar. 

Jai un lenguaje de programación inspirado en C++

Hoy hablaremos de un nuevo lenguaje de programación llamado Jai . Se trata de un lenguaje de programación que está desarrolland...

Etiquetas

Archivo del blog