Terraform admite una variedad de proveedores de servicios a través de proveedores que puedes instalar. Cada proveedor tiene sus propias especificaciones, que generalmente se corresponden con la API de su respectivo proveedor de servicios.
El proveedor de DigitalOcean permite a Terraform interactuar con la API de DigitalOcean para construir infraestructura. Este proveedor admite la creación de varios recursos de DigitalOcean, incluidos los siguientes:
- digitalocean_droplet: Droplets (servidores)
- digitalocean_loadbalancer: Balanceadores de Carga
- digitalocean_domain: Entradas de dominio DNS
- digitalocean_record: Registros DNS
Terraform utilizará tu Token de Acceso Personal de DigitalOcean para comunicarse con la API de DigitalOcean y administrar recursos en tu cuenta. No compartas esta clave con otros y mantenla fuera de scripts y control de versiones. Exporta tu Token de Acceso Personal de DigitalOcean a una variable de entorno llamada DO_PAT ejecutando:
export DO_PAT="tu_token_de_acceso_personal"
Esto facilitará su uso en comandos posteriores y lo mantendrá separado de tu código.
Nota: Si trabajarás con Terraform y DigitalOcean con frecuencia, agrega esta línea a tus archivos de configuración de shell utilizando el mismo enfoque que usaste para modificar tu variable de entorno PATH en el paso anterior.
Crea un directorio que almacenará la configuración de tu infraestructura ejecutando el siguiente comando:
mkdir ~/balanceadorcarga
Navega al directorio recién creado:
cd ~/balanceadorcarga
Las configuraciones de Terraform son archivos de texto que terminan con la extensión de archivo .tf. Son legibles por humanos y admiten comentarios. (Terraform también admite archivos de configuración en formato JSON, pero no se cubrirán aquí). Terraform leerá todos los archivos de configuración en tu directorio de trabajo de manera declarativa, por lo que el orden de definiciones de recursos y variables no importa. Toda tu infraestructura puede existir en un solo archivo de configuración, pero debes separar los archivos de configuración por tipo de recurso para mantener la claridad.
El primer paso para construir una infraestructura con Terraform es definir el proveedor que vas a usar.
Para usar el proveedor de DigitalOcean con Terraform, debes informarle a Terraform al respecto y configurar el complemento con las variables de credenciales adecuadas. Crea un archivo llamado provider.tf, que almacenará la configuración para el proveedor:
nano provider.tf
Agrega las siguientes líneas al archivo para indicarle a Terraform que deseas usar el proveedor de DigitalOcean e instruir a Terraform dónde encontrarlo:
~/balanceadorcarga/provider.tf
terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}
Luego, define las siguientes variables en el archivo para que puedas hacer referencia a ellas en el resto de tus archivos de configuración:
- do_token: tu Token de Acceso Personal de DigitalOcean.
- pvt_key: ubicación de la clave privada, para que Terraform pueda usarla para iniciar sesión en nuevos Droplets e instalar Nginx.
Pasará los valores de estas variables a Terraform cuando lo ejecutes, en lugar de codificar los valores aquí. Esto hace que la configuración sea más portátil.
Para definir estas variables, agrega estas líneas al archivo:
~/balanceadorcarga/provider.tf
...
variable "do_token" {}
variable "pvt_key" {}
Luego, agrega estas líneas para configurar el proveedor de DigitalOcean y especificar las credenciales de tu cuenta de DigitalOcean asignando el do_token al argumento token del proveedor:
~/balanceadorcarga/provider.tf
...
provider "digitalocean" {
token = var.do_token
}
Finalmente, querrás que Terraform agregue automáticamente tu clave SSH a cualquier nuevo Droplet que crees. Cuando agregaste tu clave SSH a DigitalOcean, le diste un nombre. Terraform puede usar este nombre para recuperar la clave pública. Agrega estas líneas, reemplazando terraform con el nombre de la clave que proporcionaste en tu cuenta de DigitalOcean:
~/balanceadorcarga/provider.tf
...
data "digitalocean_ssh_key" "terraform" {
name = "terraform"
}
Tu archivo provider.tf completo se verá así:
~/balanceadorcarga/provider.tf
terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}
variable "do_token" {}
variable "pvt_key" {}
provider "digitalocean" {
token = var.do_token
}
data "digitalocean_ssh_key" "terraform" {
name = "terraform"
}
Cuando hayas terminado, guarda y cierra el archivo.
Nota: Configurar la variable de entorno TF_LOG en 1 permitirá un registro detallado de lo que Terraform está intentando hacer. Puedes configurarlo ejecutando:
export TF_LOG=1
Inicializa Terraform para tu proyecto ejecutando:
terraform init
Esto leerá tu configuración e instalará los complementos para tu proveedor. Verás eso registrado en la salida:
Output
Initializing the backend...
Initializing provider plugins...
- Finding digitalocean/digitalocean versions matching "~> 2.0"...
- Installing digitalocean/digitalocean v2.16.0...
- Installed digitalocean/digitalocean v2.16.0 (signed by a HashiCorp partner, key ID F82037E524B9C0E8)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
Si te quedas atascado y Terraform no funciona como esperas, puedes comenzar de nuevo eliminando el archivo terraform.tfstate y destruyendo manualmente los recursos que se crearon (por ejemplo, a través del panel de control).
Terraform ahora está configurado y puede conectarse a tu cuenta de DigitalOcean. En el próximo paso, usarás Terraform para definir un Droplet que ejecutará un servidor Nginx.