본문 바로가기

Newb/Terraform

Terraform ?

반응형
CloudNet@ T101 스터디 진행 후 정리한 글 입니다.

 

Terraform

Terraform?

Terraform은 하시코프(Hashicorp)에서 Go 언어로 개발하여 만든 오픈 소스 도구로써, 간단한 선언적 언어를 사용하여  인프라를 코드로 정의 할 수 있도록 만든 도구입니다.

코드형 인프라 (IaC, Infrastructure as Code)

코드형 인프라(IaC)는 코드를 작성 및 실행하여 인프라 스트럭처를 관리한다는 개념입니다.

 

[IaC] 테라폼 코드로 AWS의 EC2 인스턴스를 생성하는 예제

provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0c76973fbe0ee100c"
  instance_type = "t2.micro"
}

Terraform의 장점

  • 배포 프로세스의 자동화
  • 배포를 자동화 함으로써 사람이 수동으로 배포하는 것에 비에 속도 향상
  • 인프라가 테라폼 코드로 저장되기 때문에 인프라의 문서화, 버전관리가 됌
  • 데브옵스의 보고서 조사 결과
    • 코드형 인프라와 같은 데브옵스를 도입한 조직은 배포 횟수가 200배 정도 증가
    • 배포 시간 2,555배 단축
    • 오류를 24배 빠르게 개선

Terraform의 단점

  • 한번 배포된 서버는 다시 변경 불가능
  • 서버를 변경해야하는 경우에는 새이미지를 만들어 새 서버를 배포

Terraform 특징

선언적 코드

선언적 코드는 마지막 최종 상태를 어떤게 구현할 것인지에 대해 선언하는 코드를 말하며, 절차적 코드는 어떻게 동작할지, 상태를 변화시키는 구문에 초점을 두는 코드입니다. 

선언적 코드와 절차적 코드는 표면적으로는 비슷할 수 있으나 서로 지향하는 바가 다르기 때문에 비슷한 맥락으로 코드를 작성하여 실행하여도 결과가 달라질 수 있습니다.

예를 들어 EC2를 5개씩 실행 시킨 선언적 코드와 절차적 코드가 있을 때, EC2의 개수를 총 7개로 만들기 위하여 작성한 코드에서 인스턴스 수를 7로 변경 후 적용 시 선언적 코드는 최종 상태를 어떻게 구현할지에 대하여 초점이 맞춰있기 때문에 EC2의 인스턴스의 수는 총 7개가 되지만, 절차적 코드의 경우에는 기존에 만들어진 5개의 EC2와 새로 적용된 7개의 EC2 총 12개의 EC2가 배포됩니다.

또한 Terraform의 경우에는 선언적 코드 이기 때문에 리소스에 종속성이 있을 경우 Terraform엔진이 종속성 그래프를 작성하여 리소스를 생성하는 순서를 자동으로 결정하여 순서대로 작업을 합니다.

 

  • 선언적 코드를 사용하는 오픈 소스
    • 테라폼 / 히트 / 클라우드 포메이션 / 솔트스택 / 퍼핏
  • 절차적 코드를 사용하는 오픈 소스
    • 셰프 / 엔서블

불변 인프라

불변 인프라는 서버를 배포 한 후에는 수정하지 않는다는 패러다임으로, 서버는 끊임없이 수정되고 업데이트 된다는 가변 인프라와는 반대되는 패러다임입니다.

서버를 배포한 후에는 수정하지 않기 때문에 서버의 일관성, 신뢰성은 보장이 된다는 장점이 있는 반면에 수정을 하지 않기 때문에 간단한 업데이트가 있을 때에도 서버를 재구성하여 배포하기 때문에 시간이 오래 걸린다는 단점도 있습니다.

 

  • 불변 인프라를 사용하는 오픈 소스
    • 테라폼 / 클라우드 포메이션 / 히트
  • 가변 인프라를 사용하는 오픈 소스
    • 셰프 / 퍼핏 / 엔서블 / 솔트스택

참고URL

반응형