Ansible로 인프라 자동화 선택 이유 | Infrastructure as Code
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

인프라 자동화를 위한 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.ymlconfigure.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 서버 구성 및 서비스 재시작 자동화 가능