Ansible 모듈의 정의 및 작동 방식

URL 복사

Ansible® 모듈은 로컬 머신, API(애플리케이션 프로그래밍 인터페이스) 또는 원격 호스트에서 작업을 수행하는 작은 프로그램입니다. 모듈은 주로 Python 코드로 표현되며, 특정 자동화 태스크가 언제, 어디에서 실행되고 어떤 사용자가 이를 실행하는지를 정의하는 메타데이터를 포함하고 있습니다. Ansible 오토메이션 허브Ansible Galaxy 등의 리포지토리에는 다운로드할 수 있는 수천 개의 Ansible 모듈이 존재하지만, 사용자 정의 모듈을 직접 생성하여 이를 조직이나 더 큰 규모의 Ansible 커뮤니티 내에서 다른 Ansible 사용자와 공유할 수도 있습니다.

모듈은 네트워킹, 프로비저닝, 보안, 클라우드 관리, 사용자 관리, 구성 관리 및 통신과 같은 다양한 활용 사례에 대해 IT 기능을 수행할 수 있습니다. Ansible 모듈이 이러한 활용 사례들을 어떻게 자동화하는지 이해하려면 모듈과 Ansible 자동화의 다른 핵심 구성 요소(태스크, 플레이, 플레이북, 롤 등) 간의 관계를 이해하는 것이 중요합니다.

  • 태스크: 관리되는 호스트에 적용되는 작업을 정의하지만, 어떤 호스트에 적용되는지는 명시하지 않습니다. 호스트에서 실행할 태스크 내에서 모듈을 호출할 수 있지만, 해당 호스트는 태스크 외부에서 플레이 수준으로 정의됩니다.
  • 플레이: Ansible 실행의 핵심 단위인 플레이는 관리되는 특정 호스트를 대상으로 하는 태스크 및 맵 목록을 포함합니다. 또한 플레이는 변수를 포함하고 있으며, 더욱 복잡한 활용 사례에서는 롤을 포함할 수 있습니다.
  • Ansible Playbook: 한 개 이상의 플레이를 포함합니다. 플레이북은 사람이 읽을 수 있고 공유하기 간편한 YAML로 작성됩니다.
  • Ansible Role: Ansible 콘텐츠 패키지로, 플레이 내에서 사용하는 태스크, 핸들러, 변수, 플러그인, 템플릿, 파일이 포함되어 있습니다. Ansible Role은 플레이로 가져오거나, 다른 플레이 또는 플레이북에서 재사용하거나, 다른 자동화 사용자가 사용하도록 공유할 수 있습니다.
  • 컬렉션: 자동화 개발자가 더욱 빠르게 작업하고 생산성을 향상할 수 있도록 설계된 Ansible 콘텐츠 번들입니다. 컬렉션은 모듈을 패키징하고 공유하는 데 가장 선호되는 방식입니다.
  • 플러그인: Ansible의 핵심 기능을 기반으로 구축된 코드 조각이며, 대체로 제어 노드에서 실행됩니다. 모듈은 플러그인의 한 유형으로, 보통 제어 노드가 아닌 하나의 특정 대상에 대해 태스크를 실행합니다. 

태스크가 완료해야 할 작업이라면, 모듈은 이러한 작업을 실제로 완료하는 데 필요한 툴이라고 생각할 수 있습니다. 태스크는 실행해야 하는 작업을 정의하고, 모듈은 이러한 작업을 달성하기 위해 관리되는 호스트에서 작업을 실행하고, 작업이 완료되면 JSON 형식으로 반환 값을 수집합니다.

모듈은 보통 플레이북의 라이브러리에 저장되어 플레이북이 관련 태스크를 실행할 때 실행되지만, 롤 또는 컬렉션 내에 포함되어 있을 수도 있습니다. Ansible Role을 플레이북으로 가져올 때 롤 디렉터리의 모듈은 해당 롤에 포함된 하나 이상의 태스크를 실행합니다. 단일 플레이에서 작성된 모듈은 단 한 번만 사용할 수 있지만, 롤 내에 포함된 모듈은 플레이북 내에서 롤이 호출될 때마다 실행됩니다.

