프로비저너(provisioner)란 리소스가 생성된 후 리소스에 대해 추가 설정 작업을 수행하기 위해 사용되는 도구이다.
가령,EC2 생성 후, 해당 인스턴스에 소프트웨어를 설치하거나 설정을 적용하는 작업을 자동으로 실행한다.
local에 있는 file "script.sh"를 원격 인스턴스로 복사하는 작업을 진행한다.
$ ssh-keygen -f mykey

resource "aws_key_pair" "mykey" {
key_name = "mykey"
public_key = file(var.PATH_TO_PUBLIC_KEY)
}
resource "aws_instance" "example" {
ami = var.AMIS[var.AWS_REGION]
instance_type = "t2.micro"
key_name = aws_key_pair.mykey.key_name
provisioner "file" {
source = "script.sh"
destination = "/tmp/script.sh"
}
provisioner "remote-exec" {
inline = [
"chmod +x /tmp/script.sh",
"sudo sed -i -e 's/\r$//' /tmp/script.sh", # Remove the spurious CR characters.
"sudo /tmp/script.sh",
]
}
connection {
host = coalesce(self.public_ip, self.private_ip)
type = "ssh"
user = var.INSTANCE_USERNAME
private_key = file(var.PATH_TO_PRIVATE_KEY)
}
}




local-exec를 사용하여 {aws_instance.example.private_ip} 속성으로 인스턴스의 private IP를 파일로 출력한다.
이 예제를 활용하여 인프라 프로비저닝 후에 Ansible 호스트 파일에 IP 주소를 채우고 Ansible Playbook을 사용하여 대상 인스턴스들 내에 소프트웨어를 설치할 수 있다.

이 외에도 Terraform에는 다양한 프로비저너가 있는 것을 알 수 있는데 ansible도 잘 불러올 수 있는 듯 하다.
terraform이 조금 더 익숙해지고 프로비저너로 ansible playbook도 실행해 봐야겠다.
https://developer.hashicorp.com/terraform/language/resources/provisioners/syntax