마짱짱의 지식창고
[Terraform] Associate 준비(2) - Terraform State 의 목적, Remote State 본문
[Terraform] Associate 준비(2) - Terraform State 의 목적, Remote State
마짱짱 2021. 7. 21. 16:24State는 Terraform이 작동하는데 필요한 요구 사항입니다.
Terraform이 State없이 작동할수 있는지 또는 Terraform이 상태를 사용하지 않고 실행할 때마다 리소스를 검사하는 것이 가능한지 종종 묻습니다. 해당 포스팅을 통해 Terraform State가 필요한 이유에 대해 설명하겠습니다.
Terraform은 Terraform Config을 Mapping 하기위해 데이터베이스가 필요합니다.
AWS와 같은 일부 Provider의 경우 Terraform은 이론적으로 AWS태그와 같은 것을 사용할 수 있습니다.
Terraformd의 초기 프로토타입에서는 State File이 없었고 이방법을 사용 했습니다. 하지만 태그를 지원하는 리소스가 아닐땐 사용할 수 없었고 또한 AWS가 아닌 다른 Provider가 TAG를 지원하는 것도 아닙니다.
따라서 리소스를 구성을 Mapping 하기 위해 Terraform은 자체 State 구조를 사용합니다.
Terraform은 리소스를 생성하고 상태에 해당 ID를 기록합니다.
대신 Terraform 외부에서 생성된 object를 가져오는 경우 각 고유 object를 하나의 리소스 object로만 가져오는지 확인해야합니다. 하나의 원격 object가 둘 이상의 object 인스턴스에 바인딩된 경우 구성에서 원격 object 상태로의 Mapping이 모호해지기 떄문에 Terraform은 해당 object에 대해 예기치 않은 작업을 할 수 있습니다.
Resource와 원격 Object 간의 Mapping과 함께 Terraform은 종속성과 같은 Metadata도 추적해야합니다.
Terraform은 일반적으로 구성을 사용하여 종속성 순서를 결정합니다. 그러나 Terraform 구성에서 Resource를 삭제 할 때 Terraform은 해당 Resource를 삭제하는 방법을 알고 있어야 합니다. Terraform은 구성 및 제거 계획에 없는 Resource에 대한 Mapping이 존재를 확인할 수 있습니다. 그러나 구성이 더이상 존재하지 않으므로 구성만으로는 순서를 결정할 수 없습니다.
올바른 동작을 하기위해 Terraform은 상태내에서 가장 최근의 종속성 세트의 사본을 유지합니다. 이제 Terraform은 Config에서 하나 이상의 항목을 삭제할 때 State에서 올바른 Destory 순서를 결정합니다.
기본 Mapping외에도 Terraform은 State의 모든 Resource에 대한 속성 값의 캐시를 저장합니다.
소규 인프라의 경우 Terraform은 공급자를 Query하고 모든 Resource의 최신 속성을 동기화할 수 있습니다. 하지만 아직 대규모 인프라의 경우 모든 Resource를 Query하는 것은 너무 느립니다.
기본 구성에서 Terraform은 Terraform이 실행된 현재 작업 디렉터리의 파일에 State를 저장합니다.
시작하기에 괜찮지만 팀에서 Terraform을 사용할 때 작업이 동일한 원격 Object에 적용되도록 모든 사람이 동일한 상태로 작업하는것이 중요합니다.
Remote State는 권장 솔루션입니다.
모든 기능을 갖춘 상태 백엔드를 통해 Terraform은 두 명 이상의 서로 다른 사용자가 실수로 동시에 Terraform을 실행하는 것을 방지하기 위한 조치로 원격 잠금을 사용할 수 있으므로 각 Terraform 실행이 가장 최근에 업데이트된 상태로 시작되도록 할 수 있습니다.
Remote State?
기본적으로 Terraform은 Sate를 Local로 terraform.tf.state 파일로 저장되어 있습니다.
팀에서 Terraform으로 작업할 때 로컬파일을 사용하면 Terraform 사용이 복잡해집니다.
각 User는 실행ㅇ하기전 학상 최신 state data를 가지고 있는지 확인하고 다른사람이 동시에 Terraform을 실행하지 않도록 해야하기 떄문입니다.
Remote State를 사용하여 이러한 문제점을 해결할 수 있습니다
aws의 S3, Azure의 Blob Storage, GCP의 Cloud Storage 등 에 Statefile을 저장할 수 있습니다.
원격상태를 사용하면 다른구성과 Output Value를 공유할 수 있습니다.
쉽게 말해, Remote State를 통해 팀은 추가 구성 저장소에 의존하지않고 읽기 전용 방식으로 인프라 리소스를 공유할 수 있습니다.
모든기능을 갖춘 Remote Backend의 경우 Terraform은 State Locking 기능을 통해 동일한 상태에 대해 동시 실행되는것 또한 방지할 수 있습니다.
출처
https://www.terraform.io/docs/language/state/purpose.html
https://www.terraform.io/docs/language/state/remote.html
'Automation > Terraform' 카테고리의 다른 글
[Terraform] Associate 준비(4) - Terraform CLI (0) | 2021.07.22 |
---|---|
[Terraform] Associate 준비(3) - Terraform 기초(Provider, Provisioners) (0) | 2021.07.22 |
[Terraform] Associate 준비(1) - IaC코드 이해하기 (0) | 2021.07.21 |
[Terraform] Associate 준비 & 문제풀이 & 개념정리 (0) | 2021.06.16 |
[Terraform] Terraform 생성,수정,삭제 test (0) | 2021.06.04 |