Ansible playbook 에서 대상 호스트 지정 방법

AnsibleBeginner
지금 연습하기

소개

Ansible 은 인프라 및 애플리케이션 관리를 단순화하는 강력한 오픈소스 자동화 도구입니다. 이 튜토리얼에서는 Ansible playbook 내에서 대상 호스트를 지정하는 프로세스를 자세히 살펴볼 것입니다. 이는 IT 환경을 자동화하는 기본적인 측면입니다.

Ansible Playbook 소개

Ansible 은 선언적이고 이데 mpotent 한 방식으로 인프라를 관리하고 구성할 수 있는 강력한 오픈소스 자동화 도구입니다. Ansible 의 핵심 개념은 "playbook"으로, YAML 기반의 구성 파일이며, 인프라의 원하는 상태를 정의합니다.

Ansible playbook 은 소프트웨어 설치, 구성 관리, 배포 등 다양한 작업을 자동화하는 데 사용됩니다. playbook 은 하나 이상의 "play"로 구성되며, 각 play 는 특정 호스트 그룹을 대상으로 하여 해당 호스트에서 일련의 "task"를 실행합니다.

Ansible playbook 을 시작하려면 컨트롤 노드 (playbook 을 실행할 머신) 에 Ansible 이 설치되어 있어야 합니다. Ubuntu 의 apt 또는 CentOS 의 yum과 같은 시스템 패키지 관리자를 사용하여 Ansible 을 설치할 수 있습니다.

Ansible 을 설치한 후 첫 번째 playbook 을 만들 수 있습니다. 다음은 Ubuntu 22.04 호스트 그룹에 Apache 웹 서버를 설치하는 예시 playbook 입니다.

- hosts: webservers
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present
        update_cache: yes
    - name: Start Apache
      service:
        name: apache2
        state: started
        enabled: yes

이 예제에서 hosts 지시자는 대상 호스트를 지정하며, 이 경우 webservers 그룹에 속한 호스트입니다. tasks 섹션은 대상 호스트에서 수행할 작업을 정의하며, 여기에는 Apache 웹 서버 설치 및 Apache 서비스 시작이 포함됩니다.

Ansible playbook 은 인프라를 관리하는 유연하고 강력한 방법을 제공하며, 대상 호스트를 정의하는 방법을 이해하는 것은 Ansible 을 효과적으로 사용하는 데 중요한 부분입니다.

Playbook 에서 대상 호스트 정의

Ansible playbook 의 가장 중요한 측면 중 하나는 대상 호스트를 정의하는 것입니다. Ansible 은 playbook 이 실행될 호스트를 지정하는 여러 가지 방법을 제공하며, 이러한 옵션을 이해하는 것은 인프라를 효과적으로 관리하는 데 필수적입니다.

호스트 패턴

Ansible playbook 에서 대상 호스트를 정의하는 가장 일반적인 방법은 호스트 패턴을 사용하는 것입니다. 호스트 패턴은 호스트 이름, 그룹 구성원 자격 또는 변수 값과 같은 다양한 기준에 따라 인벤토리의 하위 집합을 유연하게 선택하는 방법입니다.

다음은 호스트 패턴의 몇 가지 예입니다.

  • webservers: webservers 그룹에 있는 모든 호스트를 대상으로 합니다.
  • app*.example.com: app으로 시작하고 .example.com으로 끝나는 호스트 이름을 가진 모든 호스트를 대상으로 합니다.
  • db[01:05]: db01부터 db05까지의 호스트를 대상으로 합니다.
  • ~(web|app).*\.example\.com: 정규 표현식과 일치하는 호스트를 대상으로 합니다.

인벤토리 파일

호스트 패턴 외에도 Ansible 은 대상 호스트를 정의하기 위해 인벤토리 파일을 사용하는 것을 지원합니다. 인벤토리 파일은 인프라의 호스트와 관련 메타데이터 (예: 그룹 구성원 자격 또는 변수) 를 설명하는 일반 텍스트 파일입니다.

