[Terraform] 테라폼으로 협업하기

KKK·2023년 4월 4일
0

테라폼

목록 보기
11/12
post-thumbnail

테라폼으로 협업 하려면 상태파일(tfstate) 동기화, 여러 명이 동시에 테라폼 코드에 접근 시 충돌을 어떻게 제어할지에 대하여 해결해야 합니다.
backend, locking을 사용하여 해결할 수 있습니다.

backend

테라폼은 인프라에 반영된 상태를 tfstate 파일에 저장하여 관리합니다.

terraform 명령어를 사용하면 tfstate 파일과 실제 인프라를 비교하여 반영하기 때문에 tfstate와 인프라를 일치시키는게 테라폼의 핵심이라고 말할정도로 tfstate는 중요합니다.

backend를 지정하지 않으면 tfstate 파일은 사용자의 로컬에 저장됩니다. 혼자 테라폼을 사용하면 상관 없지만, 여러 명이 사용하게되면 tfstate 파일이 동기화 되어 있지 않기 때문에 다른 사람의 작업 내용이 사라지거나 전혀 다른 결과물이 발생할 수 있습니다.

tfstate를 로컬이 아닌 원격 저장소 즉 s3와 같은 곳에서 tfstate를 관리하면 다수가 동일한 상태 파일을 읽어 작업할 수 있습니다.


backend 실습

실제로 backend를 사용하여 tfstate를 관리해보겠습니다. 먼저 tfstate를 관리할 aws s3를 생성해야 합니다.

# /resoruce/s3.tf
resource "aws_s3_bucket" "tfstate_s3" {
    bucket = "terraform-hb-backend"
}

resource "aws_s3_bucket_versioning" "tfstate_s3_versioning" {
    bucket = aws_s3_bucket.tfstate_s3
    versioning_configuration {
      status = "Enabled"
    }
}  

versioning을 활성화하면 파일을 업데이트할 때 마다 해당 파일의 새 버전이 만들어지며, 이를 통해 언제든지 이전 버전으로 되돌릴 수 있습니다.
s3를 생성 후 새로운 디렉터리에서 생성한 s3로 backend 설정을 합니다.

# /vpc/backend.tf
terraform {
  backend "s3" {
    bucket = "terraform-hb-backend"
    key    = "vpc.tfstate"
    region = "ap-northeast-2"
    profile = "histdc-dev-terraform"
  }
}

aws credentials을 profile로 설정하여 작업하는 경우 backend에서도 profile을 정의해주어야 하는 것 같음

backend 설정을 하려면 terraform init 명령을 실행해야합니다. 만약 backend key를 새로 지정하거나 변경하려면 terraform init -reconfigure 명령을 해줘야 합니다.

terraform apply로 aws에 리소스를 생성하면 backend로 지정한 s3에서 상태파일을 관리하게 됩니다. 당연히 디렉터리에도 tfstate 파일은 존재하지 않습니다.

이제 다른 환경에서 s3에 상태파일을 참조하여 리소스를 생성할 수 있다.

0개의 댓글