Blog de Obi Madu
Volver a todos los artículos
InfrastructureDevOpsProjects

Desplegar un servidor en Digital Ocean a través de Terraform (Cómo hacerlo)

Una guía paso a paso para aprovisionar un droplet de DigitalOcean utilizando Terraform y prácticas básicas de Infraestructura como Código.

Desplegar un servidor en Digital Ocean a través de Terraform (Cómo hacerlo)

¡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.

Obtener un API Token de Digital Ocean

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.

crear nuevo API Token de DO

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.tfvars y 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_token y establecer su valor al de nuestra clave, así:
export TF_VAR_do_token=real_key_value

Reemplazando 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 init

Durante 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 name configura el nombre de nuestra red vpc
  • el atributo region a través de la variable var.do_region, configura en qué parte del mundo queremos que se despliegue nuestra vpc
  • el atributo ip_range configura el rango de direcciones IP preferido para nuestra red
  • el atributo vpc_uuid dirige a nuestro servidor a ser colocado dentro de la red server-vpc que 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 name configura el nombre de nuestro servidor en Digital Ocean
  • el atributo size configura la combinación de Procesador (cpu) y Memoria (RAM) de nuestro servidor
  • el atributo image configura la imagen del Sistema Operativo particular con la que nos gustaría que viniera nuestro servidor
  • el atributo region configura 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=fra1

O crea una variable de entorno adicional de la siguiente manera;

export TF_VAR_do_region=fra1

NOTA: 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;

Salida de la operación de plan de Terraform

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.

Confirmar aplicación de Terraform

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

Éxito en la aplicación 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!