AWS 계정 내에 Windows와 Linux 서버가 혼재되어 있는 환경일 경우, 아래와 같이 ansible inventory 파일 상에서 OS 종류에 따라 그룹을 관리할 경우 각 OS 종류에 따른 각기 다른 명령어 전달을 손쉽게 할 수 있습니다.
여러 설정 중에, 아래 필수 값들을 지정해 줍니다.
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
<Windows와 Linux 그룹핑 결과>

< ansible 명령어 구문 >
ansible -i <인벤토리 파일> <그룹명> -m <명령어>
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"