안녕하세요. 오늘은 베스핀글로벌 DevOps실 윤영기 님이 작성해주신 앤서블 플레이북 작성 방법에 대해 소개 드리려고 합니다.
플레이북은 주로 IT 인프라, 네트워크, 보안 시스템, Github와 같은 코드 리포지토리를 자동화하는 데 사용됩니다.
플레이북은 YAML 형식으로 작성되기 때문에 기본적인 YAML 파일의 문법을 준수하여야 합니다.
명령어의 이해를 위해 아래의 AWS에 VPC를 생성하기 위한 Playbook의 예제를 살펴보도록 하겠습니다.
1번 line의 —는 yaml 도큐먼트의 시작임을 선언하는 것이며, 입력하지 않아도 동작하는 데는 문제가 없다.
4번 line의 hosts는 대상이 되는 서버를 지정하는 명령어이며, VPC를 생성할 때는 대상 서버가 없는 상태이기 때문에 localhost로 정의되어 있다. 만약, Inventory에 지정된 모든 서버를 대상으로 하려면 hosts: all 이라고 지정하면 된다.
5번 line의 connection은 Ansible이 어디에 있는 playbook을 실행할 것인지 지정하는 명령어다. connection: local은 Ansible이 설치된 서버에 있는 Playbook을 실행하겠다는 뜻이다.
6번 line의 gather_facts는 playbook의 task를 실행하기 전에 inventory에 지정된 대상 서버의 정보(cpu, memory, os 등)를 수집해오는 명령어이다. 특별히 사용해야 하는 경우가 아니라면 일반적으로 false 또는 no를 입력한다.
7번 line의 vars는 task에 사용될 변수를 지정하는 내용이다.
16번 line의 tasks는 실제 작업을 정의하는 부분이다.
17번 line의 name은 task의 이름을 의미하며, 필수 항목은 아니지만 playbook의 가독성을 위해서 그리고, 실행 로그를 쉽게 확인하기 위해서 작성하는 것이 좋다.
18번 line의 ec2_vpc_net은 Ansible에서 제공하는 AWS ec2를 생성하는 모듈 이름이다. Ansible의 AWS 모듈은 URL(https://docs.ansible.com/ansible/2.4/list_of_cloud_modules.html에서))에서 확인할 수 있다.( ※ Ansible 버전마다 제공하는 AWS 모듈이 바뀌기도 한다. 위의 ec2_vpc_net 모듈은 Ansible 2.9버전으로 업데이트되면서 amazon.aws.ec2_vpc_net 모듈로 변경이 되었다.) 2.9버전의 모듈은 URL(https://docs.ansible.com/ansible/latest/collections/index_module.html)에서 확인할 수 있다.
감사합니다:)
Written by 윤 영기 / Youngki Yoon
Software Engineer