소개
Terraform 은 HashiCorp 에서 만든 인기 있는 오픈 소스 Infrastructure as Code (IaC) 도구입니다. 선언적 구성 언어를 사용하여 인프라 리소스를 정의하고 프로비저닝할 수 있습니다.
새로운 Terraform 프로젝트에서 가장 먼저 실행하게 될 명령어는 terraform init입니다. 이 명령어는 작업 디렉터리를 Terraform 사용을 위해 준비시키므로 매우 중요합니다. 이 명령어는 다음과 같은 몇 가지 주요 작업을 수행합니다.
- 백엔드 초기화 (Backend Initialization): 상태 저장 백엔드를 구성합니다.
- 프로바이더 플러그인 설치 (Provider Plugin Installation): 구성 파일을 스캔하여 필요한 프로바이더를 확인하고 Terraform Registry 에서 다운로드합니다.
- 모듈 설치 (Module Installation): 구성에서 참조된 모든 모듈을 다운로드합니다.
이 랩에서는 새로운 Terraform 프로젝트를 초기화하는 기본 프로세스를 학습합니다. 프로젝트 디렉터리를 생성하고, 간단한 구성 파일을 정의한 다음, terraform init을 사용하여 필요한 프로바이더 플러그인을 다운로드하게 됩니다.
Terraform 프로젝트를 위한 새 디렉터리 생성
이 단계에서는 새로운 Terraform 프로젝트를 위한 전용 디렉터리를 생성합니다. 구성을 체계적으로 유지하고 충돌을 방지하기 위해 각 Terraform 프로젝트를 자체 디렉터리에 보관하는 것이 모범 사례입니다. 모든 작업은 ~/project 디렉터리 내에서 수행됩니다.
먼저, terraform-init-lab이라는 새 디렉터리를 생성합니다.
mkdir terraform-init-lab
다음으로, 새로 생성된 디렉터리로 이동합니다. 이곳이 나머지 실습 동안 작업 디렉터리가 됩니다.
cd terraform-init-lab
이제 터미널 프롬프트가 ~/project/terraform-init-lab 디렉터리 내에 있음을 나타내야 합니다.
프로젝트 디렉터리에 main.tf 파일 생성
이 단계에서는 프로젝트의 기본 구성 파일인 main.tf를 생성합니다. Terraform 구성 파일은 .tf 확장자를 사용하며 HashiCorp Configuration Language (HCL) 로 작성됩니다. 관례적으로 기본 구성 파일의 이름은 종종 main.tf로 지정됩니다.
terraform-init-lab 디렉터리 내에서 touch 명령어를 사용하여 main.tf라는 빈 파일을 생성합니다.
touch main.tf
디렉터리 내용을 나열하여 파일이 생성되었는지 확인할 수 있습니다.
ls
출력에서 main.tf 파일을 확인해야 합니다.
main.tf
main.tf 에 로컬 (local) 프로바이더 구성 정의
이 단계에서는 main.tf 파일에 구성 코드를 추가합니다. 이 코드는 Terraform 에게 어떤 프로바이더 (provider) 를 다운로드하고 사용해야 하는지 알려줍니다. 프로바이더는 Terraform 이 특정 API(예: 클라우드 프로바이더 또는 SaaS 서비스) 와 상호 작용할 수 있도록 하는 플러그인입니다.
이 실습에서는 로컬 파일을 관리할 수 있게 해주는 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 Registry 내 프로바이더의 전역 주소이며, 여기서는hashicorp/local입니다.version: 사용할 프로바이더의 특정 버전입니다.
코드를 붙여넣은 후, Ctrl+O를 누른 다음 Enter를 누르고 마지막으로 Ctrl+X를 눌러 파일을 저장하고 nano를 종료합니다.
프로젝트 초기화를 위해 terraform init 실행
이 단계에서는 terraform init 명령어를 실행합니다. 프로바이더 구성이 완료되었으므로, Terraform 은 이제 프로젝트를 초기화하기 위해 무엇을 해야 하는지 알게 됩니다. Terraform 은 main.tf 파일을 읽고, required_providers 블록을 찾아 Terraform Registry 에서 지정된 버전의 hashicorp/local 프로바이더를 다운로드할 것입니다.
여전히 terraform-init-lab 디렉터리에 있는지 확인한 후 초기화 명령을 실행합니다.
terraform init
백엔드와 프로바이더 플러그인을 초기화하고 있음을 나타내는 출력을 보게 될 것입니다. 성공적인 초기화는 성공 메시지로 끝납니다.
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 파일을 볼 수 있어야 합니다. 잠금 파일은 초기화 중에 선택된 프로바이더 버전을 기록합니다.
. .. main.tf .terraform .terraform.lock.hcl
이제 다운로드된 프로바이더를 확인하기 위해 .terraform 디렉터리의 내용을 검사해 보겠습니다. 계층적 구조를 명확하게 보기 위해 tree 명령어를 사용할 수 있습니다.
tree .terraform
출력에는 프로바이더 플러그인이 저장된 디렉터리 구조가 표시됩니다. 레지스트리에서 다운로드된 local 프로바이더의 실행 파일 (executable file) 을 볼 수 있습니다.
.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 프로젝트 초기화에 대한 이 실습 (lab) 을 성공적으로 완료했습니다.
이 실습에서 여러분은 새로운 Terraform 프로젝트를 시작하는 데 필수적인 첫 단계를 배웠습니다. 다음을 연습했습니다.
- Terraform 프로젝트를 위한 전용 디렉터리 생성.
main.tf구성 파일에 필수 프로바이더 (required providers) 정의.- 프로젝트 준비를 위해
terraform init명령어 실행. - 프로바이더 플러그인이
.terraform디렉터리에 다운로드되었는지 확인.
프로젝트 초기화가 완료되었으므로, 이제 리소스 정의 작성 및 terraform plan, terraform apply를 사용하여 인프라를 관리하는 등 Terraform 워크플로우의 다음 단계로 진행할 준비가 되었습니다.



