User Data vs Provisioner
User Data와 Provisioner는 클라우드 인프라에서 리소스를 생성하고 구성하는 메커니즘입니다. 두 가지 모두 사용할 수 있지만, 일반적으로 다음과 같은 우선순위를 따르는 것이 좋습니다.
User Data
- 리소스 생성 시점에 스크립트를 실행하는 간단한 메커니즘
- 주로 패키지 설치, 파일 다운로드, 시스템 구성 등 초기 설정에 사용
- User Data는 리소스 생성 시 한 번만 실행되며, 변경할 때마다 리소스를 재생성해야 함
User Data 예시
#!/bin/bash
yum update -y
yum install -y httpd
systemctl enable httpd
systemctl start httpd
위 예시는 Amazon Linux 2 EC2 인스턴스에서 Apache HTTP 서버를 설치하고 시작하는 User Data 스크립트입니다.
Provisioner
- Terraform에 내장된 더 강력한 프로비저닝 메커니즘
- 리소스 생성 후에도 지속적으로 프로비저닝 실행 가능
- 다양한 프로비저너 유형(remote-exec, local-exec, file, chef, puppet 등) 지원
- 더 복잡한 프로비저닝 작업에 적합
Provisioner 예시
resource "aws_instance" "example" {
ami = "ami-0cff7528ff583bf9a"
instance_type = "t2.micro"
provisioner "remote-exec" {
inline = [
"sudo amazon-linux-extras install -y nginx1",
"sudo systemctl start nginx"
]
}
}
위 예시는 Terraform 코드에서 EC2 인스턴스를 프로비저닝하고 Nginx를 설치 및 시작하는 remote-exec 프로비저너를 사용합니다.
일반적으로 간단한 초기 구성은 User Data를 사용하고, 복잡한 프로비저닝이 필요한 경우 Provisioner를 사용하는 것이 좋습니다. 그러나 프로젝트 요구사항과 팀 역량에 따라 선택할 수 있습니다.
기준 | User Data | Provisioner |
---|---|---|
실행 시점 | 리소스 생성 시 | 리소스 생성 후 |
실행 방식 | 한 번만 실행 | 지속적 실행 가능 |
사용 사례 | 간단한 초기 구성 | 복잡한 프로비저닝 |
실행 순서 | User Data가 먼저 실행 | User Data 실행 후 실행 |
또한, Immutable Infrastructure 개념에서는 User Data나 Provisioner 보다는 Packer와 같은 도구를 사용하여 이미지를 생성하고 이를 배포하는 방식을 권장합니다. 이를 통해 더 일관되고 재현 가능한 인프라를 구축할 수 있습니다.
결론적으로, 간단한 초기 설정에는 User Data, 복잡한 프로비저닝에는 Provisioner를 사용하되, Immutable Infrastructure 접근 방식도 고려해 볼 수 있습니다.
- Immutable Infrastructure는 infrastrucure as code 원칙 중 하나로, 인프라 구성 요소를 불변(Immutable)의 상태로 관리하는 방식
댓글남기기