Ansible

**Ansible**(앤서블)은 코드형 인프라스트럭처를 가능하게 하는 소프트웨어 도구 모음이다. 오픈 소스이며 소프트웨어 프로비저닝, 소프트웨어 구성 관리, 애플리케이션 배포 기능을 포함한다.

원래 2012년 마이클 드한이 작성했으며 2015년 레드햇에 인수된 Ansible은 유닉스 계열 시스템과 마이크로소프트 윈도우를 모두 구성하도록 설계되었다. Ansible은 에이전트리스 방식이며, SSH 또는 윈도우 원격 관리를 통한 임시 원격 연결에 의존하여 파워셸 실행을 허용한다. Ansible 제어 노드는 리눅스용 윈도우 하위 시스템이 설치된 윈도우를 포함하여 파이썬을 실행할 수 있는 대부분의 유닉스 계열 시스템에서 실행된다. 시스템 구성은 부분적으로 자체 선언형 언어를 사용하여 정의된다.

## 역사
"앤서블"이라는 용어는 어슐러 K. 르귄이 1966년 소설 로캐넌의 세계에서 만들었으며, 가상의 순간 통신 시스템을 지칭한다.

Ansible 도구는 프로비저닝 서버 애플리케이션인 코블러의 저자이자 원격 관리를 위한 페도라 통합 네트워크 컨트롤러 (Func) 프레임워크의 공동 저자인 마이클 드한이 개발했다.

Ansible사(원래 사명: AnsibleWorks, Inc.)는 드한, 티모시 게를라, 사이드 지우아니가 Ansible을 상업적으로 지원하고 후원하기 위해 2013년에 설립한 회사였다. 레드햇은 2015년 10월에 Ansible을 인수했다.

Ansible은 페도라 리눅스 배포판(레드햇 소유)의 일부로 포함되어 있으며, 레드햇 엔터프라이즈 리눅스, CentOS, 오픈수세, 수세 리눅스 엔터프라이즈, 데비안, 우분투, 사이언티픽 리눅스, 오라클 리눅스 등 다른 운영체제에서도 Extra Packages for Enterprise Linux를 통해 사용할 수 있다.

## 아키텍처

### 개요
Ansible은 간단한 플레인 텍스트 파일에 저장된 Ansible의 인벤토리 일부를 선택하여 여러 시스템을 관리하는 데 도움을 준다. 인벤토리는 구성 가능하며, 대상 시스템 인벤토리는 다양한 형식(YAML, INI)으로 동적으로 또는 클라우드 기반 소스에서 가져올 수 있다.

민감한 데이터는 2014년부터 Ansible Vault를 사용하여 암호화된 파일에 저장할 수 있다.
Chef, Puppet, Salt 및 CFEngine과 같은 다른 인기 있는 구성 관리 소프트웨어와 달리 Ansible은 에이전트리스 아키텍처를 사용하며, Ansible 소프트웨어는 일반적으로 제어되는 노드에서 실행되거나 설치되지 않는다. 대신 Ansible은 SSH를 통해 노드에 모듈을 임시로 설치하고 실행하여 노드를 오케스트레이션한다. 오케스트레이션 작업 기간 동안 모듈을 실행하는 프로세스는 표준 입력 및 출력을 통해 JSON 기반 프로토콜로 제어 시스템과 통신한다. Ansible이 노드를 관리하지 않을 때는 데몬이 실행되거나 소프트웨어가 설치되지 않으므로 노드에서 리소스를 소비하지 않는다.

#### 종속성
Ansible은 모든 관리 시스템에 파이썬이 설치되어 있어야 하며, 구성 관리 소프트웨어와 해당 종속 패키지와 함께 pip 패키지 관리자가 설치되어 있어야 한다. 관리되는 네트워크 장치는 추가 종속성이 필요 없으며 에이전트리스 방식이다.

### 제어 노드
제어 노드(마스터 호스트)는 대상 시스템("인벤토리"라고 불리는 노드, 아래 참조)을 관리(오케스트레이션)하기 위한 것이다. 제어 노드는 리눅스 및 유닉스 계열 운영 체제(MacOS 포함)에서 실행될 수 있으며, 윈도우 운영체제는 리눅스용 윈도우 하위 시스템을 통해서만 지원된다. 여러 제어 노드가 허용된다. Ansible은 오케스트레이션을 위해 단일 제어 시스템을 요구하지 않으므로 재해 복구가 간단하다. 노드는 제어 노드에 의해 SSH를 통해 관리된다.

