기존 클라우드 인프라 구축방식
- 관리 콘솔에서 클릭해 성생
- CLI를 활용해 명령어로 생성한다.
기존 클라우드 인프라 구축 방식의 문제점
- 수작업을 통한 인프라 구축으로 사용자의 실수 가능성이 높고 오래 걸림
- 인프라 구축 시 네트워크 구성, 서버 사양 선택 등 동일한 반복 작업 수행 필요
- 현재 사용 중인 인프라 리소스에 대해 파악이 어려움
- 계정의 공유로 누가 인프라를 변경하였는지 추적이 어려움
기존 방식의 문제점 해결을 위해 IaC 탄생
IaC 란?
코드형 인프라(Infrastructure as Code, IaC)는 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝하는 것을 말합니다.
인프라를 코드를 관리하고 프로비저닝하면 어떤 점이 좋을까?
1. 비용 절감
필요할 때 준비 된 코드로 프로비저닝 하고 불필요할 때 삭제 함으로써 클라우드 리소스 사용을 줄일 수 있습니다.
2. 배포 속도 향상
인프라를 준비하는 동안 애플리케이션 배포를 보류할 필요 없으며, 관리 콘솔을 통해 수작업을 하지 않아도 됩니다.
3. 오류 감소
코드를 바탕으로 인프라의 생성 순서를 자동으로 결정하고 생성된 리소스를 참조 가능하여 잘 못된 리소스 참조하는 오류를 줄일 수 있습니다.
4. 인프라 일관성 향상
표준화 된 포맷으로 작성 되어 배포한 인프라와 구성방법을 누구나 알 수 있습니다.
5. 구성 변동 제거
동일한 코드는 동일한 환경을 생성하므로 개발/테스트/운영 동일한 구성을 가질 수 있습니다.
널리 사용되는 IaC 도구
종류 | 동작 방식 | 코드 언어 | |
Chef | 설정 관리 | 선언형/명령형 | Recipes(DSL:Ruby기반) |
Puppet | 설정 관리 | 선언형 | Manifest(DSL) |
Ansible | 설정 관리 | 선언형/명령형 | Playbook(YAML,JSON) |
CloudFormation | 인프라 프로비저닝 | 선언형 | JSON/YAML |
Terraform | 인프라 프로비저닝 | 선언형 | HCL/JSON |
HCL: HashiCorp Configuration Language
인프라 프로비저닝 도구는 주로 인프라 구성에 적합하고, 설정 관리용 도구는 인프라 내의 서버 구성에 주로 사용 됩니다.
따라서 클라우드 인프라 구축 시에는 대개 테라폼이나 클라우드 포메이션을 활용해 인프라를 생성 후, 앤서블이나 쉐프, 퍼펫 등을 활용해 개발이나 운영에 필요한 설정을 진행 합니다.
IaC의 동작 방식
위의 표에서 설명한 대로 IaC 동작방식은 선언형과 명령형이 있습니다.
- 선언형 : 필요한 리소스와 원하는 상태를 정의하면 IaC 도구가 원하는 상태로 구성해 줍니다.
- 명령형 : 리소스와 상태를 위한 명령을 정의하고, 정의 된 명령을 통해 원하는 상태를 구성합니다.
명령형은 인프라 구성을 위해 순차적으로 명령을 내려야 하며, 선언형은 인프라가 정의된 문서를 바탕으로 IaC 도구가 정의 된 상태로 프로비저닝 하는 방식입니다.
명령형은 명령어에 대한 이해 및 순서를 사용자가 정확이 알아야 합니다. 선언형은 현재 상태를 유지하며, 코드를 바탕으로 구성 변경 유무를 도구가 자동으로 결정합니다. 따라서 멱등성이 있습니다.
멱등성(idempotent) : 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미합니다. 위의 경우는 여러번 코드를 실행하여도 결과가 변경되지 않는 것을 의미 합니다.