소개
이 튜토리얼에서는 Ansible 배포를 위한 호스트와 그룹을 정의할 수 있는 기본 Ansible 인벤토리 디렉토리의 위치를 안내합니다. 인벤토리 디렉토리를 이해하는 것은 Ansible 을 사용하여 인프라를 효과적으로 관리하는 데 필수적입니다.
Ansible 인벤토리 기본 개념
Ansible 인벤토리란 무엇인가요?
Ansible 인벤토리는 인프라 자동화의 기본 구성 요소로, 구성 관리 및 배포를 위한 대상 호스트를 정의하고 구성합니다. 서버, 그룹 및 연결 매개변수의 중앙 집중식 매핑 역할을 합니다.
graph LR
A[Ansible 제어 노드] --> B[인벤토리 파일]
B --> C[호스트 그룹 1]
B --> D[호스트 그룹 2]
C --> E[호스트 1]
C --> F[호스트 2]
D --> G[호스트 3]
D --> H[호스트 4]
인벤토리 파일 유형 및 형식
Ansible 은 여러 인벤토리 파일 형식을 지원합니다.
| 형식 | 확장자 | 설명 |
|---|---|---|
| INI | .ini | 기존 키 - 값 구성 |
| YAML | .yml/.yaml | 구조화된, 사람이 읽기 쉬운 형식 |
| 동적 | .py | 프로그래밍 방식으로 생성된 인벤토리 |
기본 인벤토리 구성 예제
Ubuntu 22.04 에서 간단한 인벤토리 파일 (hosts) 을 만듭니다.
[webservers]
web1 ansible_host=192.168.1.100 ansible_user=ubuntu
web2 ansible_host=192.168.1.101 ansible_user=ubuntu
[databases]
db1 ansible_host=192.168.1.200 ansible_user=ubuntu
주요 인벤토리 매개변수
인벤토리 파일은 중요한 연결 매개변수를 지정할 수 있습니다.
ansible_host: 대상 머신의 IP 주소ansible_user: SSH 로그인 사용자 이름ansible_port: 사용자 지정 SSH 포트ansible_ssh_private_key_file: SSH 키 경로
인벤토리 변수 및 그룹화
Ansible 인벤토리는 변수와 중첩된 그룹을 통해 유연한 호스트 구성을 가능하게 합니다.
[production:children]
webservers
databases
[production:vars]
environment=prod
deployment_region=us-east-1
이 구조는 확장 가능하고 모듈식 구성으로 복잡한 인프라 관리를 지원합니다.
인벤토리 구성 기법
인벤토리 파일 구조 및 구문
Ansible 은 인프라를 효율적으로 구성하고 관리하기 위해 다양한 인벤토리 구성 기법을 지원합니다. 이러한 기법을 이해하면 정확한 호스트 관리 및 연결 설정이 가능합니다.
graph LR
A[인벤토리 구성] --> B[정적 인벤토리]
A --> C[동적 인벤토리]
B --> D[INI 형식]
B --> E[YAML 형식]
C --> F[스크립트 기반 인벤토리]
정적 인벤토리 구성
INI 스타일 인벤토리
[webservers]
web1 ansible_host=192.168.1.100 ansible_user=ubuntu
web2 ansible_host=192.168.1.101 ansible_user=ubuntu
[databases]
db1 ansible_host=192.168.1.200 ansible_user=ubuntu
[production:children]
webservers
databases
YAML 스타일 인벤토리
all:
hosts:
web1:
ansible_host: 192.168.1.100
ansible_user: ubuntu
db1:
ansible_host: 192.168.1.200
ansible_user: ubuntu
children:
webservers:
hosts:
web1:
databases:
hosts:
db1:
연결 매개변수 구성
| 매개변수 | 설명 | 예시 |
|---|---|---|
| ansible_host | 대상 머신 IP | 192.168.1.100 |
| ansible_user | SSH 사용자 이름 | ubuntu |
| ansible_port | 사용자 지정 SSH 포트 | 22 |
| ansible_ssh_private_key_file | SSH 키 경로 | /home/user/.ssh/id_rsa |
고급 그룹화 기법
[datacenter:children]
webservers
databases
[datacenter:vars]
ansible_connection=ssh
environment=production
동적 인벤토리 스크립트
동적 인벤토리는 호스트 목록을 프로그래밍 방식으로 생성할 수 있습니다.
#!/usr/bin/env python3
import json
def get_inventory():
return {
'webservers': {
'hosts': ['web1', 'web2'],
'vars': {'http_port': 80}
}
}
print(json.dumps(get_inventory(), indent=2))
이 접근 방식은 복잡한 인프라 환경에서 유연하고 자동화된 호스트 관리를 제공합니다.
고급 인벤토리 전략
동적 인벤토리 관리
동적 인벤토리는 호스트 목록을 프로그래밍 방식으로 생성하여 자동화되고 확장 가능한 인프라 구성을 가능하게 합니다.
graph TD
A[동적 인벤토리 소스] --> B[외부 스크립트]
B --> C[JSON/YAML 출력]
C --> D[Ansible 인벤토리]
D --> E[호스트 프로비저닝]
클라우드 공급자 통합
AWS EC2 동적 인벤토리
#!/usr/bin/env python3
import boto3
import json
def get_ec2_inventory():
ec2 = boto3.client('ec2')
instances = ec2.describe_instances()
inventory = {
'webservers': {
'hosts': [
instance['PrivateIpAddress']
for reservation in instances['Reservations']
for instance in reservation['Instances']
if instance.get('PrivateIpAddress')
]
}
}
return inventory
print(json.dumps(get_ec2_inventory(), indent=2))
인벤토리 플러그인
| 플러그인 유형 | 기능 | 사용 사례 |
|---|---|---|
| AWS EC2 | 클라우드 검색 | 동적 호스트 프로비저닝 |
| GCP Compute | Google Cloud 통합 | 자동화된 인프라 구성 |
| OpenStack | 프라이빗 클라우드 관리 | 확장 가능한 배포 |
인벤토리 변수 전략
[webservers:vars]
ansible_python_interpreter=/usr/bin/python3
deploy_environment=production
[databases:vars]
backup_schedule=daily
performance_tier=high
인벤토리 필터링 및 대상 지정
## 특정 그룹 대상 지정
ansible webservers -m ping
## 패턴을 사용하여 호스트 필터링
ansible 'webservers:&production' -m command -a 'uptime'
## 특정 호스트 제외
ansible 'all:!deprecated' -m setup
확장 가능한 인벤토리 구성
plugin: constructed
strict: false
groups:
web_servers: "'web' in inventory_hostname"
prod_servers: "environment == 'production'"
이 접근 방식은 다양한 환경에서 유연하고 프로그래밍 방식의 인프라 관리를 제공합니다.
요약
이 튜토리얼에서는 기본 Ansible 인벤토리 디렉토리를 찾고 구성하는 방법, 그리고 호스트와 그룹을 정의하는 방법을 배웠습니다. 인벤토리 구조를 이해함으로써 Ansible 을 효율적으로 사용하여 인프라를 관리하고 배포를 자동화할 수 있습니다. 인벤토리 관리에 대한 최선의 방법을 따르면 Ansible 워크플로우가 확장 가능하고 유지 관리 가능하도록 보장할 수 있습니다.