### 설계 목표
Ansible의 설계 목표는 다음과 같다.
* 본질적으로 최소한. 관리 시스템은 환경에 추가적인 종속성을 부과해서는 안 된다.
* 일관성. Ansible을 사용하면 일관된 환경을 만들 수 있어야 한다.
* 보안. Ansible은 노드에 에이전트를 배포하지 않는다. 관리되는 노드에는 OpenSSH와 파이썬만 필요하다.
* 신뢰성. 신중하게 작성된 Ansible 플레이북은 멱등성을 가질 수 있어 관리 시스템에서 예기치 않은 부작용을 방지한다. 멱등성이 없는 플레이북을 작성하는 것도 가능하다.
* 최소한의 학습 필요. 플레이북은 YAML 및 진자 템플릿을 기반으로 한 쉽고 설명적인 언어를 사용한다.

### 모듈
모듈은 대부분 독립적이며 표준 스크립팅 언어(예: 파이썬, 펄, 루비, Bash 등)로 작성할 수 있다. 모듈의 주요 목표 중 하나는 멱등성인데, 이는 작업이 여러 번 반복되더라도(예: 장애 복구 시) 항상 시스템을 동일한 상태로 만든다는 것을 의미한다.

### 인벤토리 구성
대상 노드의 위치는 (리눅스)에 있는 인벤토리 구성 목록(INI 또는 YAML 형식)을 통해 지정된다. 구성 파일에는 Ansible이 접근할 수 있는 각 노드의 IP 주소 또는 호스트명이 나열된다. 또한 노드는 그룹에 할당될 수 있다.

인벤토리 형식 예시(INI 파일):


```ini
192.168.6.1

[webservers]
foo.example.com
bar.example.com
```


이 구성 파일은 세 개의 노드를 지정한다. 첫 번째 노드는 IP 주소로 지정되고, 뒤의 두 노드는 호스트명으로 지정된다. 또한 뒤의 두 노드는 `webservers` 그룹으로 묶인다.

Ansible은 다른 시스템에서 데이터를 동적으로 가져올 수 있는 사용자 지정 동적 인벤토리 스크립트를 사용할 수도 있으며, 그룹의 그룹도 지원한다.

### 플레이북
플레이북은 관리되는 노드에서 반복적인 실행을 위한 작업 목록을 저장하는 YAML 파일이다. 각 플레이북은 호스트 그룹을 역할 집합에 매핑(연결)한다. 각 역할은 Ansible 작업 호출로 표현된다.

### Ansible Automation Platform

Ansible Automation Platform (AAP)은 다양한 IT 기술 수준을 가진 사람들이 Ansible에 더 쉽게 접근할 수 있도록 설계된 REST API, 웹 서비스, 웹 기반 인터페이스(애플리케이션)이다. 개발자 도구, 운영 인터페이스, 데이터센터 전반에 걸쳐 자동화 작업을 대규모로 가능하게 하는 Automation Mesh를 포함한 여러 구성 요소로 이루어진 플랫폼이다. AAP는 Red Hat, Inc.에서 지원하는 상용 제품이지만, 2017년 9월부터 오픈 소스인 AWX 업스트림 프로젝트(이전 Ansible Tower)를 포함한 17개 이상의 오픈 소스 프로젝트에서 파생되었다.

Tower의 또 다른 오픈 소스 대안인 Semaphore도 Go로 작성되었다.

## 플랫폼 지원
제어 시스템은 리눅스/유닉스 호스트(BSD, CentOS, 데비안, MacOS, 레드햇 엔터프라이즈 리눅스, 수세 리눅스 엔터프라이즈, 우분투 등)여야 하며, 파이썬 2.7 또는 3.5가 필요하다.

관리 노드가 유닉스 계열인 경우 파이썬 2.4 이상이 필요하다. 파이썬 2.5 이하를 사용하는 관리 노드의 경우 `python-simplejson` 패키지도 필요하다. 버전 1.7부터 Ansible은 윈도우 노드도 관리할 수 있다. 이 경우 SSH 대신 WS-Management 프로토콜에서 지원하는 네이티브 파워셸 리모팅이 사용된다.

Ansible은 베어 메탈 호스트, 가상 머신, 클라우드 환경에 배포할 수 있다.

## 같이 보기
* 오픈 소스 구성 관리 소프트웨어 비교

## 각주

## 외부 링크
* 

분류:소프트웨어 배포
분류:원격 관리 소프트웨어
분류:파이썬으로 작성된 자유 소프트웨어
분류:GPL 라이선스 소프트웨어