여러 사람이 terraform을 다룰 때 조심하십시오.
여러 사람이 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.tfterraform {
backend "s3" {
bucket = "tfstate-test"
key = "tfstate"
region = "ap-northeast-1"
}
}
미리 S3에서 tfstate-test라는 버킷을 만들어 두고 terraform init을 실행합니다.
이제 여러 tfstate 파일을 공유할 수 있습니다.
-해결 방법- backend 설정②
위의 설정만으로는 여러 사람이 동시에 apply나 destroy하는 것을 막지 않습니다.
그래서 먼저 dynamodb를 배포하십시오.
main.tfresource "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.tfterraform {
backend "s3" {
bucket = "tfstate-test"
key = "tfstate"
region = "ap-northeast-1"
dynamodb_table ="tfstate_lock"
}
}
이제 terraform apply 또는 terraform destroy를 실행할 때 tfstate 파일이 잠기고 여러 사람이 동시에 apply 또는 destroy할 수 없게 됩니다.
Reference
이 문제에 관하여(여러 사람이 terraform을 다룰 때 조심하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ms2geki/items/5a7cb41b5c8c5532d90c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
위의 그림을 보완합니다.
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.tfterraform {
backend "s3" {
bucket = "tfstate-test"
key = "tfstate"
region = "ap-northeast-1"
}
}
미리 S3에서 tfstate-test라는 버킷을 만들어 두고 terraform init을 실행합니다.
이제 여러 tfstate 파일을 공유할 수 있습니다.
-해결 방법- backend 설정②
위의 설정만으로는 여러 사람이 동시에 apply나 destroy하는 것을 막지 않습니다.
그래서 먼저 dynamodb를 배포하십시오.
main.tfresource "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.tfterraform {
backend "s3" {
bucket = "tfstate-test"
key = "tfstate"
region = "ap-northeast-1"
dynamodb_table ="tfstate_lock"
}
}
이제 terraform apply 또는 terraform destroy를 실행할 때 tfstate 파일이 잠기고 여러 사람이 동시에 apply 또는 destroy할 수 없게 됩니다.
Reference
이 문제에 관하여(여러 사람이 terraform을 다룰 때 조심하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ms2geki/items/5a7cb41b5c8c5532d90c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
terraform {
backend "s3" {
bucket = "tfstate-test"
key = "tfstate"
region = "ap-northeast-1"
}
}
위의 설정만으로는 여러 사람이 동시에 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할 수 없게 됩니다.
Reference
이 문제에 관하여(여러 사람이 terraform을 다룰 때 조심하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ms2geki/items/5a7cb41b5c8c5532d90c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)