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 | 반복되는 구성 동적 처리 |
마지막 수정일자