본문 바로가기
  • _^**_
무근본 IT 지식 공유/무근본 데브옵스(DevOps)

[무근본 DevOps 공부] Ansible은 데브옵스에서 어떻게 사용되는가? - 쉬운 예시를 들어 설명

by 크리드로얄워터 2023. 3. 25.
반응형
Ansible은 구성 관리, 배포 자동화, 작업 자동화를 위한 인프라스트럭처 자동화 도구로서,
DevOps 환경에서 많이 사용됩니다.
이를테면, 어떤 애플리케이션의 인프라스트럭처에 대한 변경사항을 자동화된 방법으로 적용하는 것입니다.

Ansible이 DevOps 환경에서 사용되는 예시 코드 몇 가지를 소개합니다.

 

1. 구성 관리

서버 구성 관리는 Ansible에서 핵심적인 역할을 합니다.

 

Ansible은 모든 서버에서 사용되는 구성 파일을 관리하고 변경 사항을 관리하는 데 사용될 수 있습니다.

 

예를 들어, 아래 예시는 Apache 웹 서버를 설치하고, Apache가 실행되는 서버의 구성 파일을 수정하는 Ansible Playbook입니다.

 

- name: Install Apache web server
  hosts: webservers
  become: true
  tasks:
    - name: Install Apache
      yum:
        name: httpd
        state: present
    - name: Start Apache
      service:
        name: httpd
        state: started
    - name: Update Apache config file
      template:
        src: /path/to/apache.conf.j2
        dest: /etc/httpd/conf/httpd.conf

 

 

위 코드에서, webservers 그룹에 있는 모든 호스트에서 실행되며, 먼저 httpd 패키지를 설치하고 Apache를 시작합니다.

 

그리고 httpd.conf 구성 파일을 Apache가 실행되는 모든 서버에 복사합니다.

 

구성 파일은 Jinja2 템플릿을 사용하여 작성되며, 이를 적용하여 모든 서버에서 사용되는 구성을 일괄적으로 변경할 수 있습니다.

 

2. 배포 자동화

Ansible은 소프트웨어 배포 프로세스를 자동화하는 데에도 사용될 수 있습니다.

 

예를 들어, Git 리포지토리에서 소스 코드를 가져와 특정 환경에 배포하는 Ansible Playbook을 만들 수 있습니다.

 

- name: Deploy myapp to production
  hosts: production
  become: true
  tasks:
    - name: Fetch latest source code from Git
      git:
        repo: https://github.com/myapp.git
        dest: /var/www/myapp
        version: master
    - name: Install required packages
      yum:
        name:
          - python
          - python-pip
        state: present
    - name: Install required Python modules
      pip:
        name: requirements.txt
        virtualenv: /var/www/myapp/env
        state: present
    - name: Start myapp service
      systemd:
        name: myapp.service
        state: started

 

위 코드는 production 그룹에 있는 모든 호스트에서 실행되며, myapp Git 리포지토리에서 최신 소스 코드를 가져와 /var/www/myapp 디렉토리에 배치합니다.

 

그리고 필요한 패키지 및 Python 모듈을 설치하고, 가상 환경을 설정하여 모듈을 실행합니다.

 

마지막으로, myapp.service 서비스를 시작합니다.

 

이러한 코드는 애플리케이션 배포를 자동화하고, 동일한 방식으로 모든 서버에 일관되게 배포할 수 있습니다.

 

3. 작업 자동화

Ansible은 작업 자동화에도 사용될 수 있습니다.

 

예를 들어, 서버에서 로그 파일을 수집하고, 백업 파일을 생성하고, 주기적으로 청소하는 Ansible Playbook을 만들 수 있습니다.

- name: Collect and backup log files
  hosts: webservers
  become: true
  tasks:
    - name: Collect log files
      find:
        paths: /var/log
        patterns: "*.log"
      register: log_files
    - name: Create backup directory
      file:
        path: /var/log/backups
        state: directory
    - name: Copy log files to backup directory
      copy:
        src: "{{ item.path }}"
        dest: "/var/log/backups/{{ item.path | basename }}"
      with_items: "{{ log_files.files }}"
    - name: Delete log files older than 7 days
      find:
        paths: /var/log/backups
        age: 7d
        type: file
      register: old_files
    - name: Remove old log files
      file:
        path: "{{ item.path }}"
        state: absent
      with_items: "{{ old_files.files }}"

 

위 코드는 webservers 그룹에 있는 모든 호스트에서 실행되며, /var/log 디렉토리에서 .log 확장자를 가진 로그 파일을 수집합니다.

 

그리고 backups 디렉토리를 만들고, 로그 파일을 해당 디렉토리로 복사하여 백업 파일을 생성합니다.

 

7일 이전에 생성된 로그 파일은 삭제됩니다.

 

이러한 코드는 반복적인 작업을 자동화하고, 이를 일괄 처리하여 일관성을 유지합니다.

 

이처럼, Ansible은 DevOps 환경에서 구성 관리, 배포 자동화, 작업 자동화를 위한 다양한 방식으로 사용될 수 있습니다. 코드를 작성하는 것은 단순하지만, 이를 이용하여 매우 복잡한 작업도 자동화할 수 있습니다.

 

반응형

댓글