Infrastructure as Code 코드형 인프라 란 코드를 작성 및 실행하여 인프라를 생성,배포,수정,정리하는 것을 말합니다.
데브옵스의 핵심은 서버,데이터베이스,네트워크,로그 파일, 애플리케이션 구성,문서,자동화된 테스트, 배포 프로세스등 거의 모든 것을 코드로 관리할 수 있다는 것입니다.
IaC 도구의 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이나 컨테이너를 생성하기에 더없이 좋은 도구입니다. 하지만 이를 어떻게 관리하는가도 중요한 문제이니다. 실제 사용 환경에서는 다음을 수행할 방법이 필요합니다.
위 작업을 처리하기 위해 쿠버네티스,마라톤/메소스,아마존 엘라스틱 컨테이너 서비스,도커 스웜, 그리고 노마드 같은 오케스트레이션 도구가 필요합니다.
구성관리,서버 템플릿 및 오케스트레이션 도구가 각 서버에서 실행되는 코드를 정의한다면, 테라폼, 클라우드포메이션,오픈스택 히트와 같은 프로비전 도구는 서버 자체를 생성합니다.
사실상 프로비전 도구를 사용하면 서버만 생성하는 것이 아니라 DB,캐시,코드 밸런서,큐,모니터링,서브넷 구성,방화벽 설정,라우팅 규칙 설정,SSL 인증서 등 인프라에 관한 거의 모든 부분을 프로비저닝할 수 있습니다.
Terraform Up & Running 테라폼 Writing Infrastructure as code 업앤 러닝 - 예브게닝 브릭만