Terraform 주요 구성 요소

Terraform 주요 구성 요소

1️⃣ Provider: AWS, Azure, GCP 등 클라우드 프로바이더 설정

1 Provider란?

Terraform에서 Provider(제공자) 는 인프라를 관리하는 API를 호출하는 플러그인입니다.
AWS, Azure, GCP뿐만 아니라 GitHub, Kubernetes, Docker 등도 Provider로 사용 가능합니다.

2 예시 - AWS Provider

provider "aws" {
  region = "ap-northeast-2"
  access_key = var.aws_access_key
  secret_key = var.aws_secret_key
}

📦 Provider는 terraform init 시 자동 다운로드됩니다.


2️⃣ Resource: 인프라 리소스 생성

1 Resource란?

클라우드에 실제로 생성될 인프라 구성 요소입니다. 예: EC2 인스턴스, S3 버킷 등

2 예시 - EC2 인스턴스 생성

resource "aws_instance" "my_instance" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  tags = {
    Name = "TerraformInstance"
  }
}

🔧 terraform apply 시 리소스가 생성됩니다.


3️⃣ Data Source: 외부 데이터 활용

1 Data Source란?

Terraform 외부에 존재하는 리소스 정보를 읽어오는 기능입니다.
(생성은 ❌, 읽기 전용 ✅)

2 예시 - 최신 Amazon Linux AMI 조회

data "aws_ami" "latest_amazon_linux" {
  most_recent = true
  owners      = ["amazon"]

  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*-x86_64-gp2"]
  }
}

resource "aws_instance" "example" {
  ami           = data.aws_ami.latest_amazon_linux.id
  instance_type = "t2.micro"
}

🔍 Data Source로 동적 정보 반영 가능!


4️⃣ Variable & Output: 변수 및 출력 값 다루기

1 Variable - 입력 값 정의

variable "instance_type" {
  description = "EC2 타입"
  default     = "t2.micro"
}

2 terraform.tfvars로 변수값 주기

instance_type = "t3.micro"

3 Output - 실행 결과 출력

output "instance_ip" {
  value = aws_instance.example.public_ip
}

🧪 terraform apply 후 결과를 출력해 확인할 수 있습니다.


5️⃣ Local Values: 로컬 변수 활용

1 Local Values란?

로직을 간단하게 하기 위한 임시 변수 개념입니다.

2 예시

locals {
  name_prefix = "dev-"
}

resource "aws_s3_bucket" "example" {
  bucket = "${local.name_prefix}s3-bucket"
}

📦 중복 제거 & 가독성 향상에 탁월!


6️⃣ Terraform Provisioner: 인스턴스 프로비저닝 자동화

1 Provisioner란?

EC2 인스턴스 같은 리소스에 명령어를 실행할 수 있는 기능입니다.

2 예시 - EC2에 스크립트 실행

resource "aws_instance" "example" {
  ...

  provisioner "remote-exec" {
    inline = [
      "sudo apt update",
      "sudo apt install -y nginx"
    ]
  }

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

⚠️ Provisioner는 가능한 최후 수단으로만 사용하는 것이 권장됩니다.


7️⃣ Dynamic Blocks: 동적 리소스 생성

1 Dynamic Block이란?

중복되는 블록을 반복문처럼 동적으로 생성할 수 있게 해줍니다.

2 예시 - 여러 Tag 생성

variable "tags" {
  default = {
    "Name"      = "example"
    "Environment" = "dev"
  }
}

resource "aws_instance" "example" {
  ...

  dynamic "tags" {
    for_each = var.tags
    content {
      key   = tags.key
      value = tags.value
    }
  }
}

🧩 반복되는 설정을 줄여 코드가 깔끔해집니다.


🎯 정리

구성 요소 설명
Provider 클라우드 API를 사용하는 Terraform 플러그인
Resource 실제 생성되는 인프라 리소스
Data Source 외부 리소스의 정보만 읽어오기
Variable & Output 변수 입력 및 결과 출력
Local Values 중간 계산값, 코드 간결화
Provisioner 리소스에 명령어 실행 (비권장)
Dynamic Block 반복되는 구성 동적 처리

RSS Feed
마지막 수정일자