Présentation Consul

Comme Terraform, l'outil Consul est propulsé par Hashicorp. Il permet la découverte de service distribué mais c'est également un datastore de type key/value permettant ainsi le stockage d'élément de configuration (et quelques autres trucs sans grande importance ici). Je vous recommande de lire cette page pour savoir tout ce qu'il est capable de faire.

Consul s'installe sous la forme d'un agent qui est chargĂ© d'enregistrer les services, de rĂ©pondre aux requĂȘtes et de collecter toutes les informations du cluster. Il se trouve sur chacun des nƓuds et peut fonctionner en mode client ou serveur. Le cluster lui doit disposer d'au minimum 1 agent de type serveur. Si vous pensez utiliser Consul en production, il est recommandĂ© d'avoir 3 Ă  5 agents en mode server par cluster pour Ă©viter toute perte de donnĂ©es.


Installation Consul

Pour l'installation de Consul, c'est assez simple (et j'ai pas souhaitĂ© me prendre la tĂȘte) via un container Docker. Par contre je ne me suis pas basĂ© sur l'image officielle mais sur progrium/consul pour plusieurs raisons. Pour lancer le container, la procĂ©dure est relativement simple et rapide :

[root@xorhak:~]# mkdir -p /datas/docker/consul/datas
[root@xorhak:~]# docker run -d -p 8400:8400 -p 8500:8500 -p 8600:8600/udp -h $HOSTNAME --name consul -v /datas/docker/consul/datas:/data:rw progrium/consul -server -bootstrap -ui-dir /ui

Lorsque le container est lancé, vous pouvez vous y connecter en HTTP sur le port 8500, il n'y a pas d'authentification par défaut dessus. Pour ma part, les ports 8400, 8500 et 8600 sont bloqués sur le firewall et j'ai mis en place un vhost en proxy_pass Nginx avec une authentification basic.

Dans le cas de cet article, nous n'allons utiliser que le datastore key/value. Peut-ĂȘtre que nous verrons les autres modes plus tard...


Arborescence Consul

La configuration de Consul (dans le mode key/value) ne dépend que de vous. Ici, j'ai fais une arborescence assez simple, l'idée est simplement de voir son fonctionnement avec Terraform :

  • scaleway/ami/name : Debian Jessie : le nom de l'AMI recherchĂ©
  • scaleway/server/type : VC1S : le type d'instance
  • scaleway/server/name : xorhak-instance : le nom de l'instance

Provider Terraform

La configuration du provider dans Terraform est un élément obligatoire puisqu'il est le point de connexion vers le service Consul. La configuration prendra alors cette forme :

provider "consul" {
  address    = "consul.djerfy.com"
  datacenter = "dc1"
}

PS : j'utilise ici un vhost nginx en front, si ce n'est pas le cas pour vous (ou pour faire dans le simple), vous pouvez rajouter :8500, ce qui donnera consul.djerfy.com:8500.


Récupération des keys/values

Maintenant qu'on a une configuration minimale sur le Consul, nous allons pouvoir configurer le fichier Terraform pour récupérer ces valeurs (sous forme de variable) :

data "consul_keys" "scw" {
    datacenter = "dc1"
    key {
        name    = "ami_name"
        path    = "scaleway/ami/name"
        default = "Debian Jessie"
    }
    key {
        name    = "server_name"
        path    = "scaleway/server/name"
        default = "xorhak-instance"
    }
    key {
        name    = "server_type"
        path    = "scaleway/server/type"
        default = "VC1S"
    }
}

Ces valeurs seront maintenant disponibles en tant que variables sous cette forme :

${data.consul_keys.scw.var.ami_name}

Ressource Terraform

Pour mieux comprendre en situation réelle, voici un exemple d'une ressource :

# Get ID for AMI
data "scaleway_image" "ami" {
    architecture = "x86_64"
    name         = "${data.consul_keys.scw.var.ami_name}"
}

# Create instance
resource "scaleway_server" "server" {
    image = "${data.scaleway_image.ami.id}"
    name  = "${data.consul_keys.scw.var.server_name}"
    type  = "${data.consul_keys.scw.var.server_type}"
    tags  = [ 
        "scaleway", 
        "test", 
        "labo", 
        "terraform"
    ]
}

Conclusion

Voilà, vous savez maintenant comment utiliser Consul pour le stockage de key/value et les récupérer via un provider sous Terraform. L'article est relativement basique et rapide, la documentation de Consul et de Terraform vous donneront toujours plus d'informations si vous le souhaitez. L'idée ici était d'en faire une premiÚre approche.

Enjoy!
XorHak