[Ansible] 2) 특정 그룹에만 명령 전달하기

Hyun-Sung Kim·2025년 1월 31일

Ansible

목록 보기
2/3
post-thumbnail

Windows와 Linux 그룹핑

AWS 계정 내에 Windows와 Linux 서버가 혼재되어 있는 환경일 경우, 아래와 같이 ansible inventory 파일 상에서 OS 종류에 따라 그룹을 관리할 경우 각 OS 종류에 따른 각기 다른 명령어 전달을 손쉽게 할 수 있습니다.

<aws_ec2.yaml>

여러 설정 중에, 아래 필수 값들을 지정해 줍니다.

plugin: amazon.aws.aws_ec2
regions:
  - us-west-2
filters:
  instance-state-name : running
keyed_groups:
  - key: tags.OS
    prefix: os_
host_key: private_ip_address
hostnames:
  - private-ip-address
  • keyed_groups:
    • key: tags.OS : EC2 instance의 'OS' 태그를 기준으로 분류
      prefix: os_ : 그룹 이름 접두사
  • compose
    - Ansible Dynamic Inventory에서 사용하는 compose 구문은 호스트 변수를 재정의하는 기능을 제공합니다.
    • ansible_host가 제대로 설정되지 않으면 기본 속성(예: public IP)을 사용합니다.
  • compose: ansible_host
    - Ansible에서 호스트 접근 시 사용할 주소

<Windows와 Linux 그룹핑 결과>


ansible 명령어 실행

< ansible 명령어 구문 >

ansible -i <인벤토리 파일> <그룹명> -m <명령어>

< ping 테스트 >

AWS 계정 내에, 동적으로 가져온 인벤토리를 통해 특정 명령을 수행할 수 있습니다.

  • 동적으로 가져온 인벤토리 전체 서버에 ping 테스트

    ansible -i aws_ec2.yaml all -m ping

  • 동적으로 가져온 인벤토리 목록 중에, Linux 그룹에만 ping 테스트

    ansible -i aws_ec2.yaml os__Linux -m ping

    - 동적으로 생성된 그룹 os_Linux 에 속한 모든 호스트에서 ping 모듈을 실행합니다.
  • 동적으로 가져온 인벤토리 목록 중에, Windows 그룹에만 ping 테스트

    ansible -i aws_ec2.yaml os__Windows -m win_ping

'os linux'그룹에만 ping 테스트 명령을 전달한 결과, 3대 중 2대에 대해 정상적으로 수행 결과값이 반환됐습니다.

※ 위 접근 실패된 서버(빨간색 표시)는, ansible 서버로부터 통신 허용을 해 놓지 않은 경우입니다.)


시나리오별 명령 전달 예시

  • 동적으로 가져온 목록에서 특정 ip 주소에만 ping 테스트

    ansible -i inventory.yaml {ip주소} -m ping

  • 원격서버에서 'uptime' 명령 실행하기

    ansible -i inventory.yaml os__Linux -m shell -a "uptime"

  • Linux 그룹에 속한 모든 호스트에서 nginx 패키지를 설치

    ansible -i inventory.yaml os__Linux -m yum -a "name=nginx state=present"

  • 파일을 모든 호스트에 복사

    ansible -i inventory.yaml all -m copy -a "src=/local/file dest=/remote/path"

profile
Cloud Engineer

0개의 댓글