본문 바로가기
클라우드/AWS

Ansible) 앤서블 동적 인벤토리, AWS 동적 인벤토리 사용해보기

by 빈스터디 2023. 3. 29.

동적 인벤토리란?

> 인벤토리를 동적으로 받아와서 작성하고 실행할 수 있도록 하는 것

> host 수가 고정되어 있는 경우에는 정적 인벤토리를 작성하면 되지만,

aws ec2를 사용할 때와 같이 가상머신을 유동적으로 사용할 경우 인벤토리 내용이 달라져야 한다.

계속 수정하기엔 무리니까..동적 인벤토리를 사용해야 하는데 

이 때는 plugin을 통해 연동하여 사용한다.

 

 

AWS 동적 인벤토리

> aws와 연동할 때는 aws_ec2라는 플러그인을 사용하여 동적 인벤토리를 사용한다.

> 인벤토리 내의 호스트 그룹은 tag로 구분한다.(선택사항)

 

> 리눅스에서 aws의 ec2에 접속할 때는 ssh가 아닌, key를 통해(key file) 접속한다.

> key형식에는 ppk와 pem이 있다. putty 말고, 리눅스에서 접속하는 거니까 pem을 사용한다.

 

 

AWS 동적 인벤토리 실습

: AWS에서 EC2 인스턴스 생성 후, 앤서블 동적 인벤토리 작성하여 앤서블로 EC2 접속한 후 메시지 출력하기

 

> EC2  인스턴스 생성) 

인스턴스 이름(Name and tags) > ubuntu > t2.micro > 키 페어 : pem으로 나중에 변환해야 하는 키 > 네트워크 설정에서 퍼블릭 IP 자동 할당 활성화 > 적당히 선택한 후 > 생성

 

아래 캡처본은 인스턴스 이름(Name and tags) 생성 부분이다.

이따가 playbook > hosts: [이름]에서도 사용될 '인스턴스 이름_키', '인스턴스 이름_값' 이다. 

 

Add additional tags를 누르면 아래와 같은 화면이 나온다.

 

 

> boto3 설치) boto3을 설치하기 위해 먼저 파이썬을 설치한 후, boto3을 설치한다.

yum install python3  # 파이썬 설치
pip3 install boto3   # boto3 설치

 

 

> ansible.cfg 파일 수정) [inventoty] 항목의 enable_plugins 주석을 해제하고, aws_ec2를 추가한다.

vi /etc/ansible/ansible.cfg   # vi 편집기로 설정 파일 접속

[inventory]
# enable inventory plugins, default: 'host_list', 'script', 'auto', 'yaml', 'ini', 'toml'
enable_plugins = host_list, virtualbox, yaml, constructed, aws_ec2  # 주석 해제 후, 추가

 

 

> 동적 인벤토리 파일) 'vi aws_ec2.yml' 명령어로 인벤토리 파일(aws_ec2.yml)을 생성한다.

참고로, 액세스 키와 시크릿 키는 aws의 '보안 자격 증명'에서 생성하였다.

---
plugin: aws_ec2
aws_access_key: [aws_액세스키]
aws_secret_key: [aws_시크릿키]
keyed_groups:
- key: tags
  prefix: tag

 

 

> Playbook 파일) 'vi playbook.yml' 명령어로 파일 생성 및 작성

- hosts: ["tag_[인스턴스 이름_키]_[인스턴스 이름_값]"]
  vars:
    ansible_ssh_private_key_file: "[pem키 경로]"
  tasks:
  - name: print   # 메시지 출력해주는 작업
    debug:
      msg: "{{ ansible_facts.default_ipv4.address }}"
    become: yes

 

 

> 실행 및 확인) 아래의 명령어로 확인한다.

ansible-playbook -i aws_ec2.yml playbook --user ubuntu

 

 

> 오류 수집 1) WARNING: UNPROTECTED PRIVATE KEY FILE!

누가봐도 오류..

키 파일이 보호되고 있지 않다는 것 같아보였다.. Permissions 0644? 

대충 키 파일 권한을 644로 바꾸라는 것 같아서 chmod 명령어를 사용하여 644로 바꿨다.

 

 

 

> 오류 수집 2)  Authentication or permission failure. In some cases, you may have been able to authenticate and did not have permissions on the target directory.

잘 보이진 않지만..

실행 및 확인 명령어를 입력할 때 뒤에 --user ubuntu를 안 적고, 그냥 실행했더니 떴던 오류이다.

root 사용자 대신 ubuntu 사용자로 하라는 것 같았다..

 

 

마지막으로, 실행 명령어를 제대로 입력하고 다시 실행해보니 무사히 출력 되었다.