AWS

[AWS][Ansible] AWX를 통한 Ansible 가시화 및 스크립트 실행

Always-Try 2022. 2. 3. 00:15
https://velog.io/@leesjpr/AnsibleAWX-%EA%B0%9C%EB%85%90-%EB%B0%8F-Install
https://tech.osci.kr/space/TB/21098102834

위 2개의 포스팅을 참고하여 설치 및 테스트 진행했습니다.

 

 

설치 과정 중 오류나는 부분 수정

- 아래 부분에서 curl 대신 wget https://github.com/docker/compose/releases/download/1.24.0/docker-compose-Linux-x86_64

- sudo pip3 install docker-compose==1.24.0 (3번째 설치시에는 다시 발생 안함)
- ansible-playbook -i inventory install.yml 실행 시 Fail 발생 시

-> 1) inventory 에서 admin_password 설정 

-> 2) 아래 설정 










설치가 완료되면 아래 화면이 뜬다.

 

Project를 위해 보통은 Git을 연동하지만 테스트로 Manual을 선택해봤는데, 아래 에러가 뜨면서 진행이 안된다. 수동으로 해당 폴더를 생성해주어도 동일하다.

 

inventory 파일에 project_data_dir 부분의 주석을 해제하고 ansible-playbook -i inventory install.yml 를 통해 다시 배포한다. 

 

재배포 이후 다시 project로 진입하면 아래와 같이 에러가 발생하지 않고 진행 가능하다.

 

 

 

 

이제 간단하게 테스트를 진행해보자.

 

테스트 목적은 다음과 같다.

  • 대상 인스턴스:
    • 10.0.0.198 / host1 / ec2-user / 키페어는 eks-course.pem
      10.0.0.157 / host2 / ubuntu / 키페어는 eks-course.pem
  • 목적: 
    • test.sh 스크립트 실행
      touch test.txt​
       
  • 방법
    • Resource > Inventories 및 Host 등록
      • 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 가 제대로 수행이 안되는 경우가 있었는데, 호스트를 삭제하고 다시 등록하니 성공했다.
        • 혹시 아래와 같이 나온다면 호스트 계정의 권한 문제이다. 아래와 같이 권한을 높일 수 있는 설정을 해주자.


      • 만약 회사에서 기본적으로 생성하는 공통 계정 및 암호화키가 있다면 해당 계정 및 키의 개수만큼 등록해주고, 프로젝트를 생성할 때 계정별로 나눠서 생성하면 될 것으로 보인다. (더 좋은 방법 있으면 댓글로 알려주세요~~)

 

오늘은 여기까지 ~~