Ansible 이란?
앤서블 여러개의 서버를 효율적으로 관리하기 위해 고안된 환경 구성 자동화 도구이다. 서버의 환경 구성 자동화 도구의 역할을 정확히 정의할 필요가 있는데 리눅스에서 동일한 환경을 구성하기 위해서 사용하는 가장 기초적인 방법은 Bash 쉘 스크립트이다. 각종 패키지 설치 설정파일 수정등을 위해 일괄 처리 목록을 쉘 스크립트에 나열하고 실행 하게 된다.
그러나 수많은 서버들을 동시에, 동일한 환경을 환경을 배포하야하는 상황에서는 쉘 스크립트는 한계점을 가지게 된다. 그래서 사용하는 도구가 Ansible이라는 도구이다.
Infrastructure as a Code (laaC)
환경의 배포와 구성을 규격화된 코드로 정의해 사용하는것을 의미한다. 인프라 생태를 코드로 선언하고 이를 모든 서버에 배포함으로써 특정 환경을 동일하게 유지할 수 있게 돕는다
멱등성(Idempotent)
멱등성은 연산을 여러 번 적용하더라도 결과는 똑같다는 성질이다.
Ansible 특장점
- 자동 배포 환경이 쉬움
- 오픈소스가 활발함
- Play book을 통한 반복적인 작업 제거
- ad-hoc 지원 (작업중 다른 일을 하기 위해 명령어를 동시에 사용가능)
- 병령 프로비저닝 지원 (서버를 병렬적으로 프로비저닝 가능)
- Jinja2 문법을 지원하여 사용가능
- 보안과 신뢰성이 높음
Ansible 아키텍처 구조

- Control Node
중앙 제어 노드이며, ansible이 설치되는 node, 원격으로 관리 노드를 제어
- Managed node
ansible control node에 의해 관리가 되는 대상 서버이다.
- Inventory
managed node가 등록되어 있는 목록 IP, Group으로 관리가 가능하다
- Modules
ansible에서 제공하는 실행 단위 모듈이다.
- Tasks
Modules의 집합으로 작업 단위이다.
- Playbooks
계획된 작업을 순서대로 실행하기 위해 작성하는 YAML 파일이다.