Backend Developer

목표를 위해 시스템을, 시스템을 위해 회고를

Ansible 이란


Ansible 이란

  • Python으로 구현된 오픈소스로, 서버의 프로비저닝, SW 배포 등의 자동화를 관리해주는 도구(Infrastructure as Code)
  • 규격화된 환경(인벤토리)과 모듈(플레이북) 등을 통해 배포되는 모든 서버가 동일한 환경을 유지할 수 있도록 해줍니다.

    서버 프로비저닝(Provisioning)

    • 필요한 리소스를 기반으로 네트워크에서 사용될 서버를 설정하는 프로세스로,
      새로운 시스템을 생성한 후 가동 상태로 만드는데 필요한 모든 작업은 물론이고 해당 시스템에 대해 원하는 상태를 정의하는 작업도 포함됩니다.
    • 즉, 사용자의 요구에 맞게 서버를 설정해서 필요 시 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말합니다.

    Infrastructure as Code

    • 컴퓨터의 인프라 구성을 소프트웨어를 개발하듯이 코드로 작성하는 것을 의미

Ansible 특징

  • Agentless
    • 타 자동화 도구들은 타겟대상들에 Agent 설치 기반의 Pull 방식으로 동작하는 것에 비해 Ansible은 타겟 대상들에 Agentless 기반의 Push 방식으로 동작하기 때문에 기술적, 지리적 제한이 보다 넓다는 장점이 있습니다.
  • 멱등성
    • 어떤 연상이 여러번 수행되더라도 결과가 달라지지 않는 성질
    • Ansible 또한 동일한 모듈을 반복 실행해도 결과가 동일하게 출력시켜, 결과가 달라지지 않도록 구성되어 멱등성을 일관되게 수행할 수 있습니다.

Ansible 구성요소

  • 인벤토리 (inventory)
    • 프로비저닝, 배포 등의 대상을 정의한 파일
    • 쉽게 말하면, host를 정리한 파일이고 Alias을 설정하거나 그룹으로 묶거나 ssh 접근방식(IP, Port, User 등)을 기록해 놓을 수 있습니다.
  • 플레이북 (playbook)
    • 인벤토리에 작성된 서버들을 대상으로 특정 행위(프로비저닝, 배포)에 대해 정의한 파일
    • 인벤토리에 기록된 그룹 및 Alias을 통해 task 단위로 묶어서 사용이 가능합니다.