소개
Terraform은 HashiCorp에서 개발한 오픈 소스 IaC(Infrastructure as Code) 도구입니다. 선언적 구성 언어를 사용하여 인프라 리소스를 정의하고 프로비저닝할 수 있습니다.
모든 새로운 Terraform 프로젝트에서 가장 먼저 실행하게 될 명령어는 terraform init입니다. 이 명령어는 Terraform을 사용할 수 있도록 작업 디렉토리를 준비하는 매우 중요한 단계입니다. 이 명령어는 다음과 같은 핵심 작업을 수행합니다:
- 백엔드 초기화: 상태(state) 저장 백엔드를 구성합니다.
- 프로바이더 플러그인 설치: 구성 파일을 스캔하여 필요한 프로바이더를 파악하고, Terraform 레지스트리에서 해당 플러그인을 다운로드합니다.
- 모듈 설치: 구성 파일에서 참조하는 모든 모듈을 다운로드합니다.
이번 실습에서는 새로운 Terraform 프로젝트를 초기화하는 기본 과정을 학습합니다. 프로젝트 디렉토리를 생성하고, 간단한 구성 파일을 정의한 뒤, terraform init을 사용하여 필요한 프로바이더 플러그인을 다운로드해 보겠습니다.
Terraform 프로젝트를 위한 새 디렉토리 생성
이 단계에서는 새로운 Terraform 프로젝트를 위한 전용 디렉토리를 생성합니다. 각 Terraform 프로젝트를 별도의 디렉토리에서 관리하는 것은 충돌을 방지하고 구성을 체계적으로 유지하기 위한 모범 사례입니다. 모든 작업은 ~/project 디렉토리 내에서 진행됩니다.
먼저 terraform-init-lab이라는 이름의 새 디렉토리를 생성합니다.
mkdir terraform-init-lab
다음으로, 새로 생성된 디렉토리로 이동합니다. 이 디렉토리가 실습의 나머지 과정 동안 작업 디렉토리가 됩니다.
cd terraform-init-lab
이제 터미널 프롬프트가 ~/project/terraform-init-lab 디렉토리 안에 있음을 나타내야 합니다.
프로젝트 디렉토리에 main.tf 파일 생성
이 단계에서는 프로젝트의 기본 구성 파일을 생성합니다. Terraform 구성 파일은 .tf 확장자를 사용하며 HCL(HashiCorp Configuration Language)로 작성됩니다. 관례적으로 기본 구성 파일의 이름은 보통 main.tf로 지정합니다.
terraform-init-lab 디렉토리 내에서 touch 명령어를 사용하여 main.tf라는 빈 파일을 생성합니다.
touch main.tf
디렉토리 내용을 나열하여 파일이 생성되었는지 확인할 수 있습니다.
ls
출력 결과에서 main.tf 파일을 확인할 수 있습니다.
main.tf
main.tf에 로컬 프로바이더 구성 정의
이 단계에서는 main.tf 파일에 구성 코드를 추가합니다. 이 코드는 Terraform에게 어떤 프로바이더를 다운로드하고 사용해야 하는지 알려줍니다. 프로바이더는 Terraform이 클라우드 제공업체나 SaaS 서비스와 같은 특정 API와 상호 작용할 수 있게 해주는 플러그인입니다.
이번 실습에서는 로컬 파일을 관리할 수 있게 해주는 local 프로바이더를 사용합니다. 이 프로바이더는 별도의 클라우드 자격 증명이 필요하지 않아 학습용으로 매우 적합합니다.
nano 텍스트 편집기를 사용하여 main.tf 파일을 엽니다.
nano main.tf
이제 다음 코드 블록을 복사하여 nano 편집기에 붙여넣습니다. 이 terraform 블록은 프로젝트에 필요한 프로바이더를 지정합니다.
terraform {
required_providers {
local = {
source = "hashicorp/local"
version = "2.4.0"
}
}
}
이 구성은 Terraform에게 다음과 같은 정보를 전달합니다:
required_providers: 이 프로젝트에 필요한 프로바이더를 선언합니다.local: 프로바이더에 부여할 로컬 이름입니다.source: Terraform 레지스트리에서의 프로바이더 전역 주소인hashicorp/local을 의미합니다.version: 사용할 프로바이더의 특정 버전입니다.
코드를 붙여넣은 후, Ctrl+O를 누르고 Enter를 눌러 저장한 뒤, Ctrl+X를 눌러 nano를 종료합니다.
terraform init을 실행하여 프로젝트 초기화
이 단계에서는 terraform init 명령어를 실행합니다. 프로바이더 구성이 완료되었으므로, Terraform은 이제 프로젝트를 초기화하기 위해 무엇을 해야 하는지 알게 됩니다. Terraform은 main.tf 파일을 읽고 required_providers 블록을 찾아 Terraform 레지스트리에서 지정된 버전의 hashicorp/local 프로바이더를 다운로드합니다.
terraform-init-lab 디렉토리에 있는지 확인한 후, 초기화 명령어를 실행합니다.
terraform init
Terraform이 백엔드와 프로바이더 플러그인을 초기화하고 있다는 출력이 표시됩니다. 초기화가 성공하면 완료 메시지가 나타납니다.
Initializing the backend...
Initializing provider plugins...
- Finding hashicorp/local versions matching "2.4.0"...
- Installing hashicorp/local v2.4.0...
- Installed hashicorp/local v2.4.0 (signed by HashiCorp)
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
.terraform 디렉토리에서 다운로드된 플러그인 확인
이 단계에서는 terraform init이 프로바이더 플러그인을 성공적으로 다운로드했는지 확인합니다. 이 명령어는 프로젝트 폴더 내에 .terraform이라는 숨겨진 디렉토리를 생성하여 플러그인과 기타 초기화 데이터를 저장합니다.
먼저 숨겨진 파일을 포함한 모든 파일과 디렉토리를 나열하여 init 명령어로 생성된 새로운 아티팩트를 확인합니다.
ls -a
출력 결과에서 .terraform 디렉토리와 .terraform.lock.hcl 파일을 확인할 수 있습니다. 잠금 파일(lock file)은 초기화 중에 선택된 프로바이더 버전을 기록합니다.
. .. main.tf .terraform .terraform.lock.hcl
이제 .terraform 디렉토리의 내용을 검사하여 다운로드된 프로바이더를 확인해 보겠습니다. tree 명령어를 사용하면 계층 구조를 명확하게 볼 수 있습니다.
tree .terraform
출력 결과는 프로바이더 플러그인이 저장된 디렉토리 구조를 보여줍니다. 레지스트리에서 다운로드된 local 프로바이더의 실행 파일을 확인할 수 있습니다.
.terraform
└── providers
└── registry.terraform.io
└── hashicorp
└── local
└── 2.4.0
└── linux_amd64
└── terraform-provider-local_v2.4.0_x5
6 directories, 1 file
이로써 terraform init이 필요한 프로바이더와 함께 프로젝트를 성공적으로 설정했음을 확인할 수 있습니다.
요약
축하합니다! Terraform 프로젝트 초기화 실습을 성공적으로 완료했습니다.
이번 실습에서는 새로운 Terraform 프로젝트를 시작하는 데 필요한 필수 단계를 학습했습니다. 다음 내용을 실습했습니다:
- Terraform 프로젝트를 위한 전용 디렉토리 생성
main.tf구성 파일에 필요한 프로바이더 정의terraform init명령어를 실행하여 프로젝트 준비.terraform디렉토리에 프로바이더 플러그인이 다운로드되었는지 확인
프로젝트 초기화가 완료되었으므로, 이제 리소스 정의 작성, terraform plan 및 terraform apply를 사용하여 인프라를 관리하는 등 Terraform 워크플로우의 다음 단계로 나아갈 준비가 되었습니다.



