개요
Terraform은 인프라를 코드로 관리하는 IaC(Infrastructure as Code) 접근 방식을 구현하여, 수동 구성의 오류를 줄이고 인프라 배포의 일관성과 반복성을 보장합니다. 다양한 클라우드 제공업체(AWS, Azure, GCP 등) 및 온프레미스 솔루션을 지원하며, 인프라 변경 사항을 미리 계획하고 검토할 수 있는 강력한 기능을 제공합니다.
주요 특징
- 인프라 코드화 (IaC): HCL(HashiCorp Configuration Language)을 사용하여 인프라를 코드로 정의합니다.
- 다중 클라우드 지원: AWS, Azure, GCP 등 다양한 클라우드 및 서비스 제공업체를 지원합니다.
- 상태 관리: 인프라의 실제 상태를 추적하여 변경 사항을 효율적으로 관리합니다.
- 실행 계획 미리보기: 변경 사항을 적용하기 전에 어떤 리소스가 생성, 수정, 삭제될지 미리 확인할 수 있습니다.
주요 명령어 (서브커맨드)
Terraform은 다양한 서브커맨드를 통해 인프라 관리 워크플로우를 수행합니다.
핵심 워크플로우
유틸리티
생성된 명령어:
명령어를 조합해 보세요.
설명:
`terraform` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
사용 예시
Terraform의 일반적인 워크플로우를 보여주는 예시입니다.
Terraform 프로젝트 초기화
terraform init
새로운 Terraform 프로젝트를 시작하거나 기존 프로젝트를 클론한 후 실행하여 필요한 프로바이더를 다운로드합니다.
인프라 변경 계획 미리보기
terraform plan
구성 파일에 정의된 변경 사항이 실제 인프라에 어떻게 적용될지 미리 확인합니다. 이 단계에서는 실제 리소스 변경이 발생하지 않습니다.
인프라 배포 또는 업데이트
terraform apply --auto-approve
plan 명령으로 확인한 변경 사항을 실제 클라우드 또는 온프레미스 인프라에 적용합니다. `--auto-approve` 옵션은 확인 프롬프트를 건너뜁니다.
인프라 리소스 제거
terraform destroy --auto-approve
Terraform으로 관리되는 모든 리소스를 파괴합니다. 이 명령은 매우 신중하게 사용해야 합니다.
구성 파일 형식 지정
terraform fmt
현재 디렉토리의 모든 Terraform 구성 파일(.tf)을 표준 형식으로 자동 정렬합니다.
설치
Terraform은 대부분의 Linux 배포판에 기본으로 포함되어 있지 않으므로, HashiCorp 공식 웹사이트에서 바이너리를 다운로드하여 설치해야 합니다. 다음은 Debian/Ubuntu 기반 시스템에서의 권장 설치 방법입니다.
APT 저장소를 통한 설치 (Debian/Ubuntu)
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform
HashiCorp의 공식 APT 저장소를 추가하고 Terraform을 설치하는 방법입니다. 이 방법은 최신 버전을 유지하기에 용이합니다.
설치 확인
설치 후 다음 명령어를 실행하여 Terraform이 올바르게 설치되었는지 확인합니다.
버전 확인
terraform -v
팁 & 주의사항
Terraform을 효과적으로 사용하고 잠재적인 문제를 방지하기 위한 팁과 주의사항입니다.
주요 팁
- 상태 파일 관리: `terraform.tfstate` 파일은 인프라의 현재 상태를 기록하므로, 안전하게 관리하고 버전 제어 시스템에 직접 포함하지 않는 것이 좋습니다. S3, Azure Blob Storage, GCS 등 원격 백엔드를 사용하는 것이 일반적입니다.
- 모듈 사용: 재사용 가능한 인프라 구성 요소를 모듈로 만들어 관리하면 코드의 가독성과 유지보수성이 향상됩니다.
- 계획 검토: `terraform plan` 명령으로 변경 사항을 항상 미리 검토하여 의도치 않은 리소스 변경이나 삭제를 방지하세요. 특히 프로덕션 환경에서는 더욱 중요합니다.
- 버전 제어: Terraform 구성 파일(.tf)은 반드시 Git과 같은 버전 제어 시스템으로 관리하여 변경 이력을 추적하고 협업을 용이하게 해야 합니다.
- 민감한 정보 관리: API 키, 비밀번호 등 민감한 정보는 구성 파일에 직접 하드코딩하지 말고, 환경 변수, Terraform 변수(tfvars), 또는 Vault와 같은 비밀 관리 도구를 사용하세요.
주의사항
- 파괴 명령 (`terraform destroy`)은 되돌릴 수 없으므로, 실행 전에 항상 신중하게 확인하고 필요한 경우 백업을 수행해야 합니다.
- 상태 파일 손상: 상태 파일이 손상되면 Terraform이 인프라의 실제 상태를 정확히 파악하지 못해 문제가 발생할 수 있습니다. 원격 백엔드와 잠금 기능을 사용하여 이러한 위험을 줄이세요.
- 버전 불일치: Terraform CLI 버전과 프로바이더 버전 간의 불일치는 예기치 않은 동작을 유발할 수 있습니다. `.terraform.lock.hcl` 파일을 사용하여 프로바이더 버전을 고정하는 것이 좋습니다.