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)의 상태로 관리하는 방식

댓글남기기