본문으로 바로가기

AWS 앤서블로 관리하기 -1 (Dynamic inventory 생성)

category Ansible 2021. 6. 30. 00:18
반응형

동적 인벤토리를 생성 해서 내 AWS 계정에 존재하는 인스턴스를 자동으로 인벤토리에 할당하고 그것을 불러오는 작업을 할 것이다. 

 

동적인벤토리를 사용하는 이유는 간단하다. 먼저 인스턴스를 생성할 때 ip를 고정해서 생성하지도 않을 것이고, 오토스케일 기능을 활용하다 보면 인스턴스가 줄어 들기도 하면서 늘어나기도 할 것인데 그 정보를 그때 그때 받아 들일 수 있도록 하기 위함이다.

 

실습은 https://devopscube.com/setup-ansible-aws-dynamic-inventory/ 을 참고하여 진행 하였다.

 

준비 : Centos7 (앤서블 코어 노드)

 

필요한 도구 :

  • 파이썬 3.8 버전
  • boto3
  • aws 접속 키
  • ansible 2.11.2 ver

파이썬 3.8 버전이 필요한 이유는 aws의 리소스들에 접근이 가능한 boto3 라이브러리를 사용하기 위해서 이다.

2.x 버전대에서는 boto3 라이브러리를 사용하지 못한다.  그리고 2020년 이전에는 aws Dynamic inventory를 사용하기 위해 ec2.py 와 ec2.ini 를 이용했는데 앤서블 2.5 이상 버전부터는 aws dynamic inventory를 사용하기 위해

ec2 plugin을 사용한다고 한다.

 

필요한 도구 설치

1. Python3.8 설치

Python 3.8 설치하고 진행하는 과정은 https://it-hangil.tistory.com/89

 

Centos Python 3.8 설치

Centos7 에는 기본적으로 파이썬이 내장 돼 있지만 버전은 2.7.5 버전이다. 파이썬 버전을 3.8로 설치하고 기본 파이썬을 3.8로 설정해보자. 1. 플러그인 설치 yum install gcc openssl-devel bzip2-devel libffi-..

it-hangil.tistory.com

이 글을 참조해서 진행하면 될듯 하다 !

2. ansible 설치

pip3.8 install ansible

에러발생 

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-54 ho7nw5/cryptography/

 

조치

pip3.8 install --upgrade --ignore-installed pip setuptools

후 다시 pip3 install ansible 설치를 진행 해주면 된다.

 

yum이 아닌 pip3로 설치하는 이유는 ansible이 기본으로 참조하는 파이썬 버전을 3버전대로 사용하기 위해서 이다.

Python 3 Support — Ansible Documentation

 

Python 3 Support — Ansible Documentation

Ansible 2.5 and above work with Python 3. Previous to 2.5, using Python 3 was considered a tech preview. This topic discusses how to set up your controller and managed machines to use Python 3. What to do if an incompatibility is found We have spent severa

docs.ansible.com

3. ansible 버전 확인

2.11.2 버전에 python version = 3.8.11 버전이 설정 된 것을 확인 가능하다.

*ansible 2.11 버전은 기본적으로 파이썬 3.8 이상만을 지원하니 버전을 잘 맞춰줘야 한다.

 

4. boto3 라이브러리 설치

pip3.8 install boto3

 

이제 기본 구성은 끝이 났다. 이제 AWS ec2 instance 정보를 자동으로 인벤토리에 불러올 수 있도록

Dynamic inventory 구성을 하자. 


 

동적 인벤토리 생성 

 

1. aws_ec2.yaml 이라는 이름의 인벤토리 생성 및 설정 (/ansible/inventory/aws_ec2.yaml)

mkdir /ansible
mkdir /ansible/inventory/
vi /ansible/inventory/aws_ec2.yaml

aws_ec2파일 설정 (aws_access_key와 secret_key는 aws 내 보안 자격증명에서 발급 받으면 된다.)

---
plugin: aws_ec2
aws_access_key: <YOUR-AWS-ACCESS-KEY-HERE>
aws_secret_key: <YOUR-AWS-SECRET-KEY-HERE>
keyed_groups:
  - key: tags
    prefix: tag

2. 앤서블 설정 파일(ansible.cfg) 열고 [inventory] 섹션에 aws_ec2 플러그인 추가

[inventory]
enable_plugins = aws_ec2, yaml

3. 인벤토리 정보 불러오기

ansible-inventory --graph

ansible-inventory --list | grep "public_ip_address"

4. 파일 암호화 

 

aws에 접근하는 접근키를 파일로 저장할 경우 키가 유출될 위험이 있다. 가장 권장하는 방법은 관리하고자 하는 인스턴스에 IAM 롤을 부여하는 방법이지만. 최종목표가 클라우드 리소스를 오토스케일링 하고 그것들을 제어하는 것이기 때문에 iam 역할 부여보다는 키 파일로 저장하고 키 파일을 ansible-vault 기능을 활용하여 암호화를 할것이다.

ansible-vault encrypt aws_ec2.yaml

비밀번호를 입력하면 이제 내가 지정한 파일은 암호화가 될것이다.

저 파일을 사용하려면 --ask-vault-pass 옵션을 넣고, 패스워드를 입력해야 한다.

 

반응형

'Ansible' 카테고리의 다른 글

Ansible 사용해서 Ec2 플레이북 배포  (0) 2021.07.04
Ansible로 오픈스택 연결하기(Dynamic inventory)  (0) 2021.07.02
Ansible 정적 인벤터리  (0) 2021.06.21
Playbook 모듈 작성 연습  (0) 2021.06.21
Ansible Playbook 활용.  (0) 2021.06.21