Comment utiliser cloud-init avec Terraform?


24

Je travaille avec Digital Ocean et Terraform et je peux déjà automatiser le domaine, le sous-domaine, les préférences réseau et l'hôte, mais il y a une section intitulée User dataqui ressemble à ceci:

Données d'utilisateur

La description de ce champ indique Allows the use of Cloud-init to configure your droplet. En regardant autour, j'ai trouvé la documentation .

Ma question est de savoir comment tirer parti de cela tout en utilisant Terraform ?

Réponses:


21

Les fichiers cloud-init sont essentiellement des codes d'amorçage, qui s'exécutent avant chaque démarrage, et peuvent - entre autres - modifier des fichiers, configurer des services, créer des utilisateurs, etc.

Tous les types de droplets ne prennent pas en charge toutes les fonctionnalités de cloud-init, par exemple CoreOS utilise sa propre implémentation, avec un sous-ensemble très limité de valeurs valides.

Pour l'utiliser dans terraform, il vous suffit de fournir le fichier cloud-init lors de la création de droplet:

main.tf:

resource "digitalocean_droplet" "web" {
  image              = "coreos-stable"
  name               = "web"
  region             = "lon1"
  size               = "2gb"
  private_networking = true
  ssh_keys           = ["${digitalocean_ssh_key.dodemo.id}"]
  user_data          = "${file("web.conf")}"
}

web.conf:

#cloud-config
coreos:
  units:
    - name: "etcd2.service"
      command: "start"
    - name: "fleet.service"
      command: "start"

Cela va par exemple créer une droplet, où CoreOS exécutera etcd2 et la flotte au démarrage

Vous pouvez trouver d'autres exemples dans ce référentiel , où je montre comment on peut utiliser ces options de configuration pour configurer des services basés sur des dockers simples sur CoreOS


5

Lorsque vous créez un groupe Auto Scaling avec Terraform, vous pouvez spécifier le user_dataà utiliser par les instances créées par cet ASG. Documenté ici - https://www.terraform.io/docs/providers/aws/r/launch_configuration.html#user_data

Vous pouvez également créer une seule instance EC2 et fournir user_dataà utiliser - https://www.terraform.io/docs/providers/aws/r/instance.html#user_data

La documentation AWS EC2 explique comment user_dataest transmise au cloud-initservice qui s'exécute sur la plupart des distributions Linux disponibles en tant qu'AMI sur AWS - http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user- data-cloud-init

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.