인프라 자동화를 위한 Ansible 선택 이유
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
DevOps 엔지니어 및 인프라 자동화를 구축하고자 하는 팀
- 난이도 관점: 중간 수준의 DevOps 지식이 필요하며, YAML 및 인프라 코드 기초 이해가 요구됨
핵심 요약
- Ansible의 핵심 강점:
- Agentless 아키텍처:
SSH만으로 작업
가능, 복잡한 인프라 언어 필요 없음 - YAML 기반 Playbook:
가독성 높은 구성
및 버전 관리 가능 - 모듈화된 Roles:
재사용 가능한 역할
로 다중 프로젝트 적용 가능 - 인프라 자동화 구조:
roles/
폴더 내nomad-client-and-server/
역할로 구성tasks/
,templates/
,handlers/
세부 구조로 분리- 실무 적용 효과:
Terraform 대비 빠른 실행
및투명한 제어
가능
섹션별 세부 요약
1. **기존 인프라 수동 운영 문제점**
- AWS 기반 수동 인프라:
- Nomad, Consul, Vault, MongoDB, PostgreSQL, Redis, GitLab, Ghost 등 수동 구성
- GCP 이전 필수성:
- AWS 크레딧 종료로 GCP 이전 필요, GitLab은 수동 이전, 나머지는 자동화 필요
2. **Ansible 선택 이유**
- Agentless 및 간단한 설정:
SSH만으로 작동
, 별도 에이전트나 데몬 필요 없음- YAML 기반 Playbook의 이점:
인식 가능한 구성 파일
로 개발자도 쉽게 수정 가능- 대규모 커뮤니티 지원:
- Ansible Galaxy에서
사전 정의된 역할
활용 가능
3. **Ansible 프로젝트 구조**
- 기본 파일 구성:
ansible.cfg
: 로깅, 인벤토리, SSH 설정hosts.ini
: 서버 그룹 및 IP 매핑requirements.yml
: Galaxy 역할 설치 명시- Config 파일 주요 설정:
stdout_callback = yaml
: 로그 정리pipelining = True
: SSH 속도 향상host_key_checking = False
: 자동화 시 호스트 키 검증 생략
4. **Nomad 역할 생성 및 구성**
- 역할 생성:
ansible-galaxy init
명령으로roles/nomad-client-and-server/
생성- Task 파일 구조:
tasks/main.yml
:install_nomad.yml
과configure.yml
호출install_nomad.yml
:aptitude
,curl
, Python 패키지 설치 및 Nomad GPG 키 추가- 템플릿 활용:
templates/
폴더에 Jinja2 템플릿(.j2
) 파일로nomad.hcl
,server.hcl
,client.hcl
생성
5. **구성 파일 예제 및 실행**
- Nomad 구성 파일 예시:
nomad_nomad.hcl.j2
:
```hcl
log_level = "INFO"
data_dir = "/home/nomad"
vault {
enabled = true
address = "..."
}
```
nomad_server.hcl.j2
:
```hcl
server {
enabled = true
bootstrap_expect = 1
plugin "docker" {
config {
allow_privileged = true
}
}
}
```
- 서비스 재시작:
ansible.builtin.service
모듈로nomad
서비스restarted
상태로 변경
6. **실무 적용 및 확장성**
- 자동화 스택 확장:
- 초기 Playbook에서 복잡한 자동화 스택으로 성장
roles/
폴더에 추가 역할을 지속적으로 확장- 환경별 변수 주입:
{{ variable_name }}
심볼로Jinja2
템플릿에 환경별 변수 삽입 가능
결론
- Ansible을 활용한 인프라 자동화의 핵심 팁:
YAML 기반 Playbook
으로 인프라 구성 파일 버전 관리 가능Jinja2 템플릿
을 통해 환경별 구성 파일 재사용성 향상Terraform 대비 Agentless 구조
로 빠른 실행 및 투명한 제어 가능- 실무 적용 예시:
nomad-client-and-server
역할을 통해 Nomad 서버 구성 및 서비스 재시작 자동화 가능