반응형
Terraform Provisioner
Terraform의 Provisioner는 Terraform이 리소스를 생성한 후에, 그 리소스 내에서 추가 작업(스크립트 실행, 파일 복사 등)을 자동으로 수행하도록 해주는 기능이다.
즉, Terraform이 인프라를 생성하는 것에 그치지 않고, 생성된 리소스 안에서 필요한 초기 설정 작업(프로비저닝)을 자동화할 때 사용한다.
📌Provisioner 문법
provisioner는 항상 resource 블록 내부에 정의되어야 한다. (단독으로 따로 사용할 수 없다)
resource "<리소스_타입>" "<이름>" {
# 리소스 설정들...
provisioner "<프로비저너_타입>" {
# 실행할 명령어 또는 설정
}
}
📌 Provisioner 사용 예시
Terraform 리소스를 만들고 나서 Provisioner는 다음과 같은 작업을 할 수 있다.
- 서버 안에 명령어 실행 (예: sudo apt update )
- 서버에 파일 복사 (예: script.sh 업로드)
Provisioner 종류
Provisioner | 설명 | 사용 위치 |
remote-exec | 생성한 리소스 내부에서 명령 실행 | EC2 등 리소스 내부 |
file | 생성한 리소스 내부로 파일 복사 | EC2 등 리소스 내부 |
local-exec | Terraform을 실행한 나의 컴퓨터에서 실행 | 로컬 |
🧪 1. remote-exec 예시
Provisioner을통해 EC2 인스턴스에 접속해서 명령어를 직접 실행한다.
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
## EC2 인스턴스를 만든 뒤, apt update와 nginx 설치 명령을 실행
provisioner "remote-exec" {
inline = [
"sudo apt update",
"sudo apt install -y nginx"
]
}
##connection 블록은 SSH 접속을 위한 설정
connection {
type = "ssh"
user = "ubuntu"
private_key = file("~/.ssh/id_rsa")
host = self.public_ip
}
}
🧪 2. file 예시
로컬에서 만든 파일을 EC2 인스턴스로 복사한다.
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
## 로컬의 startup.sh 파일을 EC2의 /home/ubuntu/ 경로로 복사
provisioner "file" {
source = "startup.sh"
destination = "/home/ubuntu/startup.sh"
}
connection {
type = "ssh"
user = "ubuntu"
private_key = file("~/.ssh/id_rsa")
host = self.public_ip
}
}
🧪 3. local-exec 예시
Terraform을 실행하는 내 컴퓨터에서 명령어를 실행한다.
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
## EC2가 생성되면, 내 컴퓨터에서 public IP를 출력
provisioner "local-exec" {
command = "echo 'EC2 instance has been created: ${self.public_ip}'"
}
}
🤔 문제
Terraform이 생성한 리소스 안에서 프로세스를 실행하는 프로비저너는 무엇인가요?
- remote-exec
- null-exec
- local-exec
- file
정답
더보기
정답. 1번
🤔 문제 2
Terraform의 provisioner는 반드시 리소스 설정 블록 안에 중첩(nest)되어야 한다.
- 맞다 (True)
- 아니다 (False)
정답
더보기
정답 1번
반응형
'Terraform' 카테고리의 다른 글
IaC(infrastructure as code) 핵심 원칙 쉽게 정리 (0) | 2025.06.16 |
---|---|
[Terraform] terraform state 명령어란? 아주 쉽게 정리 (0) | 2025.06.16 |
[Terraform] terraform taint 명령어란? 아주 쉽게 정리 (0) | 2025.06.14 |
[Terraform] Provider란? 쉽게 정리 (required_providers) (0) | 2025.06.14 |
[Terraform] remote backend란? 쉽게 정리 (2) | 2025.06.14 |