이전 시간 내용 참고 후 진행하면 더 좋습니다. aws 계정 등록해야합니다!
https://pabeba.tistory.com/296
1. 개요: 테라폼 프로젝트를 구성하는 핵심 파일들
테라폼은 특정 디렉토리에 있는 .tf 확장자를 가진 파일들을 읽어 들여 인프라를 구성합니다.
비록 하나의 파일에 모든 코드를 담을 수도 있지만, 실무에서는 관리의 용이성, 재사용성, 가독성을 위해 목적에 따라 파일을 분리하여 구성하는 것이 표준 관례(Best Practice)입니다.
이번 실습에서 생성하고 작성할 핵심 파일들의 역할은 다음과 같습니다.
📄 테라폼 기본 구성 파일 설명
| provider.tf | '누구에게' 명령을 내릴지 정의하는 파일입니다. AWS, Azure, GCP 등 인프라를 제공하는 공급자(Provider) 설정과 사용할 버전을 명시합니다. |
| main.tf | '무엇을' 만들지 정의하는 메인 파일입니다. 실제 리소스(EC2, VPC 등)를 생성하는 핵심 코드가 주로 이곳에 작성됩니다. 프로젝트 규모가 커지면 다른 이름의 .tf 파일로 분리하기도 합니다. |
| variables.tf | 코드 내에서 사용할 변수(Variable)들의 '입력 타입'을 정의하는 파일입니다. 코드의 재사용성을 높이기 위해 하드코딩 대신 변수를 선언합니다. |
| terraform.tfvars | variables.tf에서 정의한 변수에 실제 '값'을 할당하는 파일입니다. 민감한 정보(비밀번호, 키 등)가 포함될 수 있어 주의가 필요합니다. |
| outputs.tf | 인프라 생성 후 인프라의 '결과 값'을 출력하는 파일입니다. 생성된 EC2의 퍼블릭 IP나 S3 버킷의 URL 등, 다른 프로젝트나 사용자가 확인해야 할 정보를 정의합니다. |
| .gitignore | Git 버전 관리에서 제외할 파일 목록을 지정합니다. 테라폼 초기화 시 생성되는 임시 폴더나 민감한 정보가 담긴 .tfvars 파일 등을 Git에 업로드하지 않도록 방지합니다. |
2. 실습 1단계: 테라폼 프로젝트 기본 파일 구성
가장 먼저 실습 공간을 만들고, 위에서 설명한 기본 파일들을 생성해 보겠습니다.
PowerShell을 열고 아래 명령어를 한 줄씩 실행하거나 전체 복사하여 실행합니다.
디렉토리는 다들 자신의 디렉토리로 변경하셔야 합니다.
# 1. 실습 디렉토리 생성 및 이동 (경로는 본인 환경에 맞게 수정 가능)
$path = "C:\Users\NT551_11TH\OneDrive\Desktop\workspace\tf_project\basic"
New-Item -ItemType Directory -Path $path -Force
cd $path
# 2. 테라폼 핵심 구성 파일(공파일) 한 번에 생성하기
'provider.tf', 'main.tf', 'variables.tf', 'outputs.tf', 'terraform.tfvars', '.gitignore' | ForEach-Object { New-Item -ItemType File -Path $_ -Force }
명령어 실행이 완료되면 해당 폴더에 6개의 공파일이 생성된 것을 확인할 수 있습니다.
3. 실습 2단계: Provider 설정 (provider.tf 작성)
이제 테라폼에게 우리는 AWS 클라우드의 서울 리전(ap-northeast-2)에 인프라를 구축할 것이라고 알려주는 설정을 provider.tf 파일에 작성합니다.
# provider.tf 파일 내용
terraform {
# 테라폼 자체 설정 (필요한 프로바이더 버전 명시)
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0" # 5.0 버전 이상을 사용하되 최신 마이너 버전 허용
}
}
}
# AWS 프로바이더 설정
provider "aws" {
region = "ap-northeast-2" # 서울 리전
}
4. 실습 3단계: 테라폼 파이프라인 가동 (init & validate)
파일 작성이 완료되었다고 바로 인프라를 생성할 수 없습니다. 테라폼이 구동하기 위한 준비 과정이 필요합니다.
터미널에서 아래 명령어를 차례로 실행해 보세요.
Step 1: 테라폼 초기화 (terraform init)
init 명령은 테라폼 프로젝트가 위치한 디렉토리에서 가장 먼저, 그리고 딱 한 번 실행해야 하는 명령어입니다.
provider.tf를 읽고 필요한 AWS 플러그인(Provider 바이너리)을 다운로드하는 등의 준비 작업을 수행합니다.
terraform init
💡 초기화 성공 후 생성되는 결과물 분석
초기화에 성공하면 폴더 내에 새로운 임시 폴더와 파일이 숨겨진 상태로 생성됩니다. 이들의 역할은 다음과 같습니다.
- .terraform/ (폴더):
- 의미: 테라폼이 인프라 공급자(AWS 등)와 통신하기 위해 다운로드한 프로바이더 플러그인 바이너리 파일들이 저장되는 로컬 임시 저장소입니다.
- 주의: 이 폴더는 용량이 크고 환경마다 다르므로 .gitignore에 등록하여 Git에 절대 올리지 않습니다.
- .terraform.lock.hcl (파일):
- 의미: 프로젝트가 사용하는 프로바이더의 모듈명, 정확한 버전, 그리고 해시값(Checksum)을 기록하여 잠그는(Lock) 파일입니다.
- 역할: 나중에 다른 팀원이나 서버에서 이 프로젝트를 구동할 때, 항상 동일한 버전의 프로바이더가 사용되도록 보장하여 예기치 않은 버전 업데이트로 인한 인프라 장애를 방지합니다. 이 파일은 Git에 올려 함께 관리하는 것이 권장됩니다.
Step 2: 코드 문법 검사 (terraform validate)
이제 작성한 HCL 코드가 테라폼 문법에 맞게 올바르게 작성되었는지 검증할 차례입니다.
init 과정이 선행되어야 프로바이더별 고유한 속성 문법도 검증할 수 있습니다.
terraform validate
[실행 결과 확인]
Success! The configuration is valid.
위와 같이 Success! 메시지가 나타난다면, 작성한 provider.tf 코드의 문법에는 이상이 없다는 뜻입니다.
🖐️ 마치며
오늘은 코드형 인프라(IaC)의 핵심 도구인 테라폼을 사용하기 위한 가장 기초적인 단계인 프로젝트 파일 구성과, 공급자(Provider) 설정 후 초기화(init) 및 검증(validate) 과정을 알아보았습니다.
이제 로컬 PC의 테라폼 엔진이 AWS 서버와 통신할 준비가 모두 완료되었습니다. 다음 포스팅에서는 실제로 main.tf를 작성하여 AWS EC2 인스턴스를 코드 한 줄로 생성하고 삭제해 보겠습니다.