[Terraform] 16강 Backend

전형빈·2023년 2월 6일
0

테라폼

목록 보기
8/12
post-thumbnail

Terraform Backend
테라폼 state를 관리하는 원격 저장소

Terraform Backend

테라폼의 state 파일을 어디에 저장하고 가져올지에 대한 설정으로 기본적으로 로컬스토리지에 저장하지만, 설정에 따라 S3, etcd 등을 사용할 수 있다.

많은 backend type이 있지만 s3를 가장 많이 사용함


backend를 사용하는 이유

  • locking
    현업에선 굉장히 큰 인프라를 구성하게 되고 혼자 테라폼으로 작성하는건 굉장히 힘든 일이다.
    또한 팀원들간 동시에 작업이 일어나는 등 다양한 문제가 생길 수 있다.
    이 때 s3같은 원격 저장소를 사용하면 동시에 같은 state에 접근하는걸 방지할 수 있다.
  • backup
    로컬보단 원격 스토리지가 안전하고 s3는 굉장히 높은 SLA를 보장하는 서비스이고 자체 버져닝까지 지원해준다.

backend 원리

  1. state 파일이 s3에 저장
  2. s3파일 경로와 lock을 할 수 있는 파일들이 DynamoDB에 저장
  3. 테라폼이 현재 이 파일이 사용중인지 아닌지 판단

backend를 위한 기본 설정

  • s3 생성
  • DynamoDB 생성
    AWS의 Nosql Key/Value store로 확장성이 좋고 큰 테이블도 저장할 수 있음

init.tf //s3, DynamoDB 생성

provider "aws" {
  region = "ap-northeast-2" # Please use the default region ID
  version = "~> 2.49.0" # Please choose any version or delete this line if you want the latest version
}

# S3 bucket for backend
resource "aws_s3_bucket" "tfstate" {
  bucket = "tf101-jupiter-apne2-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"
  }
}

backend.tf //backend 설정

terraform {
    backend "s3" { 
      bucket         = "terraform-s3-bucket" # bucket 이름
      key            = "terraform/own-your-path/terraform.tfstate" # s3 내에서 저장되는 경로
      region         = "ap-northeast-2"  
      encrypt        = true
      dynamodb_table = "terraform-lock"
    }
}

init.tf, backend.tf 파일 생성 후 terraform init을 하면 state 파일이 backend(s3)에 저장된다.

terraform.tfstate 파일을 지우고 plan을 해도 정상적으로 동작한다. init을 하면 state 파일을 .terraform 내부에 s3로부터 state를 받아와 저장하기 때문에 state 파일의 유무와 관계없이 동작한다.




REFERENCE

0개의 댓글