Ansible 이란
- Python으로 구현된 오픈소스로, 서버의 프로비저닝, SW 배포 등의 자동화를 관리해주는 도구(Infrastructure as Code)
-
규격화된 환경(인벤토리)과 모듈(플레이북) 등을 통해 배포되는 모든 서버가 동일한 환경을 유지할 수 있도록 해줍니다.
서버 프로비저닝(Provisioning)
- 필요한 리소스를 기반으로 네트워크에서 사용될 서버를 설정하는 프로세스로,
새로운 시스템을 생성한 후 가동 상태로 만드는데 필요한 모든 작업은 물론이고 해당 시스템에 대해 원하는 상태를 정의하는 작업도 포함됩니다. - 즉, 사용자의 요구에 맞게 서버를 설정해서 필요 시 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말합니다.
Infrastructure as Code
- 컴퓨터의 인프라 구성을 소프트웨어를 개발하듯이 코드로 작성하는 것을 의미
- 필요한 리소스를 기반으로 네트워크에서 사용될 서버를 설정하는 프로세스로,
Ansible 특징
- Agentless
- 타 자동화 도구들은 타겟대상들에 Agent 설치 기반의 Pull 방식으로 동작하는 것에 비해 Ansible은 타겟 대상들에 Agentless 기반의 Push 방식으로 동작하기 때문에 기술적, 지리적 제한이 보다 넓다는 장점이 있습니다.
- 멱등성
- 어떤 연상이 여러번 수행되더라도 결과가 달라지지 않는 성질
- Ansible 또한 동일한 모듈을 반복 실행해도 결과가 동일하게 출력시켜, 결과가 달라지지 않도록 구성되어 멱등성을 일관되게 수행할 수 있습니다.
Ansible 구성요소
- 인벤토리 (inventory)
- 프로비저닝, 배포 등의 대상을 정의한 파일
- 쉽게 말하면, host를 정리한 파일이고 Alias을 설정하거나 그룹으로 묶거나 ssh 접근방식(IP, Port, User 등)을 기록해 놓을 수 있습니다.
- 플레이북 (playbook)
- 인벤토리에 작성된 서버들을 대상으로 특정 행위(프로비저닝, 배포)에 대해 정의한 파일
- 인벤토리에 기록된 그룹 및 Alias을 통해 task 단위로 묶어서 사용이 가능합니다.