본문 바로가기
IaC/Ansible

동적 인벤토리를 활용해 EC2 서버를 Ansible 그룹에 등록

by 홍띠 2023. 3. 5.

동적 인벤토리를 제공하는 플러그인을 사용하면 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: