Terraform(테라폼)이란
테라폼이란 하시코프에서 Go 언어로 개발한 오픈소스 IaC(Infrastructure as Code) 도구이다.
IaC는 코드로 인프라를 관리한다는 개념으로 테라폼에서는 HCL(Hashicorp Configuration Language, 하시코프 설정 언어)를 사용해 클라우드 리소스를 선언한다. AWS가 자체적으로 만든 AWS CloudFormation의 경우 AWS만 지원하지만 테라폼은 AWS, GCP(구글), Azure(MS), Naver Cloud 등 같은 주요 클라우드 서비스들을 프로바이더로 제공한다. 다시 말해 테라폼만으로 멀티 클라우드 리소스들을 선언하고 코드로 관리하는 것이 가능하다.
테라폼을 활용한 AWS 인프라스트럭처 프로비저닝 순서
1단계 : AWS 계정, API 키 설정
2단계 : HCL 언어로 필요한 리소스 선언(*.tf 생성)
3단계 : 선언된 리소스들이 생성 가능한지 계획 확인(terraform plan)
4단계 : 선언된 리소스들을 AWS에 적용(terraform apply)
+a) : 선언된 리소스 한번에 제거 (terraform destroy)
(보다 자세한 내용은 테라폼(Terraform) 기초 튜토리얼 참고)
개인적 사용기
AWS를 사용하며 인프라 사용을 GUI 환경에서 버튼을 눌러 사용하거나 종종 AWS CLI로 확인하였다. 비슷한 인프라 구성을 갖춘 프로젝트를 반복하며 매번 GUI 환경으로 인프라 관리하기 어려웠다. 코드스쿼드 호눅스를 통해 AWS CloudFormation을 알게 되었다. 코드로 인프라를 관리할 수 있는 방법을 보았고 자연스레 멀티 클라우드 리소스들까지 한 번에 코드로 관리할 수 있는 테라폼을 인식했다. 하지만 직접 해보지 않았으니 얼마나 대단한지 감이 오지 않았다. 오늘 우연한 호기심으로 기존에 구현했던 인프라를 테라폼으로 바꿔보았다. 테라폼을 직접 사용해보니 너무나 충격적이었다. 마치 테라폼 없이 인프라를 관리한다는 것은 테스트 코드 없이 기능 구현하는 것과 같지 않을까 생각해본다.
예를 들어 아래의 인프라를 구축한다고 하자. (예제 저장소)
AWS GUI 환경에서 인프라 구축하기 위해 상당히 많은 버튼 클릭과 시간이 필요하다. 하지만 테라폼을 활용한다면 이 과정을 모두 코드로 관리할 수 있다. (물론 GUI 환경이 익숙하다면 IaC 작성이 더 번거롭고 느리다고 느껴질 수 있다.)
인프라를 코드로 관리한다는 것은 확장 가능성, 버전 관리, 인프라 일관성, 배포 속도 향상 등 수 많은 장점이 있다.
매번 사용한 리소스 제거를 위해 직접 종료가 아닌 terraform destroy 명령으로 모든 리소스를 제거할 수 있는 것 만으로도 클라우드 연습할 때 큰 도움이 되었다.
# provider.tf
provider "aws"{
region = "ap-northeast-2"
}
# vpc.tf
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "terraform-kukim-vpc"
}
}
// 생략
resource "aws_route" "private_nat" {
route_table_id = aws_route_table.private.id
destination_cidr_block = "0.0.0.0/0"
nat_gateway_id = aws_nat_gateway.nat_gateway.id
}
앞으로 인프라 다룰 일이 있을 때 조금씩 연습해보자!
⛓ Reference & 참고하기 좋은 링크
'👾 Server > 🆃 Terraform' 카테고리의 다른 글
레디스를 5가지 방법으로 설치/구축하기 : Terraform + AWS ElastiCache (0) | 2022.12.10 |
---|---|
Terraform(테라폼)을 활용한 Heroku(헤로쿠) app 프로비저닝 하기 (0) | 2022.08.01 |
댓글