Terraform 구성 및 스크립팅

완료됨

이 단원에서는 Terraform 구성 및 스크립팅을 살펴봅니다.

Terraform을 사용하는 이유는 무엇인가요?

인프라 관리자로서 Azure 인프라를 프로비저닝하고 관리하는 도구가 필요합니다. Azure 리소스의 토폴로지를 설명하는 구성 파일에서 IaC(Infrastructure as Code)도 사용하려고 합니다.

HashiCorp Terraform은 여러 클라우드 공급자에 인프라를 배포하는 데 유용합니다. Terraform은 각 인프라 정의를 관리하기 위한 일관된 도구를 개발자에게 제공합니다.

인프라 관리 자동화

템플릿 기반 Terraform 구성 파일을 사용하여 반복 가능하고 예측 가능한 방식으로 Azure 리소스를 정의, 프로비저닝, 구성할 수 있습니다. 이 자동화는 다음과 같은 여러 이점을 제공합니다.

  • 인프라를 배포하고 관리할 때 사용자 오류가 발생할 가능성을 줄입니다.
  • 동일한 템플릿을 여러 번 배포하여 동일한 개발, 테스트 및 프로덕션 환경을 만듭니다.
  • 주문형으로 개발 및 테스트 환경을 만들어 해당 환경의 비용을 줄입니다.

적용 전에 인프라 변경 내용 이해

리소스 토폴로지가 점점 복잡해지면서 인프라 변경의 의미와 효과를 이해하기가 어려울 수 있습니다.

Terraform을 사용하면 인프라 변경 내용을 적용하기 전에 유효성을 검사하고 미리 볼 수 있습니다. 팀 멤버는 제안된 변경 내용과 해당 효과를 개발 프로세스 초기에 파악하여 보다 효율적으로 협업할 수 있습니다.

Terraform 구성 파일

구성 파일은 실행 계획과 원하는 상태에 도달하기 위해 실행 계획이 수행할 작업을 생성합니다. 그런 다음, Terraform은 설명된 인프라를 빌드할 수 있습니다. 구성이 변경되면 Terraform은 변경된 내용을 확인하고 증분 실행 계획을 만들 수 있습니다.

Terraform 구성 파일은 인프라에 관한 설명을 허용하도록 디자인된 YAML과 비슷한 자체 구성 언어를 사용합니다.

HCL(HashiCorp Configuration Language) 구문을 사용하여 구성 파일을 만듭니다. HCL은 해당 목표에 도달하는 단계가 아닌 의도된 목표를 설명하는 선언적 언어입니다. HCL 구문을 사용하면 Azure 같은 클라우드 공급자 및 클라우드 인프라를 구성하는 요소를 지정할 수 있습니다.

구성 파일은 .tf 파일 확장명이 있는 일반 텍스트 파일로 저장됩니다. 아래에 이 계정과 키의 예제가 나와 있습니다.

  • main.tf: (필수) 전체 인프라를 직접 또는 모듈 호출을 통해 배포하는 주 구조체를 정의합니다.
  • outputs.tf: Terraform 모듈의 각 반환 값을 식별합니다.
  • variables.tf: 필수 여부에 관계없이 main.tf의 변수를 정의합니다.

Screenshot of the Terraform configuration structure.

모듈

Terraform 리소스를 모듈로 그룹화하여 더 큰 구성 단위를 만들 수 있습니다. 이러한 모듈은 단일 디렉터리에 저장되는 구성 파일 집합입니다. 간단한 구성은 하나 이상의 .tf 파일을 포함하는 단일 디렉터리로 구성됩니다.

모듈은 다양한 이점을 제공합니다. 예를 들어 모듈은 다음을 수행합니다.

  • 프로젝트를 구성하는 데 도움이 됩니다.
  • 복잡성을 캡슐화합니다.
  • 일반 작업을 다시 사용하도록 허용합니다.
  • 일관성을 제공하고 모범 사례에 따르는지 확인합니다.

main.tf 파일

main.tf 파일에는 모듈의 주 구성 세부 정보 집합이 포함됩니다. 해당 파일을 Terraform ‘계획’이라고도 합니다. Terraform 계획은 필요한 인프라 리소스를 지정합니다. 이 파일의 이름은 원하는 대로 지정할 수 있지만 보통 main.tf로 지정합니다.

Terraform 워크플로

Terraform은 자동화를 위한 핵심 “초기화, 계획, 적용” 워크플로를 추천합니다. 이 워크플로는 신규 및 업데이트된 Git 끌어오기 요청에 대한 모든 Terraform CI/CD 작업을 실행합니다.

Diagram of the Terraform workflow, displaying the core actions Init, Plan, and Apply.

해당 워크플로의 핵심 작업은 다음과 같습니다.

  • Init: Terraform 구성 파일을 사용하여 작업 디렉터리를 초기화합니다.
  • 계획: 현재 구성과 일치하도록 리소스를 변경하는 계획을 생성합니다.
  • 적용: 계획에서 설명하는 변경 내용을 적용합니다.

시스템 상태

상태를 통해 Terraform은 추가, 업데이트 또는 삭제할 Azure 리소스를 알 수 있습니다.

Terraform은 상태를 사용하여 계획을 만들고 인프라를 변경합니다. 모든 작업 전에 Terraform은 새로 고침을 수행하여 상태를 실제 인프라로 업데이트합니다.

상태는 기본적으로 terraform.tfstate라는 로컬 텍스트 파일에 저장됩니다. Terraform은 모듈에서 정의한 워크플로 작업을 사용하여 이 파일을 관리합니다.

원격으로 상태를 저장할 수도 있는데, 이 방법은 팀 환경에서 더 효과적입니다. 상태를 원격으로 관리하는 방법에 대한 자세한 내용은 이 모듈의 끝에 있는 요약 단원을 참조하세요.

다음 단계

다음 단원에서는 GitHub Actions 또는 Azure Pipelines를 Terraform과 함께 사용하여 애플리케이션을 프로비전하고 배포하는 방법을 논의합니다.