2016-07-20 6 views
25

.tfstate 파일을 Git에 커밋할지 여부를 묻는 질문에 조금 혼란스러워합니다. Terraform documentation 상태 :.tfstate 파일을 Git에 위탁해야합니까?

terraform도 기본적으로 terraform.tfstate 파일에 상태를 입력합니다. 이 상태 파일은 매우 중요합니다. Terraform이 관리하는 내용을 알 수 있도록 다양한 리소스 메타 데이터를 실제 리소스 ID에 매핑합니다. 이 파일은 Terraform을 실행할 수있는 모든 사용자에게 저장되고 배포되어야합니다. 일반적으로 너무 크지 않기 때문에 단순히 버전 관리에 넣는 것이 좋습니다.

지금, 다른 한편으로는, Best practices when using Terraform 상태에 대한 허용 및 upvoted 대답은 :

Terraform의 설정이 다른 상태를 가질 수 각각의 서로 다른 인프라 제공 많은 상자로 사용할 수 있습니다. 여러 사람이 실행할 수 있기 때문에이 상태는 S3와 같은 중앙 위치에 있어야하지만 이 아니라 자식입니다. 권리이며, 만약 그렇다면, 왜

(하지 나에 의해 원래의 저자 강조)?

답변

12

Yevgeniy의 답변이 좋습니다. 문제는 Terraform이 상태로 자신의 문서를 업데이트로 지금은 다소 덜 논쟁의 여지가있다 :

Terraform도 기본적으로 terraform.tfstate 파일에 일부 상태를 저장합니다. 이 상태 파일은 매우 중요합니다. 다양한 리소스 메타 데이터를 실제 리소스 ID에 매핑하여 Terraform이 관리하고있는 것이 무엇인지 파악합니다. 이 파일은 이 Terraform을 실행할 수있는 사용자에게 저장되고 배포되어야합니다. 일반적으로 Terraform으로 작업 할 때는 원격 상태 을 설정하는 것이 좋습니다. 이 상태 파일에 저장된 모든 잠재적 인 비밀 이

그래서 더 이상 설립 모범 사례와 공식 권고 사이에 의견 차이가 버전 제어에 체크인되지 않습니다 것을 의미합니다.

5

이것은 아마도 기본 설정으로 내려갈 것입니다.하지만 git (또는 다른 소스 제어 도구)는 상태 파일을 저장하는 데 특히 좋은 옵션이 아닙니다. 컴파일 된 바이너리 또는 CSS로 컴파일 된 JS 또는 LESS 최소화.

정상적으로 모든 것을 복잡하게 만드는 코드에서 실제로 변경되는 것보다는 실행되는 것으로 출력되는 상태 파일이 상태 파일에서 상당히 빠르게 변경 될 수 있습니다.

그러나 서로 다른 랩톱/컴퓨터에서 개발중인 경우 원격 팀 구성원 또는 다른 장치와 이러한 상태 파일을 공유 할 방법이 필요합니다. Terraform이 상태 파일을 사용하여 관리하고있는 것을 해결하기 위해 상태 파일을 잃어 버리면 발목을 밟지 않아도되기 때문에 실제적인 고통을 느끼기 때문에 저장 및 백업 할 방법이 필요합니다. 다른 툴링.

S3는 아마 지금 당신이 그들을 넣을 수있는 가장 좋은 장소라고 말하고 싶습니다. 그것은 꽤 자유 롭습니다. 내구성이 뛰어나고 가용성이 뛰어납니다. remote state 리소스를 사용하는 Terraform의 기본 지원 기능이 매우 뛰어납니다. 그리고 가장 중요한 점은 S3 버킷을 만들어야 만 시작할 수 있다는 것입니다. Consul 또는 etcd 클러스터를 먼저 Terraform없이 구축해야합니다. 그렇지 않으면 닭고기와 달걀에 문제가있어 그 중 어느 것을 만들 것인지 국가를 저장합니까?) 이러한 제품 중 하나를 사용하려는 경우에도 약간의 어려움이 있습니다.

분명히 OpenStack을 사용한다면 Swift은 좋은 대안을 만들어야합니다. (사용하지는 않았지만). 나는 또한 Hashicorp의을 사용하지 않았지만, 그 서비스에 대해 기꺼이 돈을 지불한다면 똑같이 유용 할 것입니다.

28

는 몇 가지 이유 힘내에 .tfstate 파일을 저장할 수 없습니다 있습니다 : 당신은 커밋 terraform apply를 실행 한 후 변경 사항을 추진하는 것을 잊지 가능성이

  1. 을, 그래서 당신의 동료는 것 오래된 .tfstate 파일.또한 이러한 상태 파일을 잠그지 않고 두 팀 구성원이 동일한 .tfstate 파일에서 동시에 Terraform을 실행하면 서로의 변경 사항을 덮어 쓸 수 있습니다. a) Terraform remote state을 사용하여 S파일을 S3 버킷에 저장하면 terraform apply을 실행할 때마다 .tfstate 파일을 자동으로 푸시/풀하고 terragrunt과 같은 도구를 사용하여 .tfstate 파일에 대한 잠금을 제공 할 수 있습니다.
  2. .tfstate 파일에는 비밀이 포함되어있을 수 있습니다. 예를 들어 aws_db_instance 리소스를 사용하는 경우 데이터베이스 비밀번호를 지정해야하며 Terraform은 일반 텍스트로 .tfstate 파일에이 비밀번호를 저장합니다. Terraform을 대신하여 버전 제어에 암호화되지 않은 비밀 정보를 저장하는 것은 좋지 않습니다. 적어도 S개의 파일을 S3에 저장하는 경우에는 (암호화 된 상태에서 암호화를 제공하는) 암호화를 사용 설정하고 IAM 정책을 구성하여 액세스 권한을 제한 할 수 있습니다. 이상적인 곳과는 거리가 멀어서 그것에 대해 open issue discussing this problem을 볼 수 있는지 확인해야합니다.

은 더 많은 정보 How to manage Terraform stateTerraform: Up & Running을 확인하십시오.

+2

여기에 또 다른 이유가 있습니다. TF + Git을 버전 관리를 사용하는 소프트웨어 개발로 간주하십시오. 그런 경우 빌드 아티팩트 (예 : 상태 파일)를 VC 저장소에 저장하지 않고 대신 중앙 아티팩트 저장소 (예 : S3 버킷)에 저장합니다. – KJH

+0

더 이상 잠금을 제공하기 위해 Terragrunt가 필요하지 않습니다. 이제 Terraform에 내장되었습니다 : https://www.terraform.io/docs/state/locking.html –