앤서블의 단점을 꼽자면?
Ansible의 장점은 너무나도 많지만, 제가 생각하는 가장 큰 단점은 다른 사람과의 협업이 불편하다고 생각합니다.
왜냐하면 앤서블은 agentless방식으로 ssh로만 동작하기 때문에 버전관리 및 권한관리가 어렵습니다.
플레이북을 Git을 통해 형상관리를 할 수는 있지만, 사용자의 권한을 제약하고 플레이북을 실행을 추적하는 데 있어서 어려움이 존재합니다.
앤서블은 CLI로 동작하기 때문에 사용하는 데 있어서 어느 정도 러닝커브가 있기도 하며 플레이북을 실행시킬 수 있는 서버를 제공해야 합니다. 하지만, 세마포어(Semaphore)라는 앤서블 UI 오픈소스를 사용하면 아래와 같은 기능들로 앤서블의 단점들을 보완할 수 있다고 생각합니다 (뮤텍스와 세마포어의 세마포어가 아님주의)
- 빌드, 배포 및 롤백
- 프로젝트에 플레이북을 그룹화
- 환경, 인벤토리, 저장소 및 액세스 키 관리
- 브라우저에서 플레이북 실행. 반응형 UI는 모바일 기기에서 Semaphore 사용 가능
- 일정에 따라 플레이북 실행
- 언제든지 플레이북 실행의 자세한 로그를 확인
- 다른 사용자에게 플레이북 실행을 위임
- 플레이북 실행에 대한 알림 수신
- 지원하는 데이터베이스: MySQL, PostgreSQL, BoltDB(embedded key/value DB)
앤서블타워(Ansible Tower) vs AWX vs 세마포어(Semaphore)
이미 레드헷에서 제공하는 앤터프라이즈용 앤서블 타워(Ansible Tower)와 AWX라는 오픈소스가 존재하기는 합니다. AWX와 세마포어를 둘 다 사용해 본 결과, 세마포어가 비교적 경량화되어 있고, 간단한 설정과 더 단순하고 직관적인 UI를 제공해서 개인적으로 저는 세마포어의 사용자 경험이 더 좋았습니다.
따라서, 고급 기능과 더 다양한 지원을 필요로 하는 규모가 있는 기업에 적합할 수는 있지만, 경량화된 솔루션이나 개발환경 등에서 사용하는 경우 세마포어를 한 번 사용해 보시는 것을 추천드립니다.
세마포어 설치
설치는 snap, package manager, docker, binary file의 4가지 방식을 지원합니다.
그중에서 package manager를 이용하여 설치를 해보겠습니다.
semaphore setup 명령어를 통해 다양한 옵션들을 선택하여 손쉽게 설치할 수 있습니다.
- Database
- 내장 DB(Bolt) 사용
- 알람 기능
- Slack 사용
- 유저명
- spjang
- 플레이북 경로
- /tmp/semaphore
# 설치
cd
pwd
wget https://github.com/ansible-semaphore/semaphore/releases/download/v2.9.45/semaphore_2.9.45_linux_amd64.deb
sudo dpkg -i semaphore_2.9.45_linux_amd64.deb
# Setup Semaphore by using the following command
semaphore setup
1. Set up configuration for a MySQL/MariaDB database
2. Set up a path for your playbooks (auto-created)
3. Run database Migrations
4. Set up initial semaphore user & password
What database to use:
1 - MySQL
2 - BoltDB
3 - PostgreSQL
(default 1): 2
...
db filename (default /home/ubuntu/database.boltdb):
Playbook path (default /tmp/semaphore):
Public URL (optional, example: https://example.com/semaphore):
Enable email alerts? (yes/no) (default no):
Enable telegram alerts? (yes/no) (default no):
Enable slack alerts? (yes/no) (default no): yes
Slack Webhook URL: https://hooks.slack.com/services/XXXXX-XXXXX ~
Enable LDAP authentication? (yes/no) (default no):
Config output directory (default /home/ubuntu/my-ansible):
...
> Username: spjang # 각자 자신의 닉네임
> Email: spjang@localhost
> Your name: spjang # 각자 자신의 닉네임
> Password: spjang
# ./semaphore server --config /home/ubuntu/config.json
# nohup ./semaphore server --config /home/ubuntu/config.json &
# You can login with admin@localhost or spjang.
# config.json 파일 확인
cat ./config.json | jq
# (터미널 2) Now you can run Semaphore : 태스크 실행 시 로그 확인 용도로 계속 터미널 열어 둠
# nohup semaphore server --config=./config.json &
semaphore service --config=./config.json
# Semaphore will be available via this URL
echo -e "Semaphore Web = http://$(curl -s ipinfo.io/ip):3000"
# CLI 확인
semaphore -h
semaphore version
semaphore user list
# tmp project home
mkdir /tmp/semaphore
편리한 사용을 위해서 세마포어를 서비스로 등록합니다.
# Replace /path/to/semaphore and /path/to/config.json to your semaphore and config file path
sudo cat > /etc/systemd/system/semaphore.service <https://github.com/ansible-semaphore/semaphore
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/path/to/semaphore service --config=/path/to/config.json
SyslogIdentifier=semaphore
Restart=always
RestartSec=10s
[Install]
WantedBy=multi-user.target
EOF
# Start the Semaphore service
sudo systemctl daemon-reload
sudo systemctl start semaphore
# Check the Semaphore service status
sudo systemctl status semaphore
# To make the Semaphore service auto start
sudo systemctl enable semaphore
세마포어에 접속하여 로그인합니다.
첫 프로젝트를 생성합니다. 프로젝트 기능을 통해서 프로젝트마다 환경을 분리하고 사용자들에게 권한을 부여하고 관리할 수 있습니다.
세마포어 설정 값 등록하기
먼저, 세마포어에 앤서블에서 사용하는 인벤토리, 태스크와 같은 설정 값들 세팅해주어야 합니다.
등록순서는 아래 번호순으로 진행하는 것을 추천드립니다.
- Key Store : 암호 저장
- Repositories : playbooks와 roles 위치한 곳
- Environment : 인벤토리에 추가 변수 저장하는 곳으로 JSON 포맷으로 작성
- Inventory : playbook가 실행될 호스트 목록, 변수 사용 가능, YAML/JSON/TOML 포맷
- Task Templates : 플레이북 실행 정의(템플릿)
설정 값들을 등록합니다. ( * 자세한 설정 필드 정보는 https://docs.semui.co/user-guide/task-templates 참고)
세마포어 태스크 실행하기
일반실행
위에서 간단한 fact변수를 출력하는 태스크를 등록하였는데, 실행하고 결과를 확인합니다.
매개변수 사용
태스크 실행 시, 우선순위가 제일 높은 앤서블 매개변수를 추가할 수 있습니다.
스케줄 기능 사용
스케줄 기능을 사용하려면 테스트 등록 시, 크론표현식을 입력하여 시간마다 태스크를 실행할 수 있습니다.
실행 인벤토리 파일 저장
또한, 제가 맘에 들었던 부분은 플레이북 경로 위치에 태스크 실행 시, 사용한 인벤토리 내용이 파일로 저장됩니다.
- 파일명: 인벤토리_<TASK_ID>
세마포어 태스크 결과 Slack에서 확인하기
설치 시, Slack Webhook URL 설정과 알람여부를 yes로 허용하면, 태스크의 결과를 슬랙에서 확인해 볼 수 있습니다.
모바일 및 태블릿에서 세마포어 사용하기
세마포어는 반응형 웹으로 개발되었기 때문에, 모바일과 태블릿에서도 만족할만한 UI를 제공합니다.
태스크만 잘 설정해 두면 급할때나 외부에서도 사용하기 좋을 것 같습니다.
아이폰에서 실행
- 기종: 아이폰미니 13
아이패드에서 실행
- 기종: 아이패드 에어 4
Ref
- https://docs.semui.co/administration-guide/installation
- https://www.semui.co/
- https://github.com/ansible-semaphore/semaphore
'Automation > Ansible' 카테고리의 다른 글
앤서블(Ansible) 보안설정 및 모니터링 자동화 - 4주차 (0) | 2024.02.08 |
---|---|
앤서블(Ansible) 롤과 인프라 구성 자동화 - 3주차 (0) | 2024.02.04 |
앤서블(Ansible) 반복문, 조건문, 핸들러 및 작업 실패 처리 - 2주차 (0) | 2024.01.21 |
앤서블(Ansible) 개념 및 기본 사용 - 1주차 (0) | 2024.01.12 |