728x90
반응형
이 문서는 Ansible 고급 기능들을 하나의 엔드-투-엔드 실전 아키텍처 예제로 통합하여 소개합니다. 대상 구성은 다음과 같습니다:
- Web Layer: Nginx + 앱 배포
- Database Layer: MariaDB
- Monitoring Layer: Prometheus + Node Exporter
- 동적 인벤토리 (AWS)
- Vault, Role, Tag, Handler, Template, CI/CD 구조 반영
✅ 인프라 구조
+--------------------+ +--------------------+
| Web Layer | | Monitoring Layer |
| - Nginx | | - Prometheus |
| - App | | - Node Exporter |
+---------+----------+ +---------+----------+
| |
| |
v v
+-----+-------------------------------+-----+
| DB Layer (MariaDB) |
+------------------------------------------+
📁 디렉토리 구조 예시
project/
├── inventory/aws_ec2.yml
├── playbook.yml
├── group_vars/
│ ├── web.yml
│ ├── db.yml
│ └── monitor.yml
├── roles/
│ ├── webserver/
│ ├── database/
│ └── monitoring/
├── vault/
│ └── secrets.yml
└── ansible.cfg
🔐 Vault 암호화 예제
ansible-vault encrypt vault/secrets.yml
mysql_root_password: "MySecretRootPass"
▶️ 통합 플레이북 예제 (playbook.yml)
- name: Deploy Web Layer
hosts: web
become: yes
roles:
- webserver
- name: Deploy DB Layer
hosts: db
become: yes
roles:
- database
- name: Deploy Monitoring Layer
hosts: monitor
become: yes
roles:
- monitoring
📦 Role: webserver
tasks/main.yml
- name: Install nginx
apt:
name: nginx
state: present
- name: Copy app.html
copy:
src: files/app.html
dest: /var/www/html/index.html
- name: Apply config
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/sites-enabled/default
notify: Restart nginx
handlers/main.yml
- name: Restart nginx
service:
name: nginx
state: restarted
📦 Role: database
tasks/main.yml
- name: Install mariadb-server
apt:
name: mariadb-server
state: present
- name: Ensure root password
mysql_user:
name: root
host: localhost
password: "{{ mysql_root_password }}"
vars_files:
- ../../vault/secrets.yml
📦 Role: monitoring
tasks/main.yml
- name: Install Prometheus
apt:
name: prometheus
state: present
- name: Copy config
template:
src: prometheus.yml.j2
dest: /etc/prometheus/prometheus.yml
notify: Restart prometheus
- name: Enable Node Exporter
apt:
name: prometheus-node-exporter
state: present
🔍 실행 예제
ansible-playbook -i inventory/aws_ec2.yml playbook.yml --ask-vault-pass
또는 CI/CD로 통합 실행:
- name: Ansible Deploy
run: ansible-playbook -i inventory/aws_ec2.yml playbook.yml --vault-password-file vault/.vault_key
728x90
반응형