Terraform 참고 자료 - 유용한 명령어 및 예제
모든 terraform 명령어 목록
Page content
이곳에는 Terraform 사용에 필수적인 명령어, 구성 요소, 리소스 관리, 모듈, 변수, 상태 관리 및 최고의 실천 방법을 포함한 포괄적인 Terraform cheatsheet가 있습니다.
Terraform은 HashiCorp에서 개발한 오픈소스 인프라-as-code(IaC) 도구로, 사용자가 선언형 구성 파일을 통해 여러 클라우드 제공업체(AWS, Azure, GCP 등)의 인프라를 정의하고 배포할 수 있도록 합니다. 주요 목적은 인프라 배포를 자동화하고 일관성을 유지하며 수동 오류를 줄이는 것입니다. Terraform은 다중 클라우드, 모듈식, 상태 기반 워크플로우를 지원하여 현대 DevOps 실천의 핵심 요소로 자리 잡고 있습니다.
Terraform의 주요 장점:
- 선언형 문법: 원하는 인프라 상태를 코드로 정의할 수 있습니다.
- 프로바이더 중립성: AWS, Azure, GCP, Kubernetes 등과 호환됩니다.
- 상태 관리: 인프라 변경을 추적하여 충돌을 방지합니다.
설치 및 설정 가이드
https://developer.hashicorp.com/terraform/tutorials#get-started
Terraform 설치 과정은 매우 간단합니다.
-
Linux (Ubuntu/Debian):
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install terraform
-
Windows (WSL):
wget -O terraform.zip https://releases.hashicorp.com/terraform/1.5.5/terraform_1.5.5_windows_amd64.zip unzip terraform.zip
-
macOS (Homebrew):
brew install terraform
확인
terraform --version
Terraform CLI 명령어
다음은 Terraform의 모든 명령어 목록입니다:
명령어 | 설명 |
---|---|
terraform init |
새롭거나 기존의 Terraform 구성 디렉터리를 초기화합니다. |
terraform validate |
구성이 유효한지 확인합니다. |
terraform plan |
변경 없이 실행 계획을 보여줍니다. |
terraform apply |
원하는 상태에 도달하기 위해 필요한 변경을 적용합니다. |
terraform destroy |
Terraform이 관리하는 인프라를 파괴합니다. |
terraform fmt |
표준 형식으로 구성 파일을 다시 정렬합니다. |
terraform show |
현재 상태 또는 실행 계획을 보여줍니다. |
terraform refresh |
실제 인프라와 상태를 업데이트합니다. |
terraform providers |
구성에서 사용하는 프로바이더를 표시합니다. |
terraform graph |
리소스 의존성을 그래프로 시각화합니다. |
terraform workspace list |
사용 가능한 모든 워크스페이스를 나열합니다. |
terraform workspace new |
새 워크스페이스를 생성합니다. |
terraform workspace select |
지정된 워크스페이스로 전환합니다. |
terraform workspace show |
현재 워크스페이스의 이름을 보여줍니다. |
terraform workspace delete |
지정된 워크스페이스를 삭제합니다. |
terraform output |
상태 파일에서 출력 값을 보여줍니다. |
terraform import |
기존 리소스를 Terraform으로 가져옵니다. |
terraform taint |
다음 apply 시 리소스를 재생성하도록 표시합니다. |
terraform untaint |
리소스가 오염되었음을 해제합니다. |
terraform state list |
상태 파일에 있는 리소스를 나열합니다. |
terraform state show |
상태 파일에서 단일 리소스의 속성을 보여줍니다. |
구성 핵심 사항
파일 확장자
.tf
: 주 구성 파일(HCL 문법).tfvars
: 변수 값
Terraform 블록 유형
- 프로바이더 예시
provider "aws" { region = "us-east-1" }
- 리소스 예시
resource "aws_instance" "web" { ami = "ami-0abcdef" instance_type = "t2.micro" }
- 변수 예시
variable "instance_count" { type = number default = 2 }
- 출력 예시
output "instance_ip" { value = aws_instance.web.public_ip }
- 모듈 예시
module "vpc" { source = "./modules/vpc" cidr_block = var.vpc_cidr }
변수 사용
- 변수 선언
variable "region" { description = "AWS 지역" default = "us-east-1" }
- 값 할당
- CLI:
terraform apply -var="region=us-west-2"
- tfvars 파일:
terraform apply -var-file="prod.tfvars"
- CLI:
- 타입:
string
,number
,bool
,list
,map
,object
상태 관리
- 상태 파일:
terraform.tfstate
- 원격 상태(S3 예시)
backend "s3" { bucket = "my-tf-state" key = "state.tfstate" region = "us-east-1" }
- 상태 보기:
terraform show
terraform state list
루프 및 조건문
- count
resource "aws_instance" "web" { count = 3 ... }
- for_each
resource "aws_s3_bucket" "b" { for_each = var.bucket_names bucket = each.value }
- 조건문
instance_type = var.env == "prod" ? "t2.large" : "t2.micro"
함수
- 문자열 보간:
resource "aws_s3_bucket" "example" { bucket = "my-bucket-${var.env}" }
- 리스트, 맵 예시:
locals { my_map = { a = 1, b = 2 } }
프로비저너
리소스를 부트스트랩하는 데 사용됩니다. 예시:
resource "aws_instance" "web" {
...
provisioner "local-exec" {
command = "echo 인스턴스 생성됨"
}
}
최고의 실천 방법
- 모든
.tf
파일을 버전 관리합니다. - 프로바이더 버전을 고정하여 일관된 배포를 보장합니다.
- 원격 백엔드를 사용하여 상태 관리(S3, Azure Blob 등)를 수행합니다.
- 원격 백엔드의 상태 파일을 암호화합니다.
- 모듈을 사용하여 재사용 가능한 인프라를 구성합니다.
- 구성을 문서화합니다.
- 생산 전 스테이징 환경에서 테스트합니다.
추가 참고 자료
- 도움말:
terraform --help
또는[명령어] --help
로 명령어별 도움말을 확인합니다. - 디버깅:
TF_LOG=INFO
또는TF_LOG=DEBUG
를 설정하여 상세 로그를 확인합니다. - 포맷팅:
terraform fmt
이 cheatsheet은 Terraform 사용의 가장 일반적이고 고급적인 측면에 대한 빠른 접근 참고 자료를 제공하여, 초보자와 고급 사용자 모두에게 실용적인 도움을 줍니다.
좋은 하루 되세요!
유용한 링크
- https://developer.hashicorp.com/terraform
- Docker Cheatsheet
- Docker Compose Cheatsheet - 가장 유용한 명령어와 예제
- Kubernetes Cheatsheet
- 백엔드와 함께 Flutter 프로젝트를 AWS Amplify에 배포
- Hugo로 생성된 웹사이트를 AWS S3에 배포
- AWS Lambda 성능: JavaScript vs Python vs Golang
- AWS SAM과 Python을 사용한 계층화된 Lambda
- AWS SAM + AWS SQS + Python PowerTools
- AWS S3 대체로 Minio 사용. Minio 개요 및 설치