Terraform II

Índice

Después de una breve introducción a Terraform, creo que la mejor manera de entender como funciona es con un ejemplo simple.

Pues vamos a ello con un ejemplo utilizando un provider , en este caso Docker.

Necesitamos:

Preparación

Para empezar lo haremos con algo sencillo. Como somos gente organizada vamos a crear un directorio para nuestra receta con dos archivos ( container.tf y provider.tf )

mkdir -p terraform/docker && cd terraform/docker && touch container.tf && touch provider.tf

Abrimos con nuestro editor provider.tf y en el dreclaramos el proveedor de la siguiente manera:

# provider
terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "2.15.0"
    }
  }
}
provider "docker" {
    host = "unix:///var/run/docker.sock"
}

A continuación editamos container.tf y colocaremos el siguiente contenido:

# Contenedor
resource "docker_container" "hello_world" {
  name  = "cduser_hello_world"
  image = "tutum/hello-world"

# Puerto del contenedor que vamos a exponer

  ports {
    internal = 80
    external = 80
   }
}

Como se puede observar, se ejecutaran las siguientes tareas:

  • Descargamos la imagen de Docker “tutum/hello-world”
  • Exponemos el puerto 80 del contenedor en el puerto 80 local de nuestra maquina

Desplegamos

Una vez que tenemos todo preparado vamos al lio:

Iniciamos:

terraform init

Planificamos:

terraform plan

Aplicamos:

terraform apply

Comprobamos:

docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                NAMES
0282aeb3e121   tutum/hello-world   "/bin/sh -c 'php-fpm…"   18 seconds ago   Up 16 seconds   0.0.0.0:80->80/tcp   cduser_hello_world

Vamos al navegador y ejecutamos http://localhost y debería aparece la imagen de Hello World del contenedor:

Como ya vemos que todo funciona, damos por terminada la practica. Destruimos la infraestructura.

terraform destroy

Comprobamos:

docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                NAMES

Aqui podemos ver el proceso completo:

Bueno pues por ahora ya hemos terminado, espero vernos en la próxima.