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 환경에서 구성 관리, 배포 자동화, 작업 자동화를 위한 다양한 방식으로 사용될 수 있습니다. 코드를 작성하는 것은 단순하지만, 이를 이용하여 매우 복잡한 작업도 자동화할 수 있습니다.
'무근본 IT 지식 공유 > 무근본 데브옵스(DevOps)' 카테고리의 다른 글
Git과 Github 차이점이 대체 뭐야?-왕초보도이해하는 프로그래밍 (0) | 2023.09.16 |
---|
댓글