# iac란?

클라우드 상에 인프라를 구축할 때, 수동으로 명령어를 계속 입력해서 할 경우, 인적 오류의 가능성이 높아진다.

그렇기 때문에, 코드로써 인프라 구축을 대신하는 방식을 iac라고 한다.

가상 머신 여러 대에 직접, 웹서버 아파치 설치 또는 DBMS 설치 등 수동으로 그런 작업을 반복해야 한다면 엄청난 고역이다.

이미지를 만들고, 그 이미지로부터 VM을 만들고, VM 위에 소프트웨어를 설치하고 세팅하는 이런 작업들을 프로그램적으로, 그러니까 코드를 이용해서 자동화할 수 있다면 이런 수고를 덜 수 있을 것이다. 

이런 걸 Infrastructure as Code, 줄여서 IaC라 부른다.

자동화에 의한 비용 효율성 증대 이외에도 중요한 장점이 하나 더 있는데, 인프라가 코드라는 형태로 기록되므로 각종 설정 정보들을 기록으로 확인 및 수정이 가능하고, git같은 코드 저장소를 이용해 관리할 수도 있어 유지보수 측면에서 이점을 가진다.


# 지원 Tool

1. 클라우드 서비스에서 제공하는 개발자 도구, API

위의 사례를 읽어보고 일단 딱 드는 생각은, "콘솔 말고 API로 VM 만들 수 있게 프로그램 짜면 되지 않냐" 라는 것이다.


맞는 말이고 가장 기본적인 IaC 구현 방법이라 할 수 있다. 하지만 일반적으로 IaC라고 하면 이것보다는 조금 더 간편하고 레벨이 높은 다른 툴들을 이용하는 걸 지칭한다. IaC에 대해서 찾아보면서 이런 걸 IaC라고 부르는 글은 본 적이 없다... 그래도 넓은 의미로는 어쨌든 프로그램적으로 인프라를 생성하고 변경하는 방법이니 IaC가 맞긴 맞다. 


여러 클라우드 서비스의 API를 묶어놓은 라이브러리로 libcloud라는게 있는데 이게 유용하게 쓰일 수 있다. 


2. 이미지 빌드도구

말 그대로 이미지를 만들어주는 도구다. 


가상 머신을 만들기 위해서는 최소한 OS에 대한 정보는 담겨 있는 이미지 파일이 필요하기 때문이다.


코드를 통해 OS는 어떤 종류고 이미지 이름은 무엇이고 클라우드를 이용한다면 어떤 클라우드 위에 올릴 것이고 이런 것들을 정의

대표적으로 Packer라는 툴이 있고, 일반적인 (하이퍼바이저 기반) VM 말고 컨테이너 환경이라면 Docker가 유명


# 실제 적용 사례

 Google Kubernetes Engine (GKE) cluster

< 사전 준비 사항 >

- A Google Cloud Platform (GCP) account

- Create a Google Cloud project

- A local install of the Google Cloud SDK CLI

- A local install of the Terraform CLI

- Create a Terraform Cloud account

- Create a new Terraform Cloud organization

- Create 2 new Terraform Cloud workspaces named iac_gke_cluster and iac_kubernetes_app and choose the "No VCS connection" option

- Enable local execution mode in both the iac_gke_cluster and iac_kubernetes_app workspaces

- Create a new Terraform API token

- A local install of the Docker client

- A Docker Hub account

- Git clone the Learn infrastructure as code repo from GitHub

- A CircleCI account


providers.tf, variable.tf, main.tf 등 작성

teraform 명령어를 통해 쿠버네이터 클러스터를 GCP에 배포? 

자동으로 container를 생성해주고, 인프라를 구축해준다고 생각하면 될 듯??

'[DEV] Developer 회고' 카테고리의 다른 글

gRPC란?  (0) 2020.11.23
Consul이란?  (0) 2020.11.23
[CI도구]CircleCi란?  (0) 2020.11.23
DDD(Domain Driven Development)란?  (0) 2020.11.19
Event Sourcing의 개념  (0) 2020.11.19
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기