상세 컨텐츠

본문 제목

[테라폼/Terraform]왜 테라폼을 사용해야 하는가? 1-1

Development/테라폼

by J-Developer 2022. 5. 29. 20:46

본문

반응형

회사에서 테라폼 스터디를 진행하였습니다.

테라폼을 사용하면 인프라 버전 관리가 잘 될 것 같다고 판단을 하였고 회사에서 '테라폼 업앤러닝' 책을 구매하여 매주 한 명씩 돌아가며 공부한 내용을 발표하기로 하였습니다.

그렇게 공부하면서 개인적으로 필기한 내용을 남겨볼까 합니다.

 

테라폼 업앤러닝

 

1. 데브 옵스의 등장

  • 최대한 자동화를 하여 실수를 줄이고 효율적으로 운영하자.

 


2. 코드형 인프라(Infrastructure as Code, IaC)란?

코드를 작성 및 실행하여 인프라를 생성, 배포, 수정, 정리하는 것을 말합니다.

실제로 데브옵스의 핵심은 서버, 데이터베이스, 네트워크, 로그파일, 애플리케이션 구성, 문서, 자동화된 테스트, 배포 프로세스 등 거의 모든 것을 코드로 관리할 수 있습니다.

 

코드형 인프라 도구에는 다섯 가지 범주가 있습니다.

 

- 애드혹 스크립트

자동화 하는 가장 간단한 방법

 

▶ start-webserver.sh 배시 스크립트 예시

# apt-get 캐시를 업데이트
sudo apt-get update

# php와 아파치 설치
sudo apt-get install -y php apache2

# 깃 리포지터리에서 코드를 다운로드
sudo git clone https://github.com/xxxx/xxxxx.git /var/www/html/app

# 아파치 웹 서버 시작
sudo service apache2 start

 

위의 예제와 같이 해당 코드를 직접 작성하여 수동으로 실행하면 됩니다.

범용 프로그래밍 언어를 사용하면 사용자가 매번 수동으로 맞춤 코드를 작성해야 하지만, 코드형 인프라를 사용한다면 간결한 API로 수행할 수 있습니다.

애드훅 스크립트는 소규모 일회성 작업에는 적합하지만, 모든 인프라를 코드로 관리하려면 작업 목적에 맞게 설계된 코드형 인프라 도구를 사용해야 합니다.

 

 

- 구성 관리 도구

셰프, 퍼핏, 앤서블, 솔트스택 등은 모두 구성 관리 도구로써 대상 서버에 소프트웨어를 설치하고 관리하도록 설계되어 있습니다.

 

▶앤서블 예시

- name: Update the apt-get cache
  apt:
    update_cache: yes
        
- name: Install PHP
  apt:
    name: php
    
- name: Install Apache
  apt:
    name: apache2
    
- name: Copy the code from the repository
  git: repo=https://github.com/xxx/xxxx.git dest=/var/www/html/app
  
- name: Start Apache
  service: name=apache2 state=started enabled=yes

 

