여러 사람이 terraform을 다룰 때 조심하십시오.

1822 단어 TerraformAWS

여러 사람이 terraform을 다룰 때 조심하십시오.





위 그림의 보충



위의 그림을 보완합니다.
10:00 전의 시점에서는, A씨와 B씨의 tfstate 파일은 같은 상태였다고 합니다.
A 씨가 10:00에 AWS에 리소스 A를 배포하기 때문에 terraform apply를 실행했다고 가정합니다.
그러면 AWS에는 리소스 A가 배포되고 A 씨의 tfstate에는 리소스 A가 배포되었음이 기록됩니다.
이 시점에서 A와 B의 tfstate 파일에 차이가 생깁니다.
그러자 10:05라는 같은 시간에 terraform plan을 했다고 해도 A씨와 B씨의 결과는 달라,
B 씨가 terraform apply를 실행하려고 하면 이미 AWS에 리소스 A가 존재하기 때문에 오류가 발생합니다.

-해결법- backend 설정①



terraform에는 여러 사람이 작업을 수행하는 설정으로 backend 설정이 있습니다.

provider.tf
terraform {
  backend "s3" {
    bucket = "tfstate-test"
    key    = "tfstate"
    region = "ap-northeast-1"
  }
}

미리 S3에서 tfstate-test라는 버킷을 만들어 두고 terraform init을 실행합니다.
이제 여러 tfstate 파일을 공유할 수 있습니다.

-해결 방법- backend 설정②



위의 설정만으로는 여러 사람이 동시에 apply나 destroy하는 것을 막지 않습니다.

그래서 먼저 dynamodb를 배포하십시오.

main.tf
resource "aws_dynamodb_table" "terraform-state-lock" {
  name           = "tfstate_lock"
  read_capacity  = 1
  write_capacity = 1
  hash_key       = "LockID"

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

그런 다음 backend 설정을 다음과 같이 다시 씁니다.

provider.tf
terraform {
  backend "s3" {
    bucket = "tfstate-test"
    key    = "tfstate"
    region = "ap-northeast-1"
    dynamodb_table ="tfstate_lock"
  }
}

이제 terraform apply 또는 terraform destroy를 실행할 때 tfstate 파일이 잠기고 여러 사람이 동시에 apply 또는 destroy할 수 없게 됩니다.

좋은 웹페이지 즐겨찾기