Ansible 첫 사용기

Yunhong Min·2021년 9월 8일
0

최근에 서버에 공통으로 들어갈 스크립트를 돌리는 일이 생기고 있어, 편하게 이러한 작업을 할 수 없을까 보니 이전에 IaC 관련 블로그을 보면서 인상깊다고 여긴 Ansible이 생각났다.

Ansible은 인프라 구성 관리 툴로써 puppet과 chef와 비슷한 툴 이다. 회사에서는 chef 정도만 간접적으로 경험해 본게 전부지만 마스터 서버와 에이전트 설치가 필요 없어 관심을 가지게 되었다.

Ansible을 Mac에 설치

mac에서 설치는 역시 homebrew. 다음 명령어로 간단히 설치가 가능하다. 글쓰는 시점을 기준으로 설치 시, 4.5 버전이 설치되었다.

brew install ansible

용어

Ansible에서 사용하는 주요 용어는 다음과 같다.

  • Control Node: Ansible이 설치된 머신을 이야기 한다.

  • Managed Node: Ansible을 사용하여 관리할 서버 (네트워크)를 이야기 한다. hosts라고도 불린다. 위에서도 이야기 하였지만, managed node에 에이전트를 별도로 설치할 필요가 없다.

  • Inventory: manage할 서버에 대한 정보를 모아놓은 파일이다. hostfile이라고도 불린다. ip 주소 등 접근 정보를 저장한다.

  • PlayBook: ansible이 실행하는 task의 ordered-list 집합이다.

가장 빠르게 실행해보기

ansible에서 관리할 서버 정보가 있는 inventory file을 작성해보자. 작업하는 파일이 위치하는 디렉토리를 하나 만든 후에 hosts.yml (이름은 상관 없다) 파일을 생성하고 다음과 같이 입력하면 firstserver 라는 alias로 접속할 서버를 정의할 수 있다.

all:
  hosts:
    firstserver:
      ansible_port: 22
      ansible_host: '3.35.0.208'
      ansible_user: 'ubuntu'
      ansible_ssh_private_key_file: '/path/to/ssh_key'

이렇게 입력한 후 다음과 같이 접속 테스트를 해볼 수 있다.

$ ansible all -m ping -i hosts.yml

firstserver | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

자, 이제 접속 되는 것 까지는 확인을 하였으니, 이제 firstserver 에 파일을 하나 생성해보도록 ad-hoc 명령어를 실행해 보자. 아래와 같이 명령어를 실행하면 firstserver에 ansible.txt 파일 하나가 생성된 것을 확인할 수 있다.

$ ansible -i hosts.yml firstserver -a 'touch ansible.txt'

firstserver | CHANGED | rc=0 >>

모듈 변수 지정이 없으면 ansible의 command module을 사용하게 되는데, piping이나 redirecting 같은 작업이 불가능하기 때문에 제한 사항이 많다. redirect를 통해 파일에 내용을 넣고 싶다면ansible.builtin.shell 모듈을 사용하면 된다. 아래 명령어를 실행하면 welcome to ansible 이라는 내용이 적혀 있는 ansible.txt 파일이 생성된다.

$ ansible -i hosts.yml -m ansible.builtin.shell firstserver -a 'echo "welcome to ansible" > ansible.txt'

firstserver | CHANGED | rc=0 >>

IaC 툴처럼 사용해보자

지금까지 ad-hoc 명령어를 직접 실행하도록 해보았다. 그러나 IaC 툴로서의 제대로된 역할을 하려면 결국 이러한 명령어들이 재사용이 가능하도록 코드로 작성되어야 한다. 이때 사용하는 것이 playbook 이다.

playbook 파일(welcome-playbook.yml)을 다음과 같이 만들어보자.

- name: create welcome file
  hosts: firstserver

  tasks:
    - name: create welcome file
      ansible.builtin.shell: 'echo "welcome to ansible" > ansible.txt'

다음 명령어를 실행하면, 이전 ad-hoc 명령어와 동일한 결과를 낸다.

$ ansible-playbook welcome-playbook.yml -i hosts.yml


PLAY [create welcome file] ********************************************************************

TASK [Gathering Facts] ************************************************************************
ok: [firstserver]

TASK [create welcome file] ********************************************************************
changed: [firstserver]

PLAY RECAP ************************************************************************************
firstserver                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

모듈(module)에 대해

현재까지는 ansible.builtin.shell 모듈만을 사용해 봤지만, ansible에는 정말 다양한 목적에 맞는 다양한 모듈이 있다. 파일 복사에 특화된 ansible.builtin.copy 와 같은 모듈부터 aws instance를 생성하거나 상태를 제어할 수 있는 모듈까지 다양한 모듈을 제공한다. 앞으로 반복되는 업무에 지속적으로 사용해보며 유용한 팁이 있다면 공유할 예정이니 기대하시라.

profile
좋아서 시작한 개발 지금은...

0개의 댓글