¡Hola y bienvenidos! Hoy vamos a ver cómo crear un servidor (también conocido como un droplet) en Digital Ocean a través de Terraform. Esta es una de las cosas más simples que se pueden lograr con Terraform, pero ilustra la comprensión de conceptos básicos como Infraestructura como código (IaC), Terraform en sí, módulos de Terraform, servidores en la nube, prácticas básicas de redes y seguridad.
Puedes encontrar la base de código de este tutorial aquí en Github.
Sin más preámbulos, ¡comencemos! 🚀
Para poder hacer algo con Terraform, primero necesitamos tenerlo instalado en nuestro sistema. La documentación de Terraform tiene una excelente lista sobre las diferentes formas de instalar Terraform en diferentes sistemas. Echa un vistazo a esta guía aquí.
Adquirir credenciales de Digital Ocean
Para poder autenticar y autorizar a Terraform para crear nuestro servidor en Digital Ocean, necesitamos las credenciales adecuadas. Terraform requiere diferentes tipos de credenciales dependiendo del proveedor de Terraform que se esté utilizando. Para autenticar y autorizar al proveedor responsable de aplicar nuestras configuraciones, necesitaremos un API Token de Digital Ocean, que se obtiene de la pantalla a continuación.

Esto se encuentra en la dirección web https://cloud.digitalocean.com/account/api/tokens en una cuenta de Digital Ocean autenticada.
Al crear tu API Token en Digital Ocean, asegúrate de hacerlo con el alcance Write habilitado para tu token. Terraform no podrá crear recursos para ti sin esto. Recuerda también establecer una fecha de expiración adecuada.

Configurar el proveedor de Terraform de Digital Ocean
Ahora que tenemos nuestro API Token para autenticar y autorizar a Terraform, podemos comenzar a crear nuestra configuración de Terraform. Comenzaremos creando un archivo providers.tf. Dentro de este archivo, vamos a proporcionar la configuración necesaria para configurar el proveedor de Digital Ocean (digitalocean).
Para aprender más sobre los proveedores de Terraform, visita https://developer.hashicorp.com/terraform/language/providers
Comenzaremos nuestro archivo con el siguiente contenido:
terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}Esto configura el bloque terraform. Dentro de este bloque, configuramos el proveedor digitalocean como un proveedor requerido.
La información detallada sobre el proveedor digitalocean se puede encontrar en su página de documentación aquí https://registry.terraform.io/providers/digitalocean/digitalocean/latest/docs
A continuación, configuraremos el proveedor en sí, agregando el siguiente código a nuestro archivo providers.tf:
# Configurar el proveedor de DigitalOcean
provider "digitalocean" {
token = var.do_token
}Este código configura el proveedor digitalocean con el token de acceso token. Este es el mismo token que adquirimos en el paso 1.
Como mejor práctica, nunca proporciones secretos de cuenta como valores en tus archivos de configuración de Terraform, ya que esto los hará visibles para un uso malicioso potencial. En nuestro código anterior, hemos proporcionado nuestra clave API como una variable de Terraform var.do_token.
Hay varias formas de proporcionar el valor real de nuestra clave API a Terraform.
- Podríamos crear un archivo
terraform.tfvarsy completar el valor de nuestra variable así:
do_token=real_key_value- Podríamos crear una variable de entorno en nuestra máquina host con el nombre
TF_VAR_do_tokeny establecer su valor al de nuestra clave, así:
export TF_VAR_do_token=real_key_valueReemplazando real_key_value con el valor apropiado para nuestra clave API en cada caso.
Con ambos métodos, Terraform podrá encontrar el valor de nuestra variable cuando ejecute nuestra configuración.
Si vas a proporcionar los valores de tus variables a través de un archivo terraform.tfvars, asegúrate de NUNCA verificarlo en el control de versiones. Siempre utiliza este archivo solo localmente.
Si no se utiliza ninguno de estos métodos para pasar el valor a nuestra variable, Terraform solicitará el valor de cada variable en el símbolo del sistema cada vez que ejecute nuestra configuración.
Inicializar Terraform
Con la configuración de nuestro proveedor lista, es hora de inicializar nuestra configuración de Terraform.
Hacemos esto simplemente ejecutando el siguiente comando en la línea de comandos:
terraform initDurante la inicialización, Terraform descarga los archivos de proveedor requeridos para nuestra configuración e inicializa nuestro backend.
Para mantener este tutorial simple, utilizaremos el backend local predeterminado de Terraform. Para aprender más sobre los backends de Terraform, visita https://developer.hashicorp.com/terraform/language/settings/backends/configuration
Configurar la configuración de despliegue del servidor
Con Terraform inicializado, es hora de crear la configuración que despliega nuestro servidor (también llamado un droplet en la jerga de Digital Ocean).
Comenzaremos creando un nuevo archivo, server.tf. Nuestra configuración es la siguiente:
resource "digitalocean_vpc" "server_vpc" {
name = "server-vpc"
region = var.do_region
ip_range = "10.10.10.0/24"
}
resource "digitalocean_droplet" "server" {
name = "server"
size = "s-1vcpu-1gb"
image = "ubuntu-22-04-x64"
region = var.do_region
vpc_uuid = digitalocean_vpc.server_vpc.id
}Nuestro código crea dos bloques de recursos de Terraform. El primero, un recurso digitalocean_vpc, crea la Red Privada Virtual dentro de la cual vivirá nuestro servidor en Digital Ocean.
- el atributo
nameconfigura el nombre de nuestra red vpc - el atributo
regiona través de la variablevar.do_region, configura en qué parte del mundo queremos que se despliegue nuestra vpc - el atributo
ip_rangeconfigura el rango de direcciones IP preferido para nuestra red - el atributo
vpc_uuiddirige a nuestro servidor a ser colocado dentro de la redserver-vpcque creamos como primer paso
El segundo bloque crea un recurso digitalocean_droplet de Terraform y lo configura con los atributos de nombre, tamaño, imagen y región. Estos atributos son obligatorios para que nuestro servidor se cree en Digital Ocean.
Como indican sus nombres;
- el atributo
nameconfigura el nombre de nuestro servidor en Digital Ocean - el atributo
sizeconfigura la combinación de Procesador (cpu) y Memoria (RAM) de nuestro servidor - el atributo
imageconfigura la imagen del Sistema Operativo particular con la que nos gustaría que viniera nuestro servidor - el atributo
regionconfigura la ubicación en el mundo donde nos gustaría que se desplegara nuestro servidor.
Como probablemente puedes adivinar, estos atributos pueden tener muchos otros valores además de los que especificamos aquí. Una visita a la documentación de Digital Ocean proporcionará una lista más completa de valores para su uso posterior.
Aquí es donde creas la variable var.do_region como se requiere en nuestros bloques de recursos. Dependiendo del método que hayas elegido para pasar los valores de las variables a Terraform, necesitas crear un segundo.
Incluye la siguiente línea en tu archivo terraform.tfvars si esa es la ruta que has elegido;
do_region=fra1O crea una variable de entorno adicional de la siguiente manera;
export TF_VAR_do_region=fra1NOTA: fra1 se refiere al centro de datos de Frankfurt de Digital Ocean. Visita la documentación de Digital Ocean para averiguar posibles centros de datos alternativos para usar.
Aplicar la configuración de Terraform
Es hora de aplicar nuestra configuración de Terraform y crear nuestros recursos en Digital Ocean. Para confirmar que haremos exactamente lo que pretendemos, primero ejecutaremos el comando terraform plan.
La salida de este comando debería ser similar a la siguiente;

