안녕하세요, 오늘은 DevOps실 윤영기님이 작성해 주신 Ansible 개념에 대해 알아봅니다.
궁금한 부분이 있으시면 편하게 댓글을 달아주세요:)
Ansible은 코드기반의 구성관리 도구이다.
1. Ansible은 3가지 제품군이 있다.
Ansible : 오픈소스, Command Line 명령 실행
Ansible -AWX : 오픈소스, Command Line 명령 실행 및 GUI로 명령 실행 가능, REST API 지원
Ansible-Tower : Redhat 상용제품, Command Line 명령 실행 및 GUI로 명령 실행 가능, REST API 지원, 고가용성 보장, 판매사 기술지원
(※ Asible-Tower는 Ansible Autoamation Platform의 일부가 되면서 Ansible Controller로 부르기도 한다.)
![](https://i0.wp.com/bespin-wordpress-bucket.s3.ap-northeast-2.amazonaws.com/wp-content/uploads/2023/08/1-105.png?resize=932%2C319&ssl=1)
2. Ansible의 특징
Ansible 자체는 파이썬으로 구현된 SW이다. 따라서 Ansible 설치를 위해서는 파이썬이 설치되어 있어야 한다.
Ansible 설치 환경
- 리눅스 OS
- 파이썬 2.6 또는 2.7
AgentLess : Puppet이나 chef와 같은 대상 서버에 Agent를 설치하는 방식과는 다르게 Ansible은 대상 서버에 Agent를 설치하지 않고 Ansible이 설치된 서버에서 대상 서버에 SSH로 로그인하여 직접 실행하는 방식 방식이다.
![](https://i0.wp.com/bespin-wordpress-bucket.s3.ap-northeast-2.amazonaws.com/wp-content/uploads/2023/08/1-106.png?resize=725%2C658&ssl=1)
멱등성 (idemptent)
연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 멱등성(idempotence) 이라 한다. 즉 playbook을 작성할 때 무엇을 실행하라고 정의하는 ‘절차적’ 방식이 아닌 상태를 정의하는 ‘선언적’ 방식으로 작성을 하기 때문에 playbook을 여러 번 실행하더라도 정의된 상태가 변하지 않는다는 원리이다. 하지만, 모든 작업이 멱등성을 보장하지는 않기 때문에 멱등성 보장을 위해 when 등과 같은 조건절을 이용해야 할 때도 있다는 것을 주의할 필요가 있다. 또한, Ansible이 제공하는 모듈이 아닌 직접 스크립트를 사용할 경우 멱등성이 보장되지 못할 수 있다.
- name: create vpc
ec2_vpc_net:
name: "{{ vpc_name }}"
cidr_block: "{{ vpc_cidr_block }}"
region: "{{ aws_region }}"
tags:
Name: "{{ vpc_name }}"
tenancy: default
register: result_vpc
<AWS VPC를 만드는 playbook 예제 : playbook을 반복 실행을 하더라도 VPC가 중복으로 생성되지 않는다 >
재사용성
Ansible은 yaml파일 형식의 playbook을 정의하고 이를 실행하기 때문에 코드를 재활용하는데 매우 용이하다. 또한, 하나의 Playbook에 여러 task가 있을 경우 이 task들을 서로 다른 Playbook으로 분리한 후 Main이 되는 Playbook에서 불러와 실행할 수 있기 때문에 모듈을 부품화하여 나중에 필요한 모듈만 재활용하는 것이 가능하다. 이것이 바로 Role이라는 개념이다.
3. Ansible 구성 요소
Ansible 본체 : 서버에 설치되는 Ansible SW를 의미한다.
Playbook : Ansible의 실행 내용을 정의해 놓은 것을 Playbook이라 하며 Ansible은 이 Playbook을 실행하게 된다.
Playbook 은 yaml 파일로 만들면 된다.
Inventory : Ansible의 구성관리 타겟이 되는 서버를 의미하며, 별도의 Inventory 파일로 대상 서버의 정보를 작성해 놓는다.
여러 대의 서버를 하나의 Inventory에 지정하면 동시에 여러 대의 서버에 작업이 가능하다. 기본 저장 위치는 /etc/ansible/hosts 파일이다.
Module : Module이란 Ansible에서 지정해 놓은 실행 명령어라고 볼 수 있다.
Ansible에 내장되어있는 모듈은 수백 여 개에 달하며 클라우드서비스( AWS, Azure, GCP), 하드웨어(cisco, dell, ibm 등), 컨테이너(Kubernetes, docker)와 관련된 다양한 모듈이 존재한다. 또한, ansible에서 제공하지 않는 모듈은 개발자나 운영자가 직접 만들어 사용할 수도 있다. ansible 모듈 정보는 URL(https://docs.ansible.com/ansible/latest/collections/index.html)을 통해 확인할 수 있다.
감사합니다 :)youngki.yoon@bespinglobal.com
Written by 윤 영기 / Youngki Yoon
Soft Engineer