Host는 앤서블의 수행 대상이 되어지는 서버들이고, Inventories는 Host들의 집합이라고 볼 수 있다. 먼저 Inventories를 생성한다.
이후 Hosts 들을 등록한다. 이때 Inventory는 방금 전 생성한 Inventory를 선택한다. (참고로 AWX가 아닌 ansible 에서는 /etc/ansible/hosts 파일에서 Hosts 들을 등록해준다.)
Resource > Credentials 생성
Hosts 들에 접속하기 위한 계정 정보를 Credentials에 등록해준다. AWS EC2 인스턴스의 계정 정보와 함께 인스턴스를 생성할 때, 등록한 키페어를 이 화면에서 등록해준다. (서버별로 계정이 다르다면, 여러개의 계정을 등록해줘야 한다. 필자는 테스트를 위해 10.0.0.157 / host2 / ubuntu / 키페어는 eks-course.ppk 에 대한 계정 및 pem 키를 등록했다.)
Resource > Project 생성
Project는 playbook 모음을 하나의 단위로 묶어서 관리하는 메뉴이다. 참고로 playbook은 ansible 실행 스크립트라고 볼 수 있다. (보통 Git을 사용하지만 테스트를 위해 Manual 폴더를 사용한다.)
ansible 서버 프로젝트 공간 내 test.sh 스크립트 생성
ansible을 통해 배포하고 싶은 스크립트 파일을 생성한다. 위 캡처에 있는 프로젝트 기본 경로인 /var/lib/awx/projects 에 생성한다.
touch test.txt
ansible 서버 프로젝트 공간 내 touch.yml 파일 생성
프로젝트 기본 경로인 /var/lib/awx/projects에 test.sh를 배포할 yml 스크립트를 생성한다.
---
- name: Transfer and execute a script.
hosts: all
remote_user: ubuntu
tasks:
- name: Transfer the script
copy: src=test.sh dest=/home/ mode=0777
- name: Execute the script
command: sh /home/test.sh
여기서 remote_user 에 주의하자... 플레이북 실행 시 여기에 있는 계정으로 ssh 접속을 시도한다.
Resource > Projects > Job Templates 생성
위에서 만든 yml 스크립트를 실행하기 위한 작업 Set인 Job Templates를 생성한다. 프로젝트 메뉴에 진입해서 Job Templates > Add를 선택해 생성할 수 있다.
Resource > Templates에서 Job Launch
해당 메뉴에서 방금 만든 Job을 실행시켜본다. Launch 메뉴를 클릭하면 된다.
Views 에서 Jobs에서 결과 확인
Jobs 메뉴에서 앤서블 스크립트 실행 결과에 대해서 확인할 수 있다. 필자는 Credentials에 1개의 계정만 넣었기 때문에 1개에서만 성공했다. 실제로 대상 Host에 test.sh 파일로 생성된걸 볼 수 있다.
Launch 가 제대로 수행이 안되는 경우가 있었는데, 호스트를 삭제하고 다시 등록하니 성공했다.
혹시 아래와 같이 나온다면 호스트 계정의 권한 문제이다. 아래와 같이 권한을 높일 수 있는 설정을 해주자.
만약 회사에서 기본적으로 생성하는 공통 계정 및 암호화키가 있다면 해당 계정 및 키의 개수만큼 등록해주고, 프로젝트를 생성할 때 계정별로 나눠서 생성하면 될 것으로 보인다. (더 좋은 방법 있으면 댓글로 알려주세요~~)