▶ 장점

  • 코딩 규칙
    : 일관되고 예측 가능한 구조를 제공
  • 멱등성
    : 실행 횟수에 관계 없이 늘 올바르게 동작을 하는 멱등성을 가지고 있습니다.
    예를 들어, 앤서블 롤은 설정 파일(web-server.yml)을 사용하여 아파치가 설치되지 않았을 경우에만 설치하고 아파치 웹 서버가 동작하지 않는 경우에는 동작하도록 합니다.
  • 분산형 구조
    : 앤서블에 5개의 서버를 병렬로 구성하도록 지시 혹은 플레이북에 serial이라는 매개 변수를 설정하여 롤링 배포를 수행함으로써 서버를 일괄 업데이트를 할 수 있습니다.
  • 서버 템플릿 도구
    : 구성 관리 도그의 대안으로 최근에 도커, 패커, 베이그런트와 같은 서버 템플릿 도구 도 인기가 높아지고 있습니다.
    서버 템플릿 도구는 운영 체제, 소프트웨어, 파일 및 기타 필요한 모든 내용을 포함하 고 있는 ‘스냅숏(snapshot)’으로 이미지를 생성합니다.
  • 가상 머신
    : 가상 머신은 하드웨어를 포함한 전체 컴퓨터 시스템을 에뮬레이트합니다.
    호스트 시스템 및 다른 가상 머신 이미지와는 완전히 분리되어 개인 컴퓨터, 실제 운영 환경 등 모든 환경에서 정확히 동일한 방식으로 실행됩니다.
    단점은 모든 하드웨어를 가상화하고 다른 VM과도 완전히 분리했기 때문에 VM마다 별도의 CPU, 메모리, 리소스가 할당되는 오버헤드가 발생할 수 있습니다.
  • 컨테이너
    : 컨테이너는 OS의 사용자 공간을 에뮬레이트 합니다.
    호스트 시스템 및 다른 컨테이너와는 격리되어 개인 컴퓨터, 실제 운영 환경 등 모든 환경에서 정확히 동일하게 실행된다는 것이 장점입니다.
    단점은 단일 서버에서 실행되는 모든 컨테이너가 해당 서버의 OS 커널과 하드웨어를 공유하므로 VM을 사용하는 것만큼의 격리 및 보안 수준을 달성하기가 훨씬 어려울 수 있다는 것입니다.
    그러나 커널과 하드웨어가 공유되므로 밀리세컨드 단위로 부팅할 수 있으며, CPU 또는 메모리에 대한 오버헤드가 거의 없습니다.

 

서버 템플릿 도구들은 각각의 목적이 약간씩 다릅니다.

  • 패커 : AWS 계정에서 실행하는 AMI처럼 프로덕션 서버에서 직접 실행하는 이미지를 생성하는데 사용됩니다.
  • 베이그런트 : 일반적으로 MacOS나 Windows 랩톱에서 실행되는 버추얼박스 이미지와 같이 개발 컴퓨터에서 실행되는 이미지를 만드는 데 사용됩니다.
  • 도커 : 도커 엔진을 통해 이미지를 구성한 경우, 운영 환경에서나 개발 컴퓨터에서나 동일하게 실행할 수 있습니다.

 

- 오케스트레이션 도구

오케스트레이션 도구의 간략한 역할

  • VM과 컨테이너를 하드웨어에 효율적으로 배포하기
  • 롤링 배포, 블루-그린 배포, 카나리 배포 전략을 사용하여 기존의 VM이나 컨테이너를 효율적으로 업데이트하거나 롤백하기
  • VM과 컨테이너의 상태를 모니터링하고 비정상적인 부분을 자동으로 대체하기(자동 복구)
  • 발생하는 트래픽에 따라 VM과 컨테이너의 수를 늘리거나 줄이기(자동 확장)
  • VM과 컨테이너의 트래픽을 분산하기(로드 밸런싱)
  • 서로 다른 네트워크에 있더라도 VM과 컨테이너가 서로 식별하고 통신할 수 있게 하기(서비스 검색)

위와 같은 작업을 처리하기 위해 쿠버네티스, 마라톤/메소스, 아마존 엘라스틱 컨테이너 서비스, 도커 스웜, 노마드 같은 오케스트레이션 도구가 필요합니다.

 

 

- 프로비전 도구

구성 관리, 서버 템플릿, 오케스트레이션 도구가 각 서버에서 실행되는 코드를 정의한다면 테라폼, 클라우드포메이션, 오픈스택 히트와 같은 프로비전 도구는 서버 자체를 생성합니다.

데이터 베이스, 캐시, 로드 밸런서, 큐, 모니터링, 서브넷 구성, 방화벽 설정, 라우팅 규칙 설정, SSL 인증서 등 인프라에 관련하여 모든 부분을 프로비저닝할 수 있습니다.

 

테라폼 예시 이미지

 

 

참조 : https://book.naver.com/bookdb/book_detail.naver?bid=20489970 
 

테라폼 업앤러닝

이 책은 예제 소개를 뛰어넘어 실제 환경에서 테라폼을 사용하는 방법에 중점을 두고 만들어졌다. 외국어에 능통해지려면 원어민과 대화하고, 외국어 TV 쇼를 보고, 외국 음악을 듣는데 시간을

book.naver.com

 

반응형

관련글 더보기

댓글 영역