Infraestructura como Código (Terraform + Digital Ocean)
En esta publicación, muestro cómo configurar servidores utilizando la línea de comandos de terraform.
Daniel Gustaw
• 3 min read
En el raspado, un factor importante es la escala a la que podemos expandir la tasa de recuperación y procesamiento de datos. Hace unos años, cuando escribí mi primer sistema que recopilaba datos en paralelo utilizando varios servidores, cada uno de estos servidores fue “clicado” por mí en el panel del proveedor.
Ahora mostraré cómo configurar servidores desde la línea de comandos utilizando terraform
. El proveedor será Digital Ocean, ya que tiene precios de transferencia de red muy favorables (8-10 veces más bajos) en comparación con su mayor competidor.
Instalación de Terraform
yay -S terraform
Conectando el Proveedor
Para conectarnos a Digital Ocean necesitamos un token. Si no lo tenemos, encontraremos el botón “Generar Nuevo Token” en la pestaña API en el panel.
Vale la pena guardar el token en ~/.zshrc
o ~/.bashrc
export DIGITALOCEAN_TOKEN=xxxxxxxxxxxxxxxxxxxxxx
después de volver a ejecutar, este archivo estará disponible en todos los proyectos que creemos.
La documentación oficial muestra cómo hacer esto utilizando la variable do_token
pero no recomiendo este método, ya que nos obliga a agregar argumentos -var
a los comandos de terraform
, y el enfoque presentado aquí nos ahorra la cantidad de caracteres escritos.
Para configurar la conexión a Digital Ocean teniendo el token en variables de entorno, creamos un archivo provider.tf
y escribimos lo siguiente:
terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "2.5.1"
}
}
}
provider "digitalocean" {}
Y luego ejecutamos el comando de inicialización.
terraform init
Implementación del Servidor
El siguiente paso es planificar y configurar la infraestructura. En nuestro caso, será muy simple. Debería contener exactamente un droplet con claves para todo el inventario en el que quiero iniciar sesión.
Creamos otro archivo. Lo llamé master.tf
data "digitalocean_ssh_key" "dell" {
name = "Daniel Laptop Dell"
}
data "digitalocean_ssh_key" "yoga" {
name = "Daniel Lenovo Yoga"
}
data "digitalocean_ssh_key" "hp" {
name = "Daniel Stacjonarny"
}
# Create a web server
resource "digitalocean_droplet" "web" {
image = "ubuntu-18-04-x64"
name = "web-1"
region = "fra1"
size = "s-1vcpu-1gb"
ssh_keys = [
data.digitalocean_ssh_key.dell.id,
data.digitalocean_ssh_key.yoga.id,
data.digitalocean_ssh_key.hp.id
]
}
Estas son las claves que encontraremos en la pestaña “Configuración -> Seguridad” en el panel de Digital Ocean.
Ejecución
terraform plan
Verificará si nuestra configuración está bien y nos permitirá ver cómo cambiará la arquitectura después del despliegue. En este caso, será la adición de un servidor - exactamente como lo escribimos en la configuración.
Implementaremos ingresando
terraform apply -auto-approve
La ejecución de este comando me tomó 47s
.
Resumen de Resultados
Para ver lo que hemos configurado, ejecutamos el comando:
terraform show terraform.tfstate
Devuelve datos sobre los recursos gestionados por terraform
Lo más interesante para nosotros es ip
. En este caso 164.90.174.250
.
Inicia sesión en el servidor con el comando
ssh -o "StrictHostKeyChecking no" [email protected]
Como puedes ver, funciona porque el comando nos registró en el servidor web-1
como root
.
Después de regresar a localhost
con el comando
exit
podemos eliminar todos los droplets creados con el comando
terraform destroy -auto-approve
¡Se debe recordar después de completar el trabajo, especialmente si operamos a gran escala de potencia de computación!
Other articles
You can find interesting also.
Ruby on Rails - introducción rápida
Introducción a Ruby on Rails presentando CRUD, relaciones de base de datos, correo y comunicación por sockets web.
Daniel Gustaw
• 13 min read
Cómo la guerra por la compatibilidad moldeó el frontend?
Describimos cómo la desactualización y el mantenimiento de la compatibilidad hacia atrás han influido en la dirección del desarrollo de la tecnología web.
Daniel Gustaw
• 6 min read
CodinGame: Arte ASCI - Rust, NodeJs - Cadenas, Arreglos, Bucles
Resolver este rompecabezas enseña cómo gestionar cadenas y aritmética de arreglos. Sabrás cómo dividir una cadena en partes separadas y concatenarlas en una nueva. Puedes usar índices de arreglos.
Daniel Gustaw
• 10 min read