Search
Duplicate
📒

[Terraform] 02-1. 테라폼 기본개념

상태
완료
수업
Terraform
주제
기본개념
4 more properties
참고

Iac와 테라폼

NOTE
IaC(Infrastrcture as Code)는 영문 그대로 ‘코드로서의 인프라’이며. 동작하는 방식을 모두 코드로 관리하는것을 의미한다!
인프라 운영이 물리적인 자체 데이터 센터같은 온프레미스에서 클라우드 환경에 이르기까지 형태가 변화하면서 운영하는 방식도 지속적으로 바뀌어 왔다. 이러한 노력은 다음과 같이 단계별로 표현이 가능하다.
1.
메뉴얼
직접 글로 작성해서 구성방식을 정리한다.
변경사항 반영이 어렵고, 실행을 위해 작업이 필요하다.
ex) 문서, 엑셀시트
2.
스크립트
반복되는 작업을 자동화한다.
순차적으로만 실행되고 시간이 지나면서 최종상태와 일치하지 않을 수 있다.
3.
가상머신
미리 구성된 템플릿을 사용하여 관리와 확장을 도모한다.
가상화 범위 외적인 요소는 자동화가 불가능하고 하이퍼바이저에 의존적이다.
4.
클라우드 인프라
API를 통해 더 많은 인프라를 가상화하고 자동화 도구를 제공한다.
클라우드 제공자마다 서로 상이한 API가 제공되어 개별적 작업이 필요하다.
5.
컨테이너
상호 호환되는 컨테이너 런타임을 통해 서비스 배포 자동화 및 높은 이동성을 가진다.
앱 배포 자동화를 위한 추가적인 레이어의 관리가 필요하다.

IaC의 장점

NOTE
코드로 인프라를 관리한다는 것은 자유롭게 변경하고 환경을 이해하고 반복적으로 동일한 상황으로 만들 수 있다는 점이다.
IaC의 장점은 좋은 코드의 특징을 그대로 인프라에 적용할 수 있다는것이다.
잘 작동하며 테스트가 가능하다.
읽기 쉬우며, 간결하다.
변경 및 관리가 쉬우며, 모듈화되어 있다.
테스트 가능하다
테라폼은 하시코프사에서 공개한 IaC의 도구이며 terraform apply와 같은 명령으로 구현된 동작으로 만들어진 코드를 실행하고 배포하는 방식을 취한다.
테라폼 코어와 프로바이더 호출관계
테라폼 자체만으로는 다양한 인프라와 서비스를 프로비저닝 할 수 없기 때문에 프로바이더가 둘 사이에서 인터페이싱한다.

테라폼의 사용 목적과 과제

NOTE
테라폼은 인프라와 서비스의 일관된 관리 및 자동화와 더불어 다음과 같은 기대효과가 있다!
워크플로
인프라와 서비스 구성 및 변경 작업인 프로비저닝을 위해 체계화된 워크플로를 제공한다.
GUI, CLI를 통해 수행되는 경우 일관된 결과를 기대하기 어려웠다.
자산화
테라폼을 통해 프로비저닝 작업의 일관성을 보장하고, 프로비저닝 코드를 자산화 할 수 있다.
표준화
작성된 코드는 조직 내부의 표준화를 거쳐, 모듈화되어 재사용이 쉽게 가능해진다.
프로비저닝 자동화
기존 인프라의 변경과 업데이트를 코드 워크플로우 도구(Git, CI/CD, Jira)와 통합이 가능하다.
인프라 변경은 자주 발생한다.
자원 효율과 사용 요구사항에 따라 인프라는 더 다양한 목적에 맞는 서비스로 분화하고 있다.
과거에는 유지보수를 위해 단일 OS에서 동작했지만, 지금의 경우 요구에 맞는 서비스를 활용하는데 더 가치를 두고 있다.

Terraform 개념 소개

Proviers

NOTE
프로바이더는 테라폼이 특정 서비스(예: AWS, Azure, Google Cloud, VMware 등)와 통신할 수 있도록 해주는 플러그인이다!
AWS/GCP (IaaS 클라우드), 오픈스택/Vmware(프라이빗 Iaas), DataDog/Github(Saas),…
테라폼 공식 레지스트리 사이트를 들어가면 원하는 프로바이더를 선택하고, 해당 버전을 사용하는 샘플코드를 볼 수 있다.

Workflow

NOTE
테라폼의 기본 워크플로우는 인프라를 안전하고 효율적으로 배포/변경/관리 하기위해 설계되었으며 초기화(init), 코딩(write), 계획(plan), 적용(apply), 검토(destroy), 상태관리(.tfstate)로 이루어진다!
테라폼 흐름도
# 테라폼의 프로바이더, 모듈 드으이 지정된 버전에 맞춰 루트모듈 구성 terraform init terraform init -upgrade # 의도적으로 버전을 변경하거나, 다른 버전실행시 사용 # 파일 유효성 검사 terraform validate # 실행 계획 생성(plan) & 실행(apply) terraform plan terraform apply # 1 added terraform plan -out=tfplan # plan값 파일로 내보냄 terraform apply tfplan # 이미 만들어졌으므로 0 added로 나옴 # fmt - format의 줄임표시, 코드 스타일을 모두 맞춰줌 terraform fmt
Bash
복사
테라폼 코드
Terrform init
지정한 backend에 상태 저장을 위한 .tfstate파일을 생성한다. (가장 마지막에 적용한 테라폼 내역이 저장됨)
init 작업을 완료하면 local에는 .tfstate에 정의된 내용을 담은 .terraform파일이 생성된다.
기존에 다른 개발자가 이미 .tfstate에 인프라를 정의해둔게 있다면, 다른 개발자는 init작업을 통해 local에 sync를 맞출 수 있다.
Terraform plan
정의한 코드가 어떤 인프라를 만들게 되는지 미리 예측 결과를 보여준다.
plan을 한 내뇽에 에러가 없더라도, 실제 적용시 문제가 생길 수 있다.
Plan 명령어는 어떠한 변화도 주지 않는다.
Terraform apply
실제로 인프라를 배포하기 위한 명령어
apply를 완료하면 AWS 상에 실제로 해당 인프라가 생성되고 작업 결과가 backend의 .tfstate파일에 저장된다.
해당 결과는 local의 .terraform 파일에도 저장된다.
Terraform import
AWS 인프라에 배포된 리소스를 terraform state로 옮겨주는 작업을 한다.
이는 local의 .terraform에 해당 리소스의 상태 정보를 저장해주는 역할을 한다. (코드 생성X)
import 이후에 plan을 하면 코드가 없기 떄문에 리소스가 삭제 또는 변경된다고 알려준다.
이를 바탕으로 코드를 작성