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.
Iniciar sesión con Metamask - Backend Rest en Fastify (Node, Typescript, Prisma)
Estamos construyendo desde cero una API REST en Fastify utilizando MongoDB conectado por Prisma como base de datos, Jest como marco de pruebas y Ether.js para verificar firmas firmadas por Metamask.
Daniel Gustaw
• 23 min read
Componente de Inicio de Sesión en Nuxt (Rest Strapi)
Ejemplo simple de página de inicio de sesión en nuxt3 escrita como base para copiar y pegar en muchos proyectos similares.
Daniel Gustaw
• 5 min read
Cómo crear una cuenta de correo electrónico gratuita con dominio personalizado?
En este artículo, aprenderás cómo crear un correo electrónico gratuito con un dominio personalizado. He mostrado cómo configurar Yandex con tu DNS.
Daniel Gustaw
• 2 min read