AWX의 설치가 정상적으로 완료됐다면 다음과 같은 로그인 화면을 볼 수 있다.
설치 과정에서 ~/aws/installer/invertory 에 설정한 계정명과 패스워드를 이용해 로그인한다.
✔️ AWX 리소스 생성
AWX 리소스를 생성하기 앞서 리소스 간의 관계를 알아보자
- Projects : 플레이북이 저장된 디렉토리, 리소스
- 플레이북을 프로젝트라는 리소스로 만들 수 있다.
- Inventories : AWX를 사용할 때는 인벤토리를 별도의 파일로 만들지 않고 인벤토리 리소스를 가지고 작업한다.
- ini 형식으로 따로 만들 필요가 없다.
- 인벤토리에는 그룹을 만들 수 있고 호스트를 그룹에 넣고 그룹을 인벤토리에 넣을 수 있다.
- Credentials : 인증이 필요한 부분 ex. SSH 인증(키, 패스워드), become을 위한 sudo 인증, 파일을 암호화 시켜놨다면 vault 패스워드 등 을 관리한다.
- Templates : 3가지 리소스(Projects, Inventories, Credentials)를 묶어서 만들며 템플릿이라고 한다.
- ansible의 플레이북을 템플릿 형태로 만들어 플레이(실행)한다. → 플레이북을 실행하는 것과 완전히 동일한 작업
- Host에 접근할 때 SSH, sudo, vault 인증을 자격 증명에서 가져와서 실행한다.
- Jobs : 템플릿을 클릭하면 작업이라는 형태로 실행이된다.
정리하면 3개의 리소스를 묶어 템플릿으로 만들어 놓고 템플릿 리소스를 클릭해서 필요할 때마다 실행한다.
템플릿(즉, 플레이북)을 실행할 수 있고 예약 작업을 걸 수 있으며 실행 과정을 모니터링 할 수도 있다.
✔️ 플레이북 준비
우선 AWX에서 사용할 플레이북을 준비한다.
[vagrant@controller ~]$ sudo cd /var/lib/awx/projects/
[vagrant@controller ~]$ ls -ld .
drwx------. 12 vagrant vagrant 4096 Apr 20 06:00 .
root 권한만 가능하므로 sudo 명령어를 이용해 디렉토리 생성하기
sudo mkdir /var/lib/awx/projects/test-awx
sudo vi /var/lib/awx/projects/test-awx/debug.yaml
[vagrant@controller projects]$ sudo -i
[root@controller ~]# cd /var/lib/awx/projects/
[root@controller projects]# mkdir test-awx
[root@controller projects]# cd test-awx
[root@controller test-awx]# vi debug.yaml
debug.yaml
- hosts: all
tasks: all
- debug:
msg: hello AWS World
주의 할 점! AWX를 사용할 때는 인터페이스 상에서 인벤토리를 만들어 템플릿으로 제공하는 형태이기 때문에
yaml 파일에서 미리 특정 호스트를 지정하지 않도록 한다.
어떤 호스트에서 작업을 할 것인지는 AWX 웹 인터페이스에서 결정할 것이므로 항상 모든 호스트를 의미하는 all을 지정해주는 것이 좋다.
✔️ Projects
좌측의 네비게이션 바에서 Projects 탭에 들어간다.
기입 항목별로 *
표시는 필수 항목이다.
Organization은 default가 기본으로 잡혀있다.
Source Control Credential Type 은 Project의 목적이 플레이북을 가지는 것이기 때문에 이 플레이북이 어디에 있느냐를 지정하는 것이다.
현재 실행할 플레이북이 시스템 상에 있으므로 Manual을 지정해주고
Project Base Path에는 앞서 플레이북을 배치한 /var/lib/awx/projects 디렉토리를 지정한다.
여기서 만약 Git을 지정하면 Git 주소에서 가져오게 된다.
Playbook Directory 에는 사용할 플레이북을 지정하면 된다.
주의할 점은 "awx" 사용자 계정이 사용할 수 있도록 권한을 지정해야 하는 것이다.
현재 프로젝트에 우리가 방금 만든 test-awx-project 가 포함된 상태이다.
자세한 정보를 확인하는 UI이며 이름, Organization, 디렉토리를 확인할 수 있다.
다시 프로젝트 탭에 들어가면 test-awx-project가 만들어져 있는 것을 확인할 수 있다.
✔️ inventory 생성
인벤토리의 이름을 지정하고 variables 에는 인벤토리 변수를 입력한다. (yaml or json)
플레이북을 실행할 때 별다른 변수가 필요하지 않으면 비워둔다.
inventory.ini 파일을 만드는 것과 같은 개념이다.
Groups을 누르면 그룹을 만드는 것이고 Hosts를 누르면 그룹이 없는 Host를 만드는 것이다.
✔️ 그룹 생성
그룹을 만들고 그룹에 부여할 변수가 있으면 variables에 적는다.
test-awx-inventory의 Groups에 test-awx-group이 위치한다.
여기서 호스트를 눌러 추가한다.
이미 존재하는 호스트냐 (이미 이 awx에서 한번이라도 정의한 적 있는 호스트이냐)
새로운 호스트냐를 선택해서 저장한다.
실제로 통신 가능한 호스트를 적어주고 저장한다.
기본적으로 on/off 를 통해 끄고 켤 수 있으며 off 상태라면 이 그룹에 속해 있더라도 작업이 이뤄지지 않는다.
즉, playbook이 실행되지 않는다.
한번이라도 등록된 호스트라면 Hosts 목록에 뜨게 된다.
✔️ credential 생성
machine : ssh로 접속하는 system 을 말한다.
vault : 실제로 플레이북 내에 ansible-vault가 적용되어 있으면 복호화를 위한 설정이 필요하다.
머신(SSH)에 사용할 유저를 지정하고 유저의 패스워드를 입력하거나 키 기반 인증을 위해 키를 등록한다.
vagrant로 접속해서 .ssh/id_rsa의 private key 정보를 복사 붙여넣기 해준다.
private key의 passphrase를 지정했다면 입력해주고 Prompt on launch는 직접 입력할테니 프롬프트를 띄우라는 것이다.
권한 상승 하는 방법은 sudo이고 권한 상승 하기 위한 사용자는 root이며 권한 상승을 위한 패스워드는 필요하지 않다.
save 해서 자격 증명을 생성한다.
✔️ template 생성
이제 템플릿을 생성한다.
Job Type
- Run : default
- Check : ansible-playbook 실행 시 --check 옵션과 유사
인벤토리는 무엇으로 할 것인지 선택하고
프로젝트는 사용할 프로젝트와 프로젝트가 가진 우리가 사용할 플레이북을 선택한다.
플레이북을 실행하기 위한 자격 증명도 선택한다.
인벤토리, 자격 증명, 프로젝트를 조합해 템플릿을 생성한다.
템플릿이 생성되었으며 오른쪽의 로켓 표시는 push 버튼이라고 한다.
이 버튼을 누르면 Job 이라고 하는 작업이 실행되고 (== playbook이 실행되는 것과 동일)
플레이북을 실행하면 결과가 나오며 실시간으로 실행되는 과정을 볼 수 있다.
Dashboard에 가면 전체 작업이 어떻게 수행되었는지 확인할 수 있다.
이런식으로 템플릿을 쭉 여러개 만들어놓고 필요에 따라 실행하면 되는 방식이다.
템플릿의 이름을 눌러서 Notification, schedule을 누르면 이 템플릿을 주기적으로 실행할 수 있다.
리눅스의 크론탭 처럼 주기적으로 작업을 예약할 수 있다.
얼마나 자주 실행할 것인지 언제 끝낼 것인지 언제부터 시작할 것인지 지정할 수 있다.
스케쥴러를 잡아놓으면 예약된 시간이되면 자동으로 알아서 실행된다.
Notification은 Job의 변경 사항을 알리는 것이다.
✔️ AWX 사용의 장점
ansible-playbook 명령을 통해 작업을 실행했을 때는 단순히 결과만을 출력하고 끝났다면
AWX 사용은 이전에 실행했던 Job들에 대한 로그를 postSQL DB에 저장하고 있기 때문에 언제든지 살펴볼 수 있다.
'DevOps > Ansible' 카테고리의 다른 글
[Ansible] AWX 설치하기 (0) | 2022.04.21 |
---|---|
[Ansible] vault (플레이북의 암호화) (0) | 2022.04.21 |
[Ansible] ansible-galaxy 사용법 (0) | 2022.04.21 |
[Ansible] 플레이 레벨에서 작업 실행 순서 (0) | 2022.04.21 |
[Ansible] artifact 재사용 - 역할(roles) (0) | 2022.04.21 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!