[Terraform] IaC 코드형 인프라

박원균·2021년 10월 16일
0

Terraform

목록 보기
3/11
post-thumbnail

코드형 인프라 IaC

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

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

IaC 도구의 5가지 범주

  1. 애드훅 스크립트
  2. 구성 관리 도구
  3. 서버 템플릿 도구
  4. 오케스트레이션 도구
  5. 프로비전 도구

애드훅 스크립트

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

수행할 작업을 단계별로 나누고 배시,루비,파이썬 등 선호하는 언어를 사용하여 각 단계를 코드로 정의하고 작성된 스크립트를 서버에서 수동으로 실행하는것 입니다.

애드 훅의 예 )
aws ec2 insatnce 만들때 사용하는 유저 데이터

#!/bin/bash
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install -y yum-utils
.
.
.
cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
sed -i 's/database_name_here/wordpress1/g' /var/www/html/wp-config.php
sed -i 's/username_here/root/g' /var/www/html/wp-config.php

단점

코드를 직접 작성하여 수동으로 작업해야 합니다. 범용 프로그래밍 언어를 사용하면 사용자가 매번 수동으로 맞춤 코드를 작성해야 합니다. 하지만 코드형 인프라를 위해 특수 제작된 도구를 사용하면 간결한 API로 수행할 수 있습니다.

구성 관리 도구

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

코딩 규칙

앤서블은 문서화,파일 에이아웃, 명확하게 이름 붙여진 매개 변수 ,시크릿 관리 등을 포함하는 일관되고 예츨 가능한 구조를 제공합니다. 개발자마다 다양한 방식으로 애드훅 스크립트를 작성할 수 있지만 이러한 구성 관리 도구에는 코딩규칙이 포함되어있어 코드를 쉽게 탐색 할 수 있게 해줍니다.

멱등성

실행 횟수에 관계없이 올바르게 동작하는 코드를 '멱등성을 가진 코드(idemprotent code)'라고 합니다.

분산형 구조

애드훅 스크립트는 단일 로컬 머신에서만 실행되도록 설계되었습니다 반면 엔서블과 같은 구성 관리 도구는 원격의 수많은 서버를 관리하기 위해 특별히 설계된 것입니다.

서버 템플릿 도구

구서 관리 도구의 대안으로 최근에 도커,패커,베이그런트 와 같은 서버 템플릿 도구가 존재합니다.
여러 서버를 시작하고 각각 동일한 코드를 실행하여 서버를 구성하는 기존 방식과 다르게, 서버 템플릿 도구는 운영 체제, 소프트웨어, 파일 및 기타 필요한 모든 내용을 포함하고 있는 '스냅샷'으로 이미지를 생성합니다. 그런다음 앤서블과 같은 코드형 인프라 도구를 사용하여 모든 서버에 이미지를 설치할 수 있습니다.

가상머신

가상머신은 하드웨어를 포함한 전체 컴퓨터 시스템을 에뮬레이트합니다. VM웨어,버추얼박스,또는 패러렐즈와 같은 하이퍼바이저를 사용하여 CPU,메모리,하드 드라이브,네트워크를 가상화합니다.

컨테이너

OS의 사용자 공간을 에뮬레이트합니다. 도커,코어OS의 rkt또는 크라이오와 같은 컨테이너 엔진을 실행하여 격리된 프로세스,메모리,마운트 지점, 네트워킹을 만듭니다.

컨테이너 엔진에서 실행되는 컨테이너는 그 자체의 사용자 공간만 볼 수 있습니다. 호스트 시스템 및 다른 컨테이너와는 격리되어 개인 컴퓨터,QA 서버,실제 운영 환경 등 모든 환경에서 정확히 동일하게 실행된다는 것이 장점입니다.

단점은 단일 서버에서 실행되는 모든 컨테이너가 해당서버의 OS 커털과 하드웨어를 공유하므로 VM을 사용하는 것만큼의 격리 및보안 수준을 달성하기가 훨씬 어렵다는 것입니다.

오케스트레이션 도구

서버 템플릿 도구는 VM이나 컨테이너를 생성하기에 더없이 좋은 도구입니다. 하지만 이를 어떻게 관리하는가도 중요한 문제이니다. 실제 사용 환경에서는 다음을 수행할 방법이 필요합니다.

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

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

프로비전 도구

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

사실상 프로비전 도구를 사용하면 서버만 생성하는 것이 아니라 DB,캐시,코드 밸런서,큐,모니터링,서브넷 구성,방화벽 설정,라우팅 규칙 설정,SSL 인증서 등 인프라에 관한 거의 모든 부분을 프로비저닝할 수 있습니다.

코드형 인프라의 장점

  • 자급식 배포(Self-service)
    인프라를 코드로 정의하면 전체 배포 프로세스를 자동화할 수 있으며 개발자는 필요할 때마다 자체적으로 배포를 진행할 수 있습니다.
  • 속도와 안정성
    자동화된 프로세스는 일관되고 반복 가능하며 수동으로 진행했을 때보다 오류가 적게 발새하기 때문에 더 안전합니다.
  • 문서화
    누구나 읽을 수 있는 소스 파일로 인프라 상태를 나타낼 수 있습니다.
    코드형 인프라는 문서 역할을 하여 시스템 관리자가 휴가 중일 때도 조직의 모든 사람이 인프라 구졸르 이해하고 업무를 볼수 잇또록 해줍니다.
  • 버전 관리
    인프라의 변경 내용이 모두 기록된 코드형 인프라 소스 파일을 저장할 수 있으므로 버전을 쉽게 관리할 수 있습니다. 인프라 변경 내역이 남아 있기 때문에 시스템에 문제가 생겼을 때 문제가 발생한 지점을 찾기가 수월합니다. 문제의 내용을 확인한 다음 문제가 없던 이전 코드로 다시 되돌리면 문제가 해결됩니다. 이는 디버깅을 돕는 강력한 도구입니다.
  • 유효성 검증
    인프라 상태가 코드로 정의되어 있으면 코드가 변경될 때마다 검증을 수행하고 일련의 자동화된 테스트를 실행할 수 있으며, 정적 분석 프로그램에 코드를 정달하여 오류 발생 위험을 줄일 수 있습니다.
  • 재사용성
    인프라를 재사용 가능한 모듈로 패키징할 수 있으므로 모든 제품을 매번 처음부터 배포하는 대신 문서화되고 검증된 모듈로 일관되게 배포할 수있 습니다.

출처

Terraform Up & Running 테라폼 Writing Infrastructure as code 업앤 러닝 - 예브게닝 브릭만

profile
함바라기

0개의 댓글

관련 채용 정보