Una mirada debajo de la salida mostrará la salida 2 para agregar, 0 para cambiar, 0 para destruir. Esto significa que estamos en orden, ya que agregaremos dos recursos, no cambiaremos ninguno y no destruiremos ninguno.
Si nuestra salida coincide con la que se muestra arriba, entonces podemos proceder y ejecutar terraform apply para aplicar nuestra configuración.
Debería presentarse una pantalla de confirmación similar a la siguiente, a la que debemos responder yes.

Con éxito, deberíamos obtener una salida similar a la siguiente de Terraform;

¡HURRAYY!! 🎉 🎉 Has desplegado con éxito un servidor en Digital Ocean a través de Terraform.
¡Felicidades por crear tu servidor en Digital Ocean a través de Infraestructura como Código! Es importante que recuerdes destruir el servidor cuando ya no esté en uso, para evitar cargos inesperados en tu información de pago.
Ejecuta el comando terraform destroy y confirma yes para destruir tu servidor en el momento en que ya no lo necesites.
¡Espero que encuentres útil esta publicación! ¡Hasta luego!
Leer más
Proyecto Self-Hosting (Infraestructura DevOps desde Cero)
Una guía completa para construir una infraestructura DevOps autoalojada desde cero utilizando Terraform, Ansible y Docker.
Implementación del flujo de trabajo central de Terraform en colaboración, a través de Github Pull Requests, Actions, Bot, Environments y un Backend Remoto.
Implemente un flujo de trabajo colaborativo de Terraform utilizando GitHub Actions, pull requests y un backend remoto para equipos de producción.
Despliegue automático de Jenkins en un servidor remoto (con SSL gratuito) mediante Ansible (Guía)
Aprenda a desplegar automáticamente un servidor Jenkins autohospedado con certificados SSL gratuitos de renovación automática utilizando Ansible.
