Terraform 상태 관리

Terraform Sangtae Gwanli



코드형 인프라(Infrastructure as Code)는 대규모 프로비저닝의 복잡성을 극복하고 반복적으로 IT 리소스를 수동으로 관리하는 데 도움이 되는 코드를 통해 IT 인프라를 관리하고 프로비저닝하는 절차입니다. HashiCorp의 Terraform은 상태 관리 시스템을 사용하여 변경 사항을 추적하고 상태 파일을 관리하는 오픈 소스 IaC 도구입니다. 상태 관리 시스템은 주요 기능 중 하나이며 인프라 변경 사항을 효과적으로 추적하는 데 도움이 됩니다. 이 기사에서는 Terraform 상태 관리가 작동하는 방식과 이를 효과적으로 사용하는 방법에 대해 자세히 설명합니다.

지형 상태

코드에서 정의한 리소스에 대한 정보를 포함하는 인프라의 현재 상태는 Terraform 상태로 기록됩니다. Terraform은 이 상태를 사용하여 Terraform '적용'과 같은 명령이 실행될 때 인프라를 원하는 상태로 만드는 데 필요한 변경 사항을 결정합니다. 변경 사항(생성, 수정 및 삭제)을 실행한 후 Terraform은 인프라의 새 상태로 상태 파일을 업데이트합니다.

개념을 명확하게 이해하기 위해 예를 들어 보겠습니다.







자원 'local_file' '남자' {

파일명 = '/홈/John.txt'

내용 = '나는 애완 동물을 사랑합니다'

}

여기에서 'main.tf'라는 Terraform 파일을 만듭니다. 그 안에는 파일 이름과 콘텐츠라는 두 가지 속성이 있는 'John'이라는 local_file 유형의 리소스가 있습니다.



local_file 리소스 유형은 Terraform이 실행 중인 시스템의 로컬 파일 시스템에 파일을 만드는 데 사용됩니다. 이 경우 '/home' 디렉토리에 'John.txt'라는 이름으로 파일이 생성되며 파일의 내용은 'I love pets'입니다.



이제 Terraform 흐름(Terraform 초기화, 계획 및 적용)을 수행해 보겠습니다. 프로젝트에서 Terraform '적용' 명령을 처음으로 실행하면 Terraform은 Terraform 프로젝트의 루트 디렉터리에 'terraform.tfstate'라는 상태 파일을 자동으로 생성합니다. 여기에는 인프라의 현재 상태에 대한 모든 정보가 JSON 형식으로 포함됩니다.





다음은 생성한 리소스의 상태 파일입니다.



이제 현재 리소스를 제거하고 속성(접두사, 길이 및 구분 기호)을 사용하여 'my-pet'이라는 이름의 random_pet 유형의 다른 리소스를 생성한다고 가정해 보겠습니다.

자원 'random_pet' '내 애완 동물' {

접두사 = '씨'

길이 = '1'

구분자 = '.'

}

여기에서 local_file 리소스를 제거하고 random_pet 리소스를 추가합니다. 우리가 원하는 상태는 random_pet 자원만 갖는 것입니다. Terraform 초기화, 계획 및 적용 명령을 수행해 보겠습니다.

이전 그림에서 볼 수 있듯이 Terraform '계획' 명령을 실행하면 Terraform이 원하는 상태에 도달하기 위해 수행하는 작업이 표시됩니다. Terraform 'apply' 명령을 실행하면 'my-pet' 리소스가 생성되고 'John' 리소스가 제거됩니다. 또한 local_file 리소스의 메타데이터를 삭제하고 random_pet 리소스의 메타데이터를 추가하여 상태 파일을 업데이트합니다.

다음은 업데이트된 상태 파일의 내용입니다.

관리 상태의 Terraform은 어떻게 작동합니까?

백엔드를 사용하여 Terraform은 상태를 관리합니다. 백엔드는 Terraform이 상태 데이터를 저장하고 검색하는 데 사용하는 원격 서비스 또는 로컬 파일 시스템입니다. 요구 사항에 따라 적합한 백엔드를 선택할 수 있습니다.