다음은 인벤토리 파일의 예입니다.

[webservers]
web01.example.com
web02.example.com

[databases]
db01.example.com
db02.example.com

이 예제에서 webservers 그룹에는 두 개의 호스트 web01.example.comweb02.example.com이 있고, databases 그룹에는 두 개의 호스트 db01.example.comdb02.example.com이 있습니다.

동적 인벤토리

Ansible 은 또한 클라우드 공급자, 구성 관리 도구 또는 사용자 정의 스크립트와 같은 외부 소스에서 호스트 정보를 검색할 수 있는 동적 인벤토리를 지원합니다. 이는 인프라가 지속적으로 변경되거나 호스트 정보가 중앙 위치에 저장되는 환경에서 특히 유용합니다.

Ansible playbook 에서 대상 호스트를 정의하는 다양한 방법을 이해함으로써 인프라의 요구 사항에 적응할 수 있는 더 유연하고 강력한 자동화 워크플로를 만들 수 있습니다.

실제 Playbook 예제

Ansible playbook 에서 대상 호스트를 정의하는 기본 사항을 다룬 후, 시작하는 데 도움이 되는 실제 예제를 살펴보겠습니다.

예제 1: 웹 애플리케이션 배포

여러 서버에 걸쳐 웹 애플리케이션을 배포해야 하는 경우가 있습니다. 이 작업을 처리할 수 있는 예제 playbook 은 다음과 같습니다.

- hosts: webservers
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present
        update_cache: yes
    - name: Copy application files
      copy:
        src: app/
        dest: /var/www/html/
    - name: Start Apache
      service:
        name: apache2
        state: started
        enabled: yes

이 예제에서 playbook 은 webservers 그룹을 대상으로 다음 작업을 수행합니다.

  1. Apache 웹 서버를 설치합니다.
  2. 애플리케이션 파일을 /var/www/html/ 디렉토리로 복사합니다.
  3. Apache 서비스를 시작합니다.

예제 2: 데이터베이스 클러스터 구성

Ansible playbook 의 또 다른 일반적인 사용 사례는 데이터베이스 클러스터를 구성하는 것입니다. MySQL 클러스터를 설정하는 예제 playbook 은 다음과 같습니다.

- hosts: databases
  tasks:
    - name: Install MySQL
      apt:
        name: mysql-server
        state: present
    - name: Configure MySQL
      template:
        src: my.cnf.j2
        dest: /etc/mysql/my.cnf
      notify:
        - restart mysql
    - name: Start MySQL
      service:
        name: mysql
        state: started
        enabled: yes
  handlers:
    - name: restart mysql
      service:
        name: mysql
        state: restarted

이 예제에서 playbook 은 databases 그룹을 대상으로 다음 작업을 수행합니다.

  1. MySQL 서버 패키지를 설치합니다.
  2. Jinja2 템플릿을 사용하여 MySQL 서버를 구성합니다.
  3. MySQL 서비스를 시작합니다.

playbook 에는 구성 파일이 변경될 때마다 MySQL 서비스를 다시 시작하는 핸들러도 포함되어 있습니다.

이것들은 시작하기 위한 몇 가지 예일 뿐입니다. Ansible playbook 은 인프라 프로비저닝부터 애플리케이션 배포에 이르기까지 다양한 작업을 자동화하는 데 사용될 수 있습니다. 대상 호스트를 정의하는 방법을 이해함으로써 인프라 관리에 시간과 노력을 절약할 수 있는 강력하고 유연한 자동화 워크플로를 만들 수 있습니다.

요약

이 Ansible 튜토리얼을 마치면 playbook 에서 대상 호스트를 정의하는 방법에 대한 포괄적인 이해를 얻게 되어 인프라 관리 작업을 효율적으로 자동화할 수 있게 됩니다. 초보 사용자든 숙련된 Ansible 사용자든 이 가이드는 자동화 기술을 다음 단계로 끌어올리는 데 필요한 지식을 제공합니다.