?
사용자

Terraform을 이용한 클라우드 인프라 상태 관리 및 코드화 가이드

Terraform의 개념, 장점, 그리고 실제 사용법을 안내합니다. 클라우드 인프라를 코드로 관리하고 상태를 추적하는 방법을 배우고 싶을 때 유용합니다.

#terraform#iac#cloud#aws#state management
recipe.md

Terraform이란?

Terraform은 HashiCorp에서 개발한 오픈소스 인프라스트럭처 코딩(Infrastructure as Code, IaC) 도구입니다. HCL(HashiCorp Configuration Language)이라는 자체 선언적 구성 언어를 사용하여 클라우드 및 온프레미스 환경의 인프라를 코드 형태로 정의하고 프로비저닝, 관리할 수 있습니다.

왜 Terraform을 사용해야 할까?

  • 일관성 및 반복성: 코드로 인프라를 정의함으로써 수동 설정 오류를 줄이고, 언제든 동일한 환경을 재현할 수 있습니다.
  • 버전 관리: 인프라 구성을 Git과 같은 버전 관리 시스템으로 관리하여 변경 이력을 추적하고 협업을 용이하게 합니다.
  • 상태 관리: Terraform은 현재 인프라의 상태를 state 파일에 기록하여, 변경 사항 적용 시 기존 상태와 비교하고 필요한 작업만 수행합니다.
  • 다양한 프로바이더 지원: AWS, Azure, GCP 등 주요 클라우드 제공업체와 Kubernetes, Docker 등 다양한 서비스에 대한 프로바이더를 지원하여 단일 도구로 여러 환경을 관리할 수 있습니다.
  • 계획 및 미리보기: terraform plan 명령을 통해 변경 사항을 실제 적용하기 전에 미리 확인하여 예상치 못한 문제를 방지합니다.

Terraform 사용법 단계

1. Terraform 설치

Terraform 공식 웹사이트에서 운영체제에 맞는 바이너리를 다운로드하여 설치하거나, 패키지 관리자(예: Homebrew, apt)를 이용해 설치합니다.

2. Terraform 설정 파일 작성

.tf 확장자를 가진 파일에 HCL을 사용하여 인프라 리소스를 정의합니다. 일반적으로 main.tf, variables.tf, outputs.tf 등으로 파일을 분리하여 관리합니다.

  • main.tf: 프로바이더 설정 및 리소스 정의
  • variables.tf: 입력 변수 정의
  • outputs.tf: 출력 변수 정의

예시: AWS S3 버킷 생성 (main.tf)

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_s3_bucket" "example" {
  bucket = "my-unique-terraform-example-bucket"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}
3. Terraform 초기화

구성 파일이 있는 디렉토리에서 다음 명령을 실행하여 Terraform을 초기화하고 필요한 프로바이더 플러그인을 다운로드합니다.

terraform init
4. 실행 계획 확인

실제 인프라 변경 전에 terraform plan 명령을 실행하여 어떤 리소스가 생성, 변경, 삭제될 것인지 미리 확인합니다.

terraform plan
5. 인프라 적용

계획이 확정되면 terraform apply 명령을 실행하여 인프라를 프로비저닝합니다.

terraform apply

terraform apply 실행 시 plan 파일이 있다면 이를 자동으로 적용하며, 없다면 plan을 먼저 생성한 후 적용할지 묻습니다.

6. 인프라 삭제

더 이상 필요 없는 인프라를 삭제하려면 terraform destroy 명령을 사용합니다.

terraform destroy

상태 관리 (State Management)

Terraform은 terraform.tfstate 파일에 현재 관리 중인 인프라의 상태를 저장합니다. 이 파일은 Terraform이 리소스를 추적하고 변경 사항을 결정하는 데 필수적입니다.

  • 로컬 상태: 기본적으로 terraform.tfstate 파일은 로컬 디스크에 저장됩니다. 팀 협업 시에는 공유 및 동기화 문제가 발생할 수 있습니다.
  • 원격 상태 (Remote State): S3, Azure Blob Storage, GCS 등과 같은 원격 스토리지에 상태 파일을 저장하는 것이 권장됩니다. 이를 통해 팀원 간 상태를 공유하고 잠금(locking) 기능을 사용하여 동시 변경을 방지할 수 있습니다.

예시: S3를 이용한 원격 상태 설정 (backend.tf)

terraform {
  backend "s3" {
    bucket = "my-terraform-state-bucket-unique"
    key    = "dev/terraform.tfstate"
    region = "ap-northeast-2"
  }
}

terraform init 명령을 실행하면 원격 백엔드가 설정됩니다.

주의사항

  • terraform.tfstate 파일은 민감한 정보를 포함할 수 있으므로 안전하게 관리해야 합니다.
  • 원격 상태 사용 시, 해당 스토리지 버킷에 대한 접근 권한 관리가 중요합니다.
  • Terraform의 상태 파일은 수동으로 편집하지 않도록 주의해야 합니다. Terraform 자체 명령을 통해 관리해야 합니다.
  • terraform destroy는 되돌릴 수 없는 작업이므로 실행 전 반드시 terraform plan으로 내용을 확인하세요.
0
스크랩
25
좋아요
0
댓글
Terraform을 이용한 클라우드 인프라 상태 관리 및 코드화 가이드