Mi primeros pasos con Terraform

Buenas noches,

Estos últimos días empecé a probar Terraform, en particular para manejar servicios que tengo corriendo en Linode, que es un proveedor cloud bastante intersante en especial por su bajo costo y con muchísimos servicios ideales para desplegar infra escalable de manera bastante simple.

Al provider de Linode para Terraform lo pueden encontrar aquí.

Mi objetivo es crear una serie de buckets para backups, así que me puse en la tarea de escribir un módulo bastante sencillo (recomiendo leer la siguiente guía para arrancar).

$ tree 
.
├── main.tf
├── modules
│   ├── buckets
│       ├── main.tf
│       ├── outputs.tf
│       └── variables.tf
├── sensitive.tfvars
├── terraform.tfvars
└── variables.tf

En donde el main.tf luce de la siguiente manera:

provider "linode" {
  version = "~> 1.6"
  token = var.token
}

module "buckets" {
  source = "./modules/buckets"
  label = var.label
  region = var.region
  key_label = var.key_label
}

variables.tf

variable "region" {
  type = string
  description = "Default region"
  default = "us-central"
}

variable "label" {
  type = string
  description = "The bucket label"
  default = "default_label"
}

variable "key_label" {
  type = string
  description = "Object storage access key"
  default = "access_key"
}

variable "token"{
}

terraform.tfvars

label = "backup"
region = "us-east"
key_label = "backups_key"

sensitive.tfvars

token = "abcdefghi="

Finalmente, dentro del directorio buckets tengo lo siguiente:

main.tf

data "linode_region" "region" {
  id = var.region
}

data "linode_object_storage_cluster" "primary" {
  id = "${data.linode_region.region.id}-1"
}

resource "linode_object_storage_key" "bucket_key" {
  label = var.key_label
}

resource "linode_object_storage_bucket" "bucket" {
  cluster = data.linode_object_storage_cluster.primary.id
  label = var.label
}

variables.tf

variable "region" {
  type = string
  description = "Default region"
  default = "us-east"
}

variable "label" {
  type = string
  description = "The bucket label"
  default = "bucket_label"
}

variable "key_label" {
  type = string
  description = "Object storage access key"
  default = "bucket_key"
}

outputs.tf

output "bucket_label" {
  value = linode_object_storage_bucket.bucket.label
}

output "bucket_key" {
  value = linode_object_storage_key.bucket_key.label
}

Bastante sencillo, si. Antes de desplegar los cambios ejecutar:

$ terraform plan -var-file="sensitive.tfvars" -var-file="terraform.tfvars"

para saber qué va a hacer Terraform (crear, modificar o borrar un recurso).

Para finalmente aplicarlos

$ terraform apply -var-file="sensitive.tfvars" -var-file="terraform.tfvars"

Espero que haya sido de utilidad, estos son mis primeros pasos utilizando esta herramienta. Próximamente actualizaré mi repositorio incluyendo los templates para crear linodes.

Saludos.

Comentarios

Entradas más populares de este blog

Errores con mirrors de Raspberry Pi

Mis razones para abandonar y no volver IBM Cloud

Me gusta GnuPG