Terraform

menu icon

Terraform

이 안내서는 프로그래머가 인프라를 안전하고 효율적으로 빌드, 변경, 버전 업그레이드하도록 지원하는 Terraform 툴에 대해 필요한 모든 것을 강조하여 설명합니다.

Terraform이란?

Terraform은 HashiCorp사가 만든 오픈 소스 "코드형 인프라" 툴입니다.

선언적인 코딩 툴인 Terraform은 개발자가 HCL(HashiCorp Configuration Language)이라고 불리는 상위 레벨 구성 언어를 사용하여 애플리케이션 실행을 위해 원하는 "엔드 상태" 클라우드 또는 온프레미스 인프라를 기술하도록 합니다. 그런 다음 해당 엔드 상태에 도달하기 위한 계획을 생성하고 인프라를 프로비저닝하기 위한 계획을 실행합니다.

Terraform은 현재 공급되는 가장 인기 있는 인프라 자동화 툴 중 하나이며, 이는 단순 구문을 사용하여 여러 클라우드 및 온프레미스 데이터 센터에서 인프라를 프로비져닝하고 구성 변경에 대한 대응으로 인프라를 안전하고 효율적으로 다시 프로비져닝할 수 있기 때문입니다. 조직이 하이브리드 클라우드 또는 멀티클라우드 환경을 전개할 경우, Terraform 사용을 원하거나 Terraform이 필요할 수 있습니다.

코드형 인프라(IaC)란?

Terraform의 장점을 보다 잘 이해하기 위해 코드형 인프라(IaC)의 장점을 먼저 이해하는 것이 도움이 됩니다. IaC를 통해 개발자는 자동화되고 신속하며 반복 가능한 프로비져닝을 제공하는 방식으로 인프라를 코딩할 수 있습니다. 버전 관리, 지속적인 통합, 연속 배치 등 Agile 및 DevOp 실무의 주요 구성요소입니다.

코드형 인프라는 다음과 같은 도움을 줄 수 있습니다.

  • 속도 향상: 자원을 배치 및/또는 연결해야 하는 경우 인터페이스의 수동 탐색보다 자동화가 더 빠릅니다.
  • 안정성 향상: 인프라의 규모가 클 경우, 자원 또는 프로비저닝 서비스를 잘못된 순서로 구성할 수 있습니다. IaC를 사용하면 자원은 항상 프로비저닝되고 선언된 대로 구성됩니다.
  • 구성 드리프트 방지: 사용자 환경을 프로비저닝한 구성이 실제 환경과 더 이상 일치하지 않는 경우 구성 드리프트가 발생합니다. (아래의 '변경 불가 인프라'를 참조하세요.)
  • 실험, 테스트 및 최적화 지원: 코드형 인프라를 더 빠르고 쉽게 프로비저닝할 수 있기 때문에 많은 시간과 자원을 투자하지 않고도 시험적 변경사항을 작성하고 테스트할 수 있습니다. 실제 결과를 원한다면 프로덕션을 위해 새 인프라를 신속하게 확장할 수 있습니다.

자세히 알아보려면 아래의 "코드형 인프라란?" 동영상을 참조하세요.

Terraform을 사용하는 이유

개발자가 다른 코드형 인프라 툴에 비해 Terraform을 선택하는 몇 가지 주요 이유가 있습니다.

  • 개방형 소스: Terraform은 플랫폼에 플러그인을 빌드하는 유통사의 대규모 커뮤니티를 지원합니다. 사용하는 클라우드 공급자에 관계없이 플러그인, 확장, 전문 지원을 쉽게 찾을 수 있습니다. 그 결과 Terraform은 신속하게 진화하고 새로운 이점과 개선된 기능이 지속적으로 향상됩니다.
  • 플랫폼 애그노스틱: 모든 클라우드 서비스 공급자와 함께 사용할 수 있습니다. 대부분의 다른 IaC 툴은 단일 클라우드 공급자와 함께 작동하도록 설계되어 있습니다.
  • 변경 불가 인프라: 대부분의 코드형 인프라는변경 가능 인프라를 생성합니다. 이는 인프라가 미들웨어 업그레이드 또는 새 스토리지 서버와 같은 변경을 수용하도록 변화할 수 있음을 의미합니다. 변경 내용이 쌓이면서 다른 서버 또는 기타 인프라 요소의 실제 프로비저닝이 원래 구성에서 더 멀리 '드리프트'되어 버그 또는 성능 문제를 진단하고 정정하기 어렵기 때문에 변경 가능한 인프라는구성 드리프트의 위험을 내포합니다. Terraform은변경 불가 인프라를 프로비저닝하며, 이는 환경에 대한 모든 변경사항에 대해 현재 구성이 변경을 기술하는 새로운 구성으로 대체되고 인프라가 다시 프로비저닝됨을 의미합니다. 장점으로 이전 구성은 필요하거나 원할 경우 롤백이 가능한 버전으로 유지될 수 있습니다.

