반응형
이번 포스트에서는 테라폼이 무엇인지 알아보자
📌 서론
MSA 프로젝트를 설계하면서 AWS 내부에 많은 서버와 DB를 띄우고 나니 매달 나오는 비용이 상당했다. 그래서 우리 팀은 필요할 때만 EC2를 생성해서 ECS클러스터와 RDS를 가동하면 돈을 아낄 수 있을 것이라고 생각했고 여러 가지 tool을 알아보던 도중 terraform을 찾아냈고 이를 적용시켰다. 그 내용을 공유하기 전에 테라폼이 무엇인지에 대해 먼저 알아보자
1. 테라폼이란 무엇인가?
테라폼이란?
- 테라폼(Terraform)은 HashiCorp가 개발한 오픈 소스 'Infrastructure as Code' 도구로, 클라우드 및 온프레미스 리소스의 구축, 변경, 버전 관리를 코드로 효과적으로 관리할 수 있게 한다.
- 테라폼은 HCL(HashiCorp Configuration Language)을 사용하여 인프라의 원하는 최종 상태를 선언적으로 기술하며, 이를 통해 사용자는 복잡한 인프라 환경을 보다 쉽고 명확하게 관리할 수 있다. 테라폼은 다양한 클라우드 환경에서 활용될 수 있으며, DevOps 팀에게 필수적인 도구로 자리 잡고 있다.
테라폼의 언어
- 테라폼 자체는 Go 언어로 개발되었다. 즉, 테라폼 도구의 핵심 코드 및 로직은 Go 언어로 작성되어 있다. 반면에, 테라폼을 사용하는 사용자는 인프라를 정의하고 관리하기 위해 HCL(HashiCorp Configuration Language)을 사용한다.
- 사용자는 HCL을 이용하여 자신의 클라우드 인프라, 서버 구성, 기타 관리해야 할 리소스들을 선언적으로 기술하게 된다. 따라서, 테라폼을 개발하는 개발자와 테라폼을 사용하는 사용자 사이에는 사용하는 언어가 다르다.
2. HCL 간단히 알아보기
HCL이란?
- HCL(HashiCorp Configuration Language)은 HashiCorp에서 개발한 구성 언어로, 주로 테라폼 같은 HashiCorp 도구들에서 사용된다. HCL은 JSON과 유사한 구조를 가지고 있지만, 보다 인간이 읽기 쉬운 형식을 제공한다.
HCL의 간단한 예제
- HCL의 기본 구조는 블록, 식별자, 속성 및 값으로 구성된다. 예를 들어, 테라폼의 HCL을 사용하여 AWS의 EC2 인스턴스를 구성하는 간단한 예시는 다음과 같다.
- 여기서 provider 블록은 AWS 프로바이더를 설정하며, resource 블록은 EC2 인스턴스를 생성한다. ami와 instance_type은 EC2 인스턴스의 속성으로, 각각 사용할 Amazon Machine Image와 인스턴스 유형을 지정한다. tags는 인스턴스에 대한 추가 메타데이터를 제공한다.
provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "MyExampleInstance"
}
}
3. 테라폼의 주요 사용자
테라폼 사용자
- 테라폼의 핵심 사용자군은 DevOps 팀이다. 이들은 테라폼을 활용하여 클라우드 리소스 프로비저닝, 네트워크 구성, 서버 설정 등과 같은 다양한 인프라 작업을 자동화한다. 테라폼을 사용함으로써, DevOps 팀은 더욱 빠르고 효율적으로 인프라를 관리할 수 있으며, 인프라 변경사항에 대한 추적과 문제 해결이 용이해진다.
테라폼은 어떻게 사용되는가?
- 사용자는 테라폼의 HCL을 사용하여 구성 파일을 작성하고, 이를 통해 원하는 인프라 상태를 명확히 정의할 수 있다. 이렇게 정의된 구성은 테라폼 명령어를 통해 적용되며, 인프라가 변경되거나 업데이트될 때마다 일관된 환경을 제공한다. 또한, 테라폼은 인프라의 버전 관리를 가능하게 하여, 변경 사항을 추적하고 필요한 경우 이전 상태로 롤백하는 것을 지원한다.
- 이러한 특성 덕분에, 테라폼은 클라우드 서비스 공급자 간의 인프라 이동, 멀티 클라우드 환경 관리, 대규모 인프라의 중앙 집중식 관리 등 복잡한 작업들을 단순화시키는 데 큰 도움을 준다. 이는 DevOps 팀이 인프라 관리에 드는 시간과 노력을 줄이고, 더 중요한 개발 작업에 집중할 수 있게 해 준다.
4. 테라폼은 다음과 같은 이유로 사용된다.
인프라를 코드로 관리
- 인프라 구성을 코드 형태로 관리함으로써, 버전 관리, 재사용, 공유가 용이해진다.
자동화 및 효율성
- 반복적인 인프라 작업을 자동화하여 시간과 노력을 절약할 수 있다.
클라우드 독립적
- 여러 클라우드 제공업체에서 동일한 도구를 사용하여 일관된 경험을 제공한다.
선언적 구성 언어
- HCL을 사용하여 인프라의 원하는 최종 상태를 쉽게 기술할 수 있다.
이러한 특성으로 인해, 테라폼은 클라우드 인프라 관리와 자동화에 있어 DevOps 팀에게 매우 중요한 도구로 자리잡고 있다.
5. 테라폼은 (Infrastructure as Code) 도구다
Infrastructure as Code
- "Infrastructure as Code"는 구성 파일을 사용하여 그래픽 사용자 인터페이스 대신 인프라를 관리하는 방법이다. IaC를 사용하면 리소스 구성을 정의하여 인프라를 안전하고 일관되며 반복 가능한 방식으로 구축, 변경 및 관리할 수 있다. 이 구성은 버전 관리, 재사용 및 공유가 가능하다.
테라폼의 주요 장점
- 여러 클라우드 플랫폼에서 인프라 관리
- 인프라 코드를 빠르게 작성할 수 있는 인간 친화적 구성 언어
- 배포 중 리소스 변경 추적을 위한 테라폼의 상태 관리
- 인프라에 대한 안전한 협업을 위한 버전 관리 시스템 연동
6. 테라폼은 '프로바이더' 플러그인을 사용한다.
테라폼은 '프로바이더' 플러그인을 사용한다.
- 이러한 프로바이더를 통해 표준화된 배포 워크플로우를 구성하고, 선언적 언어를 사용하여 인프라의 원하는 최종 상태를 기술할 수 있다. 테라폼은 인프라를 배포하는데 다음과 같은 단계를 포함한다. (범위 정의, 구성 작성, 초기화, 계획 및 적용.) 또한, 테라폼은 원격 상태 백엔드를 통해 인프라에 대한 협업을 지원하며, Terraform Cloud를 통해 팀과 상태를 안전하게 공유할 수 있다. 이는 또한 버전 관리 시스템과 연동되어 인프라 변경을 자동으로 제안할 수 있다.
MacOS에서 테라폼 설치를 하고싶다면? 👇🏻👇🏻
이 포스트는 Team chillwave에서 사이드 프로젝트 중 적용했던 부분을 다시 공부하며 기록한 것입니다.
시간이 괜찮다면 팀원 '평양냉면7'님의 블로그도 한번 봐주세요 :)
반응형
'AWS > 테라폼(Terraform)' 카테고리의 다른 글
테라폼(Terraform) 사용 가이드 6: 테라폼으로 IAM 정책 생성/관리하기 (1) | 2023.12.05 |
---|---|
테라폼(Terraform) 사용 가이드 5: variable/output(입출력 변수) 사용하기 (1) | 2023.12.05 |
테라폼(Terraform) 사용 가이드 4: 생성된 AWS EC2 인스턴스 파괴하기 (0) | 2023.12.05 |
테라폼(Terraform) 사용 가이드 3: EC2 생성하기 (0) | 2023.12.04 |
테라폼(Terraform) 사용 가이드 2:MacOS에 테라폼 설치하기 (1) | 2023.12.04 |