Overview
Terraform은 HashiCorp에서 개발한 오픈 소스 코드형 인프라(IaC) 도구로, 클라우드 및 온프레미스 인프라를 선언적 구성 파일을 통해 정의, 프로비저닝 및 관리할 수 있도록 한다.
이 문서에서는 Terraform의 설치 방법, 주요 개념, 기본 파일 역할, 주요 명령어에 대해 다룬다.
📅 관련 글
2023.03.30 - [IaC/Infrastructure Provisioning] - 1. Terraform 기초 : 설치 및 .tf 파일 설명
2023.03.31 - [IaC/Infrastructure Provisioning] - 2. Terraform 변수 사용법(use-variable) - AWS
2023.04.03 - [IaC/Infrastructure Provisioning] - 4. Terraform의 다양한 Function(함수)
2023.04.04 - [IaC/Infrastructure Provisioning] - 5. Terraform의 다양한 Expression
Terraform이란?
Terraform은 HCL(HashiCorp Configuration Language)을 사용하여 인프라의 원하는 상태를 정의하고, 이를 자동으로 구축하고 관리하는 IaC 도구이다. AWS, Azure, Google Cloud 등 다양한 클라우드 제공자를 지원하며, 온프레미스 및 기타 서비스와도 연계하여 사용할 수 있다.

Terraform의 주요 기능
- 선언적 구성(Declarative Configuration): 원하는 상태를 코드로 정의하면 Terraform이 이를 자동으로 적용한다.
- 멀티 클라우드 지원(Multi-cloud Support): 다양한 클라우드 환경에서 동일한 구성 파일을 사용할 수 있다.
- 모듈화(Modularity): 재사용 가능한 모듈을 구성하여 여러 프로젝트 간 코드를 공유할 수 있다.
- 상태 관리(State Management): 리소스의 상태를 파일로 저장하여 변경 사항을 추적하고 조정할 수 있다.
- 협업 및 버전 관리(Version Control & Collaboration): Git 등의 버전 관리 시스템과 통합하여 협업을 효율적으로 수행할 수 있다.
Terraform 설치방법
Installed gnupg, software-properties-common, and curl packages
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
Install the HashiCorp GPG key
wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
Verify the key's fingerprint
gpg --no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
--fingerprint
The gpg command will report the key fingerprint
/usr/share/keyrings/hashicorp-archive-keyring.gpg
-------------------------------------------------
pub rsa4096 XXXX-XX-XX [SC]
AAAA AAAA AAAA AAAA
uid [ unknown] HashiCorp Security (HashiCorp Package Signing) <security+packaging@hashicorp.com>
sub rsa4096 XXXX-XX-XX [E]
Add the official HashiCorp repository to your system
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list
Download the package information from HashiCorp
sudo apt update
Install Terraform from the new repository
sudo apt-get install terraform
Terraform 주요 파일 설명
Terraform 프로젝트는 여러 개의 파일로 구성되며, 각각 특정한 역할을 담당한다.
1. `variables.tf` (변수 정의 파일)
Terraform에서 사용할 입력 변수를 정의하는 파일이다.
variable "region" {
description = "AWS 리전을 정의합니다."
type = string
default = "ap-northeast-2"
}
2. `terraform.tfvars` (변수 값 설정 파일)
변수의 실제 값을 지정하는 파일이다.
region = "us-east-1"
3. `main.tf` (핵심 인프라 정의 파일)
리소스 생성, 업데이트 및 삭제를 정의하는 핵심 구성 파일이다.
provider "aws" {
region = var.region
}
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "example-vpc"
}
}
4. `outputs.tf` (출력값 정의 파일)
Terraform 실행 후 필요한 정보를 출력하는 파일이다.
output "vpc_id" {
value = aws_vpc.example.id
description = "생성된 VPC ID"
}
5. `version.tf `(버전 제어 파일)
Terraform 버전 및 공급자 플러그인의 버전을 정의하는 파일이다.
terraform {
required_version = ">= 1.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.47"
}
}
}
Terraform 주요 명령어
Terraform을 사용하여 인프라를 관리하는 주요 명령어는 다음과 같다.
terraform init # 작업 디렉토리 초기화
terraform validate # 구성 파일 유효성 검사
terraform plan # 실행 계획 확인
terraform apply # 인프라 적용
terraform destroy # 생성된 인프라 제거
terraform output # 출력값 확인
terraform fmt # 코드 스타일 정리
변수 파일을 사용하여 terraform apply 실행 시 값 읽는 순서는 다음과 같다.
- 환경 변수
- terraform.tfvars 파일
- terraform.tfvars.json 파일
- *.auto.tfvars 또는 *.auto.tfvars.json 파일 (사전순)
- 명령줄 옵션 -var 또는 -var-file에서 제공된 값
예제:
terraform apply -var-file="terraform.tfvars"
마무리
이번 학습에서는 Terraform의 기본 개념, 설치 방법, 주요 파일, 그리고 필수 명령어에 대해 살펴보았다. Terraform을 활용하면 클라우드 인프라를 코드로 정의하고 자동화할 수 있으며, 이를 통해 효율적인 인프라 관리 및 협업이 가능하다.
다음 학습에서는 Terraform의 변수(variable) 사용법과 모듈(module) 활용법을 깊이 있게 다룰 예정이다.
Reference
Install Terraform
Terraform의 모든 것
Terraform 간단 사용법
Terraform AWS Provider Github 주소
Terraform input variables
'IaC > Infrastructure Provisioning' 카테고리의 다른 글
| 4. Terraform의 다양한 Function(함수) (0) | 2023.04.11 |
|---|---|
| 3. Terraform 다양한 변수(variable, local, data...output, input) - AWS (0) | 2023.04.09 |
| 2. Terraform 변수 사용법(use-variable) - AWS (0) | 2023.04.05 |
| Packer란? (0) | 2022.09.05 |
| Vagrant란? (0) | 2022.08.25 |