JJ BLOG

Ruby on Rails로 웹개발을 하고있는 웹개발자입니다.

Ansible이란?

10 May 2020 »

서비스에서 사용하는 툴 중 하나인 Ansible에 대해서 알아보고자 합니다. AWS의 여러 서버를 관리하는데 사용하고 있으며 YAML 포맷을 기반으로 사용하기 때문에 어렵지 않게 사용할 수 있었습니다.


Infrastructure as a Code(IaC)

Ansible은 여러 IaC를 기반으로 하는 툴 중 하나입니다. IaC는 기존 인프라의 쉘 스크립트, 수동의 CLI기반 프로비저닝 방식에서 탈피하여, 시스템을 코드 기반으로 자동 설치 및 구축, 관리, 프로비저닝을 구현하는 IT 인프라 구성 프로세스를 말합니다. IaC를 기반으로 하는 툴들은 매우 다양하며 그중 하나로 Ansible이 있습니다. 쉽게 말해 서버의 인프라 구성을 개발을 하듯이 코드로 작성하는 것을 의미합니다. 이는 서버의 환경을 규격화하고 배포되는 모든 서버가 동일한 환경을 유지할 수 있도록 해줍니다.


Ansible 이란?

“Ansible is a radically simple IT automation engine that automates cloud provisioning, configuration management, application deployment, intra-service orchestration, and many other IT needs.”

Ansible 이란 머신들을 관리하고 모니터링 하는 하나의 도구입니다. Python으로 구현된 오픈소스로 서버의 프로비저닝, 배포 등의 자동화를 관리해줍니다. 우리가 통상적으로 서버의 프로비저닝이나 배포를 자동화한다고 할 때 가장 먼저 떠오르는 것이 쉘 스크립트입니다. 하지만 쉘 스크립트에 익숙하지 않은 분들에게는 (저를 포함한..) 꽤 어려운 작업입니다. 이러한 작업들을 보다 편리하고 생산성 있게 도와주는 툴이라고 할 수 있습니다.


Ansible의 특징

여러가지 특징들이 있습니다. 그 특징들 중 아마 아래 두가지 특징으로 인해 Ansible이 지지층을 빠르게 확보할 수 있었을 것입니다.

Agentless

일반적으로 대부분의 IaC 툴들은 중앙에 놓여진 서버에서 관리 할 서버 및 클라이언트에 Agent를 설치하고 데이터를 수집해 오는 Pull 방식 사용합니다. 이 때문에 관리포인트가 늘어나게 됩니다.

이에 반해 Ansible은 중앙 서버로써 관리 할 각종 서버에 SSH로 통신하여 원격으로 실행하거나 파일을 연결된 서버로 밀어넣어 관리하는 Push 방식을 사용합니다. 때문에 관리포인트는 중앙의 Ansible이 설치된 서버 하나 입니다.

쉽게 말해 작업 대상이 되는 노드에 별도의 무언가를 설치할 필요가 없습니다. 작업을 명령할 내 로컬에만 Ansible을 설치하면 준비는 끝납니다.

멱등성

어떤 연산이 여러번 수행되더라도 결과가 달라지지 않는 성질을 의미합니다. 즉, 한번 만들어 둔 설정에 따라 실행을 반복하더라도 결과값이 달라지지 않습니다. 또한 변경 된 부분이 있다면 그 부분만 업데이트 되어 반영됩니다.


Ansible의 구성 요소

본체

Ansible 소프트웨어 자체로 서버/클라이언트 구성과 같은 형태가 아니며 한 번 설치하면 필요할 때 명령을 실해하는 것으로 충분합니다.

Inventory

Ansible이 작업할 대상 머신. “어디에서” Ansible을 실행하는 가? Inventory는 Ansible에서 조작 대상이 되는 서버 접속 정보를 나타냅니다. Inventory는 여러 개의 서버를 그룹화해 정의하거나 각각의 서버와 그룹에 대해 변수를 사용한 파라미터를 설정할 수 있습니다.

쉽게 말해서 Host IP들을 정리해 놓은 파일이고 별명을 붙이거나 그룹으로 묶거나 혹은 SSH 접근 방식을 기록해 놓을 수 있습니다.

Module

Ansible에서 실행되는 개별 작업의 정의. “무엇을” Ansible에서 실행하는가? 대상 호스트에서 실행하는 라이브러리들입니다. 2,000개 이상의 Module을 제공하며 버전이 지속적으로 패치되고, 넓은 사용자 층을 확보하면서 많은 모듈을 지원하고 있습니다.

모듈 참조

Playbook

모듈 호출의 중심에 있는 Ansible 코드. “어떻게” Ansible을 실행하는가? Ansible에서 스크립트이며 Ansible을 사용할 때 필요한 작업은 Playbook의 구현과 실행이라고 할 수 있습니다. YAML로 작성합니다.