Terraform 모듈

Terraform모듈은 함께 사용되는 여러 인프라 자원을 위한 재사용 가능한 작은 Terraform 구성입니다. Terraform 모듈은 재사용 및 구성 가능한 구조를 사용하여 복잡한 자원을 자동화할 수 있기 때문에 유용합니다. 모듈에 매우 단순한 Terraform 파일 결과를 작성합니다. 한 모듈은 구성을 더 빠르고 간결하게 만들 수 있는하위 모듈이라고 하는 다른 모듈을 호출할 수 있습니다. 동일한 구성 내에서 또는 별도의 구성에서 모듈을 여러 번 호출할 수도 있습니다.

Terraform 공급자

Terraform공급자는 리소스 유형을 구현하는 플러그인입니다. 공급자는 사용자를 대신하여 일반적으로 퍼블릭 클라우드 공급자의 서비스를 인증 및 연결하는 데 필요한 모든 코드를 포함합니다. 사용하는 클라우드 플랫폼 및 서비스에 대한 공급자를 찾고 구성에 추가한 다음 그들의 리소스를 사용하여 인프라를 프로비저닝할 수 있습니다. 공급자는 거의 모든 주요 클라우드 공급자, SaaS 오퍼링이 될 수 있으며, Terraform 커뮤니티 또는 개별 조직에서 개발 및/또는 지원할 수도 있습니다. 자세한 목록은 Terraform 문서(IBM 외부 링크)를 참조하세요.

Terraform vs Kubernetes

때때로, Terraform 및 Kubernetes가 실제로 하는 일 사이에 혼동이 있습니다. 그러나 진실은 이 둘이 서로 대안이 아니며 실제로 효과적으로 협력한다는 것입니다.

Kubernetes는 개발자가 컴퓨팅 클러스터 노드에 대한 배치 일정을 설정하고 컨테이너화된 워크로드를 적극적으로 관리하여 해당 상태가 사용자의 의도와 일치하는지 확인할 수 있는 오픈 소스 컨테이너 오케스트레이션 시스템입니다.

반면에 Terraform은 개발자들이 여러 퍼블릭 클라우드와 프라이빗 클라우드에 걸쳐 있는 완전한 인프라를 자동화할 수 있는 훨씬 더 광범위한 코드형 인프라를 제공합니다.

Terraform은 IaaS(Infrastructure-as-a-Service), PaaS(Platform-as-a-Service), 심지어는 SaaS(Software-as-a-Service) 레벨 기능을 자동화 및 관리할 수 있으며, 모든 해당 제공자들 간에 병렬로 이러한 모든 리소스를 구축할 수 있습니다. Terraform을 사용하여 Kubernetes(특히 클라우드 플랫폼의 관리형 Kubernetes 클러스터)의 프로비저닝을 자동화하고 클러스터에 애플리케이션 배치를 자동화할 수 있습니다.

Terraform vs Ansible

Terraform 및 Ansible는 모두 코드형 인프라 툴이지만 두 가지에는 몇 가지 중요한 차이점이 있습니다.

  • Terraform은 순수한 선언적 툴이지만(위 내용 참조), Ansible은 선언적 및절차상의 구성을 모두 결합합니다. 프로시저 구성에서 인프라를 원하는 상태로 프로비저닝하려는 단계 또는 정확한 방법을 지정합니다. 프로시저 구성에 더 많은 작업이 필요하지만 더 많은 제어 기능을 제공합니다.
  • Terraform은 오픈 소스이며, Ansible는 Red Hat에서 개발 및 판매하고 있습니다.

IBM과 Terraform

IBM Cloud Schematics는 Terraform을 기반으로 하는 IBM의 무료 클라우드 자동화 툴입니다. IBM Cloud Schematics를 통해 Terrform 기반의 인프라 자동화를 완벽하게 관리할 수 있기 때문에 애플리케이션을 구축하는 데 더 많은 시간을 투자하고 환경을 구축하는 시간을 절약할 수 있습니다.

IBM Cloud Schematics 사용법에 대한 자세한 내용을 알아보세요.

Terraform에 대한 자세한 정보를 알아보려면 IBMid로 등록하고 IBM Cloud 계정을 생성하세요.