본문 바로가기

DevOps/Terraform

[TF]Terraform 기초 및 설치

Infrastructure as Code(IaC)란?

- 직역하면 코드로서의 인프라이다.

- 코드를 통해 인프라 생성, 설정, 관리를 할 수 있는 방식

 

IaC의 장점

  • 비용 절감
  • 배포 속도 향상
  • 오류 감소
  • 인프라 일관성 향상
  • 구성 변동 제거

 

IaC 구현에 자동화 및 구성 관리 툴을 사용할 수 있다.

대표적으로 아래와 같은 툴이 있다.

  • Chef
  • Puppet
  • Terraform
  • Ansible
  • AWS CloudFormation

그 중에서 Terraform을 사용하여 AWS에서 어떻게 인프라를 코드로 구성하는지 공부할려고 한다.

 

 

Terraform이란?

  •  HashiCorp에서 만든 오픈소스 IaC툴
  • .tf 파일 형식 (HCL 기반)
  • UTF-8 사용
  • AWS, GCP, Azure 퍼블릭 클라우드 및 다양한 서비스 지원

 

🔍구성요소

  • provider : 생성 할 인프라의 종류
  • resource : 생성 할인프라 자원
  • state : 리소스의 상태
  • output : 생성된 자원의 변수 형태로 state에 저장
  • remote : 다른 경로의 state 참조

🔍기본명령어

  • init : 명령어 사용을 위해 각종 설정 진행, 테라폼 명령어 최초 실행할 때 수행
  • plan : 작성한 코드로 생성을 미리보기
  • apply : 코드 적용
  • import : 생성된 리소스를 state 파일로 옮김
  • state : state 파일을 사용할 때 사용 
  • destroy : 생성된 리소스 삭제
  • terraform state list : 생성된 리소스 리스트

  • init
테라폼의 다른 명령어들을 위한 설정을 진행, 내부적으로 provider와 state, module 설정 등을 위한 명령어

terraform init​
  • plan
작성한 테라폼 코드가 어떻게 생성될지 미리보기를 제공하는 명령어
terraform plan​
  • apply
작성한 테라폼 코드를 적용시켜 리소스를 생성하는 명령어
terraform apply​

 


Terraform 설치 

AWS에서 EC2 Instance를 통해 테라폼을 설치할 것이다.

 

EC2 Instance 사용환경은 아래와 같다.

OS EC2 Instance Type
ubuntu 20.04 t3.micro

 

프리티어 사용이 가능하면 t2.micro로 사용해도 된다.

 

1. 패키지 업데이트 및 HashiCorp 패키지 설치

sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl

2. HashiCorp Key 추가

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -

3. HashiCorp 공식 Repository 추가 

sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"

4. Terraform 설치

sudo apt-get update && sudo apt-get install terraform

편의성을 위한 세팅

리눅스에서 코드 및 편의성을 위해 추가로 세팅한게 있다.

vim 설치

sudo apt-get install vim

vim 기능 추가

vi ~/.vimrc

기능

set number    " line 표시
set ai    " auto indent
set si " smart indent
set cindent    " c style indent
set shiftwidth=4    " 자동 공백 채움 시 4칸
set tabstop=4    " tab을 4칸 공백으로
set ignorecase    " 검색 시 대소문자 무시
set hlsearch    " 검색 시 하이라이트
set nocompatible    " 방향키로 이동 가능
set fileencodings=utf-8,euc-kr    " 파일 저장 인코딩 : utf-8, euc-kr
set fencs=ucs-bom,utf-8,euc-kr    " 한글 파일은 euc-kr, 유니코드는 유니코드
set bs=indent,eol,start    " backspace 사용가능
set ruler    " 상태 표시줄에 커서 위치 표시
set title    " 제목 표시
set showmatch    " 다른 코딩 프로그램처럼 매칭되는 괄호 보여줌
set wmnu    " tab 을 눌렀을 때 자동완성 가능한 목록
syntax on    " 문법 하이라이트 on
filetype indent on    " 파일 종류에 따른 구문 강조
set mouse=a    " 커서 이동을 마우스로 가능하도록

 

alias 세팅

수정 - 마지막 라인에 alias tf=terraform 추가

vi /etc/bashrc

 

동기화

source /etc/bashrc

terraform 대신 tf라는 alias를 통해 명령어를 입력할 수 있다.

 

나는 윈도우에서 코딩을 할 때 Jetbrains 제품을 애용한다. 

요즘 파이썬을 쓰는 일이 많아 Pycharm에 terraform 플러그인을 추가하여 사용하였다.

terraform 플러그인을 설치하면 자동완성이 지원된다.

 

어디까지나 편의성을 위해 설치한 것이지 필수는 아니다.

 


참조

[1] https://www.redhat.com/ko/topics/automation/what-is-infrastructure-as-code-iac

[2] https://learn.hashicorp.com/tutorials/terraform/install-cli?in=terraform/aws-get-started

[3] https://gabii.tistory.com/entry/Ubuntu-vim-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95

'DevOps > Terraform' 카테고리의 다른 글

[TF]Terraform 조건문  (0) 2021.12.21
[TF]Terraform Count, Foreach  (0) 2021.12.19
[TF]Terraform Variable & Local & Output  (0) 2021.12.19
[TF] AWS Resource 생성  (0) 2021.12.19
[TF]HCL 기초문법  (0) 2021.12.19