동적 인벤토리를 제공하는 플러그인을 사용하면 Ansible에서 EC2 목록을 읽어와서 그룹으로 등록하여 사용 할 수 있다.
인벤토리 파일 작성
포함하거나 제외하고자 하는 필터를 지정 할 수 있고, 그룹을 정하는 기준을 정할 수도 있다.
물론, 기본적인 AWS 정보들 (Region, Credentials)를 지정해 줄 수도 있다.
# aws_ec2.yml
plugin: aws_ec2
regions:
- ap-northeast-2
- us-east-2
- us-east-1
keyed_groups: # 리전을 기준으로 그룹을 나눈다.
- key: placement.region
prefix: aws_region # 그룹 명 = prefix + key(region명)
filters: # include_filter와 같은 역할, 읽어오고자 하는 EC2의 필터를 지정한다.
tag:env: dev # "env: dev" tag가 포함된 EC2
instance-state-name: running #현재 실행상태인 EC2
exclude_filters: #제외하고자 하는 필터 지정
- tag:project: # "project: demo" tag가 있는 EC2는 제외한다.
- 'demo'
작성한 인벤토리 파일을 이용해서 EC2 서버목록 불러오기
동적 인벤토리를 적용시키기 위해서 ansible.cfg 파일에 작성한 인벤토리 파일을 포함 할 수도 있다.
하지만 나의 경우에는 다른 인벤토리 파일들과 구분해서 사용하기 위해서, 작성한 인벤토리 파일을 지정해서 쓰는 방식을 택했다.
$ ansible-inventory --graph -i inventory/aws_ec2.yml
@all:
|--@aws_ec2:
| |--ec2-xxxxx.ap-northeast-2.compute.amazonaws.com
| |--ec2-xxxxx.compute-1.amazonaws.com
|--@aws_region_ap_northeast_2:
| |--ec2-xxxxx.ap-northeast-2.compute.amazonaws.com
|--@aws_region_us_east_1:
| |--ec2-xxxxx.compute-1.amazonaws.com
|--@ungrouped: