[Terraform] 테라폼Terraform 기초 튜토리얼

[Terraform] 기초 튜토리얼

테라폼Terraform

AWS와 테라폼으로 구현하는 Infrastructure as Code

1. 들어가며: Infrastructure as Code 도구

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

이 글에서는 테라폼의 기본적인 개념들을 소개하고, 테라폼으로 아마존 웹 서비스Amazon Web Serivce(이하 AWS)에서 간단한 웹 애플리케이션을 배포하기 위한 인프라스트럭처를 프로비저닝해보겠습니다.

2. 테라폼 설치

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

간단한 웹 애플리케이션을 아마존 웹 서비스에 배포하는 상황을 가정하겠습니다. 이 애플리케이션은 EC2 가상 머신과 RDS 데이터베이스를 사용합니다. 테라폼으로 이 인프라스트럭처를 구축하려면 다음과 같은 단계를 거칩니다.

  • 1단계 – 먼저 아마존 웹 서비스 계정을 준비하고, API 키를 설정합니다.
  • 2단계 스텝 1 – 인프라스트럭처를 묘사하기 위해 사용하는 HCL 언어로 필요한 리소스를 선언합니다.
  • 2단계 스텝 2 – 선언된 리소스들이 생성가능한지 계획(Plan)을 확인합니다.
  • 2단계 스텝 3 – 선언된 리소스들을 아마존 웹 서비스에 적용(Apply)합니다.
  • 3단계 – 웹 애플리케이션을 배포합니다.

1단계는 미리 준비되어있다면 건너뛰어도 무방합니다. 2단계는 생성하고자 하는 리소스 수 만큼 반복하면서 점진적으로 진행합니다. 반복해나갈 때마다 테라폼 정의 파일을 조금씩 완성시켜 나갑니다. 3단계는 준비된 인프라스트럭처에 웹 애플리케이션을 배포하는 단계입니다. 여기서는 인프라스트럭처를 프로비저닝하는 2단계까지 진행해나갑니다.

4. 테라폼의 기본 개념들

이 글에서 다룰 테라폼의 기본 개념들입니다. 각 개념들에 대해서는 튜토리얼을 진행해나가면서 자세히 설명합니다.

5. 프로바이더 작업

vi provider.tf

6. 테라폼 프로젝트 초기화

현재 사용하는 버전이 0.10보다 낮다면 테라폼 프로젝트를 별도로 초기화하지 않아도 됩니다. 0.10 이전에는 테라폼 본체에 프로바이더들이 포함되어 있었지만 0.10부터 프로바이더가 플러그인으로 분리되었고, 이에 따라서 테라폼 프로젝트를 별도로 초기화할 필요가 있어졌습니다. 테라폼은 테라폼 프로젝트를 초기화할 때 프로바이더 설정을 보고 필요한 플러그인을 설치합니다.

web_infra 디렉터리에서 terraform init 명령어를 실행합니다.

테라폼이 현재 디렉터리에 아래에 선언된 프로바이더 플러그인을 설치해줍니다.

  1. 키페어 생성

  2. SG생성

  3. ami를 이용한 인스턴스 생성


테라폼init화면

​ [Apply 시에 나타나는 문구]


테라폼실제생성화면

​ [실제 생성된 이미지]

7. 마치며 : 테라폼을 사용하는 이유

여기까지 테라폼으로 AWS 리소스들을 정의하고 프로비저닝하는 방법에 대해서 알아보았습니다. 웹 콘솔을 사용해 리소스를 관리하는 것과는 많이 다릅니다. 여기서는 정말 간단한 사례를 구현해보았지만, 그럼에도 불구하고 간단해보이지는 않습니다. 프로젝트에서 테라폼을 사용해보면 매번 리소스 레퍼런스를 확인하고, 웹 콘솔과 비교해보는 과정을 계속해서 반복해야합니다. 어떤 면에서는 웹 콘솔보다 오히려 어렵고 귀찮습니다. 그렇다면 테라폼을 사용할 필요가 있을까요.

이 글에서는 테라폼의 사용법을 소개하는 데 집중해서 자세히는 다루지 않았지만, 테라폼을 사용하면 좋은 점들이 있습니다. 먼저 웹 콘솔을 사용해 리소스들을 관리하면서 차츰 리소스가 많아지면, 어느 지점에는 더 이상 전체를 관리할 수 없는 순간이 오게 됩니다. 언제 왜 만들었는지 알 수 없는 리소스들도 점점 쌓여나갑니다. 테라폼을 사용하면 프로비저닝하고자 하는 상태를 코드로 명확히 기록해두기 때문에 웹 콘솔만 사용할 때보다 세심한 관리가 가능해집니다.

또한 테라폼은 코드로서의 인프라스터럭처Infrastructure as Code를 지향하는 도구로서, 코드를 작성할 때 누리던 생태계의 이점을 그대로 이용할 수 있습니다. 저장소에서 이력 추적을 할 수도 있고, 깃허브Github에서 팀원들과 코드 리뷰를 진행할 수도 있습니다. 이 과정에서 누가 어떤 리소스를 왜 추가했는지, 투명성은 자동적으로 얻어집니다. 좀 더 잘 활용한다면 CI를 사용해 코드 리뷰가 된 사항을 자동적으로 플랜 및 적용하는 것도 가능합니다.

마지막으로, 테스트나 연습으로 만든 리소스들은 삭제하는 걸 잊지 마시기 바랍니다.

https://blog.wonizz.tk

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다