terraform

테라폼 기초 튜토리얼

terraform

  • 테라폼은 하시코프에서 오픈소스로 개발중인 인프라스트럭처 관리 도구이다. 서비스 실행에 필요한 환경을 구축하는 도구라는 점에서 셰프나 앤서블 같은 설정 관리 도구와 더불어 프로비저닝 도구로 분류된다. 테라폼은 코드로서의 인프라스트럭처를 지향하고 있는 도구로서, GUI나 웹 콘솔을 사용해 서비스 실행에 필요한 리소스를 관리하는 대신 필요한 리소스들을 선언적인 코드로 작성해 관리할 수 있도록 해준다.

테라폼을 이용한 웹 애플리케이션 인프라스트럭처 프로비저닝

  • 간단한 웹 어플리케이션을 아마존 웹 서비스에 배포하는 상황을 가정하겠다. 이 애플리케이션은 EC2가상 머신과 RDS 데이터베이스를 사용한다. 테라폼으로 이 인프라스트럭처를 구축하려면 다음과 같은 단계를 거친다.
  • 1단계 - 먼저 아마존 웹 서비스 계정을 준비하고, API 키를 설정한다.
  • 2단계 스텝1 - 인프라스트럭처를 묘사하기 위해 사용하는 HCL언어로 필요한 리소스를 선언한다.
  • 2단계 스텝2 - 선언된 리소스들이 생성가능한지 계획(Plan)을 확인한다.
  • 2단계 스텝3 - 선언된 리소스들을 아마존 웹 서비스에 적용(Apply)한다.
  • 3단계 - 웹 애플리케이션을 배포한다.

테라폼의 기본 개념들

프로비저닝 (Provisioning)

어떤 프로세스나 서비스를 실행하기 위한 준비 단계를 프로비저닝이라고 이야기한다. 프로비저닝에는 크게 네트워크나 컴퓨팅 자원을 준비하는 작업과 준비된 컴퓨팅 자원에 사이트 패키지나 애플리케이션에 의존성을 준비하는 단계로 나뉘어진다. 명확한 경계는 불분명하지만 테라폼은 전자에 치우쳐있는 도구라고 할 수 있다.

프로바이더 (Provider)

테라폼과 외부 서비스를 연결해주는 기능을 하는 모듈이다. 예를 들면 테라폼으로 AWS 서비스의 컴퓨팅 자원을 생성하기 위해서는 aws 프로바이더를 먼저 셋업해야한다. 프로바이더로는 AWS, 구글 클라우드 플랫폼, 마이크로소프트 애저와 같은 범용 클라우드 서비스를 비롯해 깃허브, 데이터도그, DNSimple과 같은 특정 기능을 제공하는 서비스, MySQL, 레빗MQ, 도커와 같은 로컬 서비스를 지원한다.

리소스 (자원 Resource)

리소스란 특정 프로바이더가 제공해주는 조작 가능한 대상의 최소 단위이다. 예를 들어 AWS 프로바이더는 aws_instance 리소스 타입을 제공하고, 이 리소스 타입을 사용해 Amazon EC2의 가상 머신 리소스를 선언하고 조작하는 것이 가능하다. EC2 인스턴스, 시큐리티 그룹, 키 페어 모두 aws 프로바이더가 제공해주는 리소스 타입이다.

HCL (Hashicorp Configuration Language)

HCL은 테라폼에서 사용하는 설정 언어이다. 테라폼에서 모든 설정과 리소스 선언은 HCL을 사용해 이루어진다. 테라폼에서 HCL파일의 확장자는 .tf를 사용한다.

계획 (Plan)

테라폼 프로젝트 디렉터리 아래의 모든 .tf 파일의 내용을 실제로 적용 가능한지 확인하는 작업을 계획이라고 한다. 테라폼은 이를 terraform plan 명령어로 제공하며, 이 명령어를 실행하면 어떤 리소스가 생성되고, 수정되고, 파괴될지 계획을 보여준다.

적용 (Apply)

테라폼 프로젝트 디렉터리 아래의 모든 .tf 파일의 내용대로 리소스를 생성, 수정, 파괴하는 일을 적용이라고 한다. 테라폼은 이를 terraform apply 명령어로 제공한다. 이 명령어를 실행하기 전에 변경 예정 사항은 plan 명령어를 사용해 확인할 수 있다.

Share