[Terraform] 테라폼 Locking과 Backup (S3, DynamoDB)
IT/Terraform

[Terraform] 테라폼 Locking과 Backup (S3, DynamoDB)

반응형

Intro

오늘은 지난 시간에 이어서 아래 2가지 문제를 해결 할 수 있는 방법에 대해 알아 보도록 하겠습니다.

  1. .tfstate파일이 꼬이지 않도록 하기
  2. .tfstate 파일이 사라지지 않도록 하기

.tfstate파일이 꼬이지 않도록 하기

여럿이서 테라폼 코딩을 할 경우 하나의 .tfstate 파일을 참조하여 작업을 하게 됩니다. 주로 terraform plan 이나 terraform apply 를 할때 .tfstate의 정보를 읽어서 작업을 하는데 이때 누군가가 plan, apply 작업을 할때 locking(잠금) 기능으로 .tfstate 파일이 꼬이지 않도록 설정할 수 있습니다.

이때 사용하는 것이 테라폼에 backend의 locking 설정입니다. locking 설정은 AWS의 대표적인 NoSQL서비스인 DynamoDB를 활용할 수 있으며 .tfstate파일을 사용하고 있을 경우 DynomoDB의 값을 바꿔주어 다른 사람이 작업을 하지 못하도록 할 수 있습니다.

이 기능을 사용하면 다른 누군가가 terraform plan 이나 terraform apply 하고 있을 경우 아래와 같이 state lock 에러 메시지가 발생하게 됩니다.

그림1.

또, 실제로 DyanamoDB를 확인해보면 아래와 같이 값이 생성되어 있는걸 확인할 수 있습니다.

그림2.

테라폼 backend 에 DynamoDB Locking 설정하기

테라폼 backend에 DynamoDB Locking설정을 하기 위해서는 우선 DynamoDB를 생성해야 하고 그 이후에 backend설정을 하면 됩니다.

  • dynamodb.tf
resource "aws_dynamodb_table" "terraform_statelock" {
  name = "terraform-statelock"
  read_capacity = 5
  write_capacity = 5
  hash_key = "LockID"

  attribute {
    name = "LockID"
    type = "S"
  }
}
  • backend.tf
terraform {

  backend "s3" {
    key = "terraform.tfstate"
    region = "ap-northeast-2"
    dynamodb_table  = "terraform-statelock"
    encrypt = true
  }

}

.tfstate 파일이 사라지지 않도록 하기

테라폼은 결국 .tfstate파일에 의해서 리소스를 생성하도록 되어있습니다. 따라서 .tfstate파일이 사라지지 않도록 하는것이 가장 중요합니다. 이때 테라폼 backend에 backup설정을 하면 되는데, 가용성 99.9999999%를 자랑하는 AWS의 대표서비스 S3를 사용하여 파일을 백업 할 수 있습니다.

테라폼 backend 에 S3 backup 설정하기

  • bakcned.tf
terraform {

  backend "s3" {
    bucket = "terraform"
    key = "terraform.tfstate"
    region = "ap-northeast-2"
    dynamodb_table  = "terraform-statelock"
    encrypt = true
  }

}

이렇게 해서 본격적으로 팀원들과 테라폼 코딩을 할 수 있는 준비가 끝났습니다. 다음 시간에는 코딩을 하기에 앞서 고민했던 사소하면서 중요한 네이밍 규칙룰과 git branch 전략에 대해 알아보도록 하겠습니다.

반응형