Terraform은 로컬, Amazon S3, HashiCorp Consul, Vault 및 Azure Storage를 비롯한 여러 기본 제공 백엔드를 지원합니다. 기본 제공 옵션이 요구 사항을 충족하지 않는 경우 사용자 지정 백엔드를 만들 수도 있습니다.

이전 예에서 상태 파일은 로컬 백엔드에 저장되었습니다. 그러나 원격 백엔드에 저장하는 것이 협업을 불러오고 보안을 강화하므로 모범 사례입니다.

상태 관리의 중요성

Terraform과 같은 도구의 상태 관리는 다음과 같은 핵심 사항으로 인해 필수적입니다.

인프라의 현재 상태 확인

상태 파일은 기존 리소스와 해당 현재 속성의 정확한 스냅샷을 제공합니다. 이 데이터는 인프라를 이해하고 원하는 상태에 있는지 확인하는 데 필수적입니다.

시간 경과에 따른 인프라 변경 사항 추적

Terraform을 사용하여 변경 사항을 적용할 때마다 상태 파일이 업데이트되어 인프라의 새로운 상태를 반영합니다. 이를 통해 인프라가 어떻게 발전했는지 추적하고 모든 변경 사항에 대한 감사 추적을 제공할 수 있습니다.

오토메이션

원하는 인프라 상태를 코드로 정의하면 인프라 생성 및 관리를 자동화할 수 있습니다. 상태 관리는 시간이 지남에 따라 변경되는 경우에도 인프라가 원하는 상태로 유지되도록 보장합니다.

종속성 관리

Terraform을 사용하면 구성 파일에서 리소스 간의 관계를 정의할 수 있으며 Terraform은 상태 파일을 사용하여 이러한 관계가 유지되도록 합니다. 이렇게 하면 한 리소스에 대한 변경 사항이 다른 리소스에 실수로 영향을 주지 않습니다.

재해 복구

장애나 정전이 발생하면 상태 파일을 사용하여 알려진 상태로 인프라를 다시 생성할 수 있습니다. 이를 통해 가동 중지 시간을 최소화하고 인프라를 신속하고 효율적으로 복원할 수 있습니다.

효과적인 상태 관리를 위한 모범 사례

다음은 상태를 효과적으로 관리하기 위해 따를 수 있는 몇 가지 팁입니다.

원격 백엔드 사용

원격 백엔드는 로컬 백엔드에 비해 여러 가지 이점을 제공합니다. 여러 사용자가 동일한 인프라에서 작업할 수 있으며 로컬 백엔드보다 더 나은 보안과 안정성을 제공합니다.

버전 관리 활성화

상태 파일의 버전을 관리하면 시간 경과에 따른 변경 사항을 추적하고 필요한 경우 이전 버전으로 롤백할 수 있습니다. 또한 버전 관리는 감사 추적을 제공하고 변경 사항이 적절하게 문서화되도록 합니다.

잠금 장치 사용

여러 사용자가 동일한 인프라에서 작업할 때 충돌을 방지하는 데 도움이 되는 잠금 메커니즘을 사용할 수 있습니다. Terraform은 DynamoDB, Consul 및 S3를 비롯한 여러 잠금 도구를 지원합니다.

상태 파일 백업

상태 파일을 정기적으로 백업하면 데이터 손상을 복구할 수 있습니다. 안전한 위치에 백업을 저장하고 관련 규정 준수 요구 사항을 따라야 합니다.

결론

상태 파일을 이해하고 예제를 통해 관리하면서 IaC와 Terraform에 대해 간략하게 소개했습니다. Terraform이 상태에서 작동하는 방식을 이해하면 일반적인 함정을 피하고 인프라를 원하는 상태로 유지하는 데 도움이 될 수 있습니다. 상태 관리를 위한 모범 사례를 따르면 Terraform을 안심하고 효과적으로 사용할 수 있습니다.