Terraform의 백엔드(backend)는 상태 파일(state file)을 저장하고 관리하는 방식을 정의하는 구성 요소입니다. 상태 파일은 Terraform이 관리하는 인프라의 현재 상태를 저장하며, 이는 인프라의 변경 사항을 추적하고 계획(plan) 및 적용(apply) 작업 시 필요한 정보를 제공하는 데 사용됩니다.

주요 백엔드 유형

Terraform에서는 다양한 백엔드 유형을 지원하며, 각 백엔드는 상태 파일을 저장하는 방식과 위치가 다릅니다. 주요 백엔드 유형은 다음과 같습니다:

  1. 로컬 백엔드(local): 상태 파일이 로컬 디스크에 저장됩니다. 기본적으로 Terraform은 로컬 디렉토리에 terraform.tfstate 파일로 상태를 저장합니다.

    terraform {
      backend "local" {
        path = "./terraform.tfstate"
      }
    }
    
  2. 원격 백엔드(remote): 상태 파일이 원격 저장소에 저장됩니다. 이를 통해 상태 파일의 중앙 집중화와 협업이 가능해집니다.

백엔드의 기능

  1. 상태 파일 잠금(state file locking): 원격 백엔드 대부분은 상태 파일 잠금을 지원합니다. 이는 여러 사용자가 동시에 상태 파일을 수정하는 것을 방지하여 데이터 손상을 방지합니다. 예를 들어, S3 백엔드는 DynamoDB를 사용하여 상태 파일 잠금을 구현할 수 있습니다.
  2. 원격 상태 조회(remote state lookup): 원격 백엔드를 사용하면 다른 Terraform 구성에서 상태 데이터를 참조할 수 있습니다. 이를 통해 인프라 간의 종속성을 관리할 수 있습니다.
  3. 보안 및 관리(security and management): 원격 백엔드를 사용하면 상태 파일을 중앙에서 관리하고 접근 제어, 감사 로그, 버전 관리 등을 적용할 수 있습니다.

백엔드 설정 방법

백엔드를 설정하려면 terraform 블록 안에 backend 블록을 추가해야 합니다. 백엔드 설정은 terraform init 명령어를 실행할 때 적용됩니다. 백엔드를 변경하면 Terraform은 기존 상태 파일을 새로운 백엔드로 자동으로 이동할 수 있습니다.

terraform {
  backend "s3" {
    bucket = "my-bucket"
    key    = "path/to/my/key"
    region = "us-east-1"
  }
}

이 구성을 파일에 추가한 후 terraform init을 실행하면 Terraform이 S3 버킷에 상태 파일을 저장하도록 초기화합니다.

결론

Terraform의 백엔드는 상태 파일을 저장하고 관리하는 방식을 정의하여, 인프라의 상태를 안전하게 보관하고 협업 환경을 지원하는 중요한 구성 요소입니다. 적절한 백엔드를 선택하고 설정함으로써 인프라 관리의 효율성과 안전성을 크게 향상시킬 수 있습니다.

 devrary 💡   ~/terraform_/terraform_prj
 terraform state list
module.employee_vpc_module["deploy"].aws_subnet.private_subnet1
module.employee_vpc_module["deploy"].aws_vpc.example
module.employee_vpc_module["dev"].aws_subnet.private_subnet1
module.employee_vpc_module["dev"].aws_subnet.public_subnet1[0]
module.employee_vpc_module["dev"].aws_vpc.example