다음 3가지 예시 모듈은 Ansible Core와 모든 Ansible 설치에 포함되어 있습니다.

  • dnf 모듈(ansible.builtin.dnf)- Fedora용 기본 소프트웨어 패키지 관리자인 dnf 패키지 관리자를 통해 패키지와 그룹을 설치, 업그레이드, 삭제합니다.

  • 서비스 모듈(ansible.builtin.service)- 원격 호스트에서 서비스를 관리합니다. 작업 예시로는 서비스를 시작, 중단, 재시작하는 작업이 포함되나 이에 국한되지는 않습니다.

  • 커맨드 모듈(ansible.builtin.command)- 대상에 대해 커맨드를 실행합니다.

기존 Ansible 모듈이 자동화 활용 사례에 충분하지 않다면, 자체 모듈을 생성하여 특정 작업을 완료할 수 있습니다. 모듈을 생성하는 프로세스는 원하는 자동화 태스크의 복잡성에 따라 다를 수 있지만, 다음을 통해 자체 모듈을 개발할 수 있습니다.

  1. 리포지토리에서 라이브러리 디렉터리 생성
  2. 라이브러리 디렉터리 내에서 Python 또는 선호하는 프로그래밍 언어로 모듈 파일 생성
  3. 라이브러리 디렉터리에서 테스트 플레이북 개발
  4. 플레이북을 실행하여 모듈 테스트

모듈은 간결해야 하며 매우 구체적인 문제 해결을 목표로 해야 손쉽게 모듈을 테스트, 사용, 재사용 및 공유할 수 있습니다. 또한 모듈은 인수를 수용하고 멱등성을 가지는 명확한 인터페이스를 제공해야 합니다. 즉 현재 노드 상태가 최종적으로 원하는 상태와 일치한다는 것을 감지한 경우 변경 사항을 만들어서는 안 됩니다.

Ansible 콘텐츠 개발을 막 시작한 사용자나 모듈 생성 프로세스를 간소화하려는 사용자는 콘텐츠 빌더와 같은 커뮤니티 툴을 사용하여 네트워킹, 보안, 클라우드 콘텐츠 등의 활용 사례를 위한 모듈과 기타 Ansible 플러그인을 생성할 수 있습니다.

다른 유형의 Ansible 콘텐츠와 같이 Ansible 모듈은 공유가 가능하도록 설계되었습니다. Red Hat® Ansible Automation Platform 서브스크립션을 통해 컬렉션에 모듈을 패키징하여 이를 Ansible 오토메이션 허브에 업로드하거나 프라이빗 오토메이션 허브를 통해 엔터프라이즈 전반에 이를 공유할 수 있습니다. 또한 커뮤니티 사용자와 Ansible 콘텐츠를 공유하기 위한 무료 리포지토리인 Ansible Galaxy에 모듈을 배포할 수도 있습니다.

모듈은 플레이북 실행의 핵심 역할을 하지만, 이벤트 기반 자동화를 통해 보다 고도화된 사전 예방적 IT 관리 접근 방식을 취하려는 조직에도 유용합니다.

이벤트 기반 자동화는 IT 이벤트에서 자동화된 작업까지 데이터를 연결하므로, 문제 대응이나 해결에 수작업의 필요성이 줄어듭니다. 이벤트는 IT 인프라 관리 또는 서비스 제공에 영향을 미치는 모든 상황을 의미합니다.

Red Hat Ansible Automation Platform에 포함된 기능이자, 이벤트 기반 자동화를 활용하려는 자동화 팀을 위한 통합 솔루션인 Event-Driven Ansible은 Ansible Rulebook을 사용하여 정의된 적절한 작업(플레이북, 롤, 템플릿 및 모듈 실행 등)을 통해 이벤트에 대응합니다. 룰북은 조건부 ‘if-this-then-that’ 명령을 사용하여 운영 중단 시 문제 해결 플레이북을 실행하는 등의 일상적인 태스크를 자동화하도록 지원합니다.

이벤트 소스의 데이터가 룰북에 정의된 조건을 충족할 때 Ansible Automation Platform은 정의된 작업을 트리거합니다. 여기에는 매우 구체적인 작업을 실행하기 위해 전체 플레이북 또는 단일 모듈을 실행하는 작업이 포함될 수 있으며, 이벤트 발생 시 수행되는 작업과 룰북에서 정의한 내용에 따라 대응이 달라집니다.

아래 예시는 웹후크 소스의 이벤트가 룰북에서 정의된 조건을 충족할 때 어떻게 디버그 모듈이 트리거되는지를 보여줍니다.

rulebook.yml:

--- - name: Listen for events on a webhook hosts: all ## Define our source for events sources: - ansible.eda.webhook: host: 0.0.0.0 port: 5000 ## Define the conditions we are looking for rules: - name: Say Hello condition: event.payload.message == "Ansible is super cool" ## Define the action we should take should the condition be met action: run_playbook: name: say-what.yml 

Say-what.yml 플레이북:

- hosts: localhost connection: local tasks: - debug: msg: "Thank you, my friend!" 

이 경우, 룰북은 정의된 조건이 충족되었을 때 say-what.yml 플레이북을 실행할 것을 구체적으로 명시하고 있습니다. 디버그 모듈이 say-what.yml 플레이북에 포함되어 있으므로 플레이북이 실행될 때마다 실행됩니다.

Ansible Automation Platform에 포함된 Event-Driven Ansible은 신속하고 효율적인 IT 서비스 제공을 지원하는 데 필요한 이벤트 처리 기능을 제공하는 동시에 수동 개입 없이도 태스크를 완료할 수 있도록 지원하여, 조직이 더 중요한 프로젝트에 집중할 시간을 확보할 수 있습니다.

이벤트 기반 자동화가 이벤트 발생 시점을 확인하기 위해 제3사 모니터링 툴에 의존하기 때문에 이미 사용 중인 플랫폼 및 툴과 통합된 Ansible 콘텐츠를 사용하면 더욱 효율적이고 자동화된 워크플로우로 쉽게 전환할 수 있습니다. Red Hat Ansible Automation Platform 서브스크립션을 통해 Ansible Content Collections의 형태로 수천 개의 모듈, 롤, 플러그인, 도큐멘테이션 번들에 액세스할 수 있습니다. 여기에는 Red Hat Ansible Certified Content와 Red Hat 및 Red Hat 파트너의 Ansible 검증 콘텐츠가 포함되며, 모두 Ansible 오토메이션 허브를 통해 다운로드할 수 있습니다.

추가 자료

문서

Ansible 기본 사항 학습하기

Ansible은 프로비저닝 및 구성 관리와 같은 IT 프로세스를 자동화합니다. 여기서 소개하는 핵심 개념을 통해 Ansible의 기본 사항을 학습하세요.

문서

비즈니스 프로세스 관리란 무엇일까요?

비즈니스 프로세스 관리(Business Process Management, BPM)는 전략적 비즈니스 목표를 달성하기 위해 엔드 투 엔드 비즈니스 프로세스를 모델링, 분석, 최적화하는 프랙티스입니다.

문서

Red Hat의 자동화를 선택해야 하는 이유

Red Hat Ansible Automation Platform에는 여러 팀에서 자동화를 공유하고 전사적 자동화를 구현하는 데 필요한 모든 툴이 포함되어 있습니다.

자동화에 대한 자세한 내용

제품

다양한 시각으로 고객의 상황을 파악하고 이를 바탕으로 고객의 과제를 분석하여 종합적이고 비용 효율적인 솔루션을 통해 문제를 해결하도록 돕는 전략적인 조언자입니다.

자동화 과정의 어느 단계에 있든지 상관없이 전사적 자동화를 구현할 수 있는 플랫폼입니다.

리소스

교육

무료 교육 과정

Ansible Essentials: Simplicity in Automation Technical Overview

무료 교육 과정

Red Hat Ansible Automation for SAP