Provisioners et lifecycle 18 min de lecture

Provisioners et lifecycle

Provisioners

Les provisioners executent des scripts apres la creation d'une ressource.

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  # Executer un script local apres creation
  provisioner "local-exec" {
    command = "echo ${self.public_ip} >> hosts.txt"
  }

  # Executer un script sur la machine distante
  provisioner "remote-exec" {
    inline = [
      "sudo apt update",
      "sudo apt install -y nginx",
      "sudo systemctl start nginx"
    ]

    connection {
      type        = "ssh"
      user        = "ubuntu"
      private_key = file("~/.ssh/id_rsa")
      host        = self.public_ip
    }
  }
}

Lifecycle — Controler le cycle de vie

resource "aws_instance" "web" {
  # ...

  lifecycle {
    # Creer la nouvelle avant de detruire l'ancienne
    create_before_destroy = true

    # Empecher la destruction accidentelle
    prevent_destroy = true

    # Ignorer certains changements (ex: tags manuels)
    ignore_changes = [tags]

    # Remplacer la ressource si une condition change
    replace_triggered_by = [
      aws_security_group.web_sg.id
    ]
  }
}

Depends_on — Dependances explicites

resource "aws_instance" "web" {
  # ...
  depends_on = [aws_security_group.web_sg]
}
Attention : Les provisioners sont un dernier recours. Preferez des outils dedies (Ansible, cloud-init) pour la configuration. Les provisioners rendent le code moins predictible.