[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