< Ansible 이란? >
Ansible은 IT 자동화를 가능하게 하는 오픈 소스 툴입니다.
서버 관리, 애플리케이션 배포, 네트워크 설정 등을 효율적으로 관리 및 자동화하는 데 사용됩니다.
< Ansible 장점 >
Ansible은 에이전트리스(Agentless) 방식이기 때문에, 추가 소프트웨어나 에이전트를 클라이언트 머신에 설치할 필요가 없습니다.
단순히 SSH를 통해 목표 시스템에 접속해 작업을 수행하므로, 배포와 관리가 매우 간단합니다.
제어 노드(control node)에만 Ansible을 설치하면 되고, 관리 대상 리소스에는 SSH와 Python만 필요합니다.
< Dynamic Inventory >
클라우드 환경에서는 EC2 인스턴스가 자동으로 생성되거나 종료되는 경우가 빈번합니다. (예: Auto Scaling 등)
이제 Dynamic Inventory를 구성해서, AWS 환경의 서버들의 목록을 가져오는 방법을 설명합니다.
<사전 요구 사항>
1) Ansible 설치
amazon-linux-extras enable ansible2
yum clean all
yum install ansible -y
2) boto3 설치 / 확인
python3 -m pip show boto3

python
import boto3
print(boto3._ version__)

python3 -m pip install boto3 ## 설치
python3 -m pip list | grep boto3 ## 설치 확인
ansible을 실행할 Node에서 EC2 instance들의 목록을 조회하려면 관련 AWS 권한들이 해당 Node에 할당해 줘야 합니다.
필요한 자격증명이 준비되어 있지 않다면, 다음 방법으로 할당합니다.
ansible을 실행할 Node에서, 현재 할당된 AWS 자격증명을 확인합니다.
aws sts get-caller-identity
적당한 권한이 할당되었다면, 다음과 같이 EC2 instance 조회가 가능해 진다.
aws ec2 describe-instances | more

ansible 이용 시, 환경 설정들을 해당 파일에서 선언해 준다.
[defaults]
inventory = ./aws_ec2.yaml
host_key_checking = False
interpreter_python = auto_silent
remote_port = 22
remote_user = ec2-user
private_key_file = /home/ec2-user/pingping95-key.pem
[inventory]
enable_plugins = aws_ec2
여러 설정 중에, 아래 필수 값들을 지정해 줍니다.
plugin: amazon.aws.aws_ec2
regions:
- us-west-2
filters:
instance-state-name : running
keyed_groups:
- key: tags.Name
host_key: private_ip_address
hostnames:
- private-ip-address
위 설정한 keyed_groups대로 그룹핑이 된 것을 아래와 같이 확인 가능합니다.
ansible-inventory -i aws_ec2.yml --graph


이렇게 동적으로 생성된 그룹은 ansible playbook에서 사용할 수 있습니다.