MONG 기술블로그

테라폼 고도화 - 1 ( Backend ) 본문

Terraform

테라폼 고도화 - 1 ( Backend )

MJHmong 2022. 3. 21. 23:07

terraform.tfstate

terraform apply 를 실행하면 local의 terraform.tfstate 파일이 업데이트된다.

해당 tfstate 파일은 현재 인프라의 상태를 의미하는것은 아니며, 내가 `terraform apply`를 실행한 시점의 인프라 상태를 의미한다.

 

Terraform Backend

Terraform Backend란 위에 언급한 Terraform State 파일을 어디에 저장하고 가져올지에 대한 설정이다.

기본적으로는 terraform apply시 local저장소에 저장되지만, Terraform Backend 설정을 통해 s3 등의 저장소에 저장이 가능하다.

 

terraform state는 local에도 기본적으로 저장되는데 Terraform Backend를 왜 사용할까 ?

 

첫번째 이유 - Locking

terraform state는 apply 시점의 인프라 구성정보를 저장한다. 

즉 3명의 개발자가 하나의 인프라를 관리하는데 local의 terraform state 정보를 기반으로 테라폼을 사용한다면, 서로간의 state가 불일치하는 상황이 발생한다.

따라서 실제로 바라보는 자원정보는 하나이나, terraform state의 불일치로 인해 예상과는 다른 인프라가 구성될 수 있다.

이를 방지하기 위해 terraform backend를 사용하여 state를 하나로 통일함으로써 state의 불일치를 방지할 수 있다.

 

두번째 이유 - backup

local에만 저장하는것보다 원격 저장소인 backend에 이중으로 저장함으로써 유실을 방지할 수 있다.

또한 backend로 사용하는 S3의 경우 버전 관리 기능을 제공하므로 변화된 state에 버전별로도 관리가 가능하다. ( Versioning )

 

 

 Terraform backend 설정

# tfstate-s3.tf

# Provider Type
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}

# Configure the AWS Provider
provider "aws" {
  region        = "ap-northeast-2"
  access_key    = ""
  secret_key    = ""
}

# S3 bucket for backend
 resource "aws_s3_bucket" "tfstate" {
  bucket = "mjh-terraform-tfstate"

  versioning {
    enabled = true # Prevent from deleting tfstate file
  }
}

# DynamoDB for terraform state lock
resource "aws_dynamodb_table" "terraform_state_lock" {
  name           = "terraform-lock"
  hash_key       = "LockID"
  billing_mode   = "PAY_PER_REQUEST"

  attribute {
    name = "LockID"
    type = "S"
  }
}

AWS Provider , S3 , DynamoDB관련 설정후 `terraform apply`를 통해 S3 및 DynamoDB를 생성하자.

 

# backend.tf
terraform {
    backend "s3" {
      bucket         = "mjh-terraform-tfstate"
      key            = "terraform/backend/terraform.tfstate"
      region         = "ap-northeast-2"
      encrypt        = true
      dynamodb_table = "terraform-lock"
    }
}

생성한 S3 , DynamoDB를 이용하여 Backend를 구축한다.

 

https://www.terraform.io/language/settings/backends/s3

 

Backend Type: s3 | Terraform by HashiCorp

Terraform can store state remotely in S3 and lock that state with DynamoDB.

www.terraform.io

 

이로써 S3를 backend로 지정하여 Terraform State 파일을 공유할 수 있게 되었다.

'Terraform' 카테고리의 다른 글

테라폼 고도화 - 2 ( Variable )  (0) 2022.03.21
테라폼 기본 명령어 실습  (0) 2022.03.16
테라폼 설치 및 기본 개념  (0) 2022.03.14
Comments