이번 시간에는 앤서블 핸들러에 대해 알아보자
핸들러란 이벤트 기반으로 동작하는 task이다.
예를 들어 a라는 task가 실행될 때에만 b task를 실행하는 동작이다.
대표적으로는 nginx 같은 웹서버에서 서버 설정이 변경될 때이다.
https://github.com/tedilabs/fastcampus-devops/tree/main/2-ansible/05-handler
GitHub - tedilabs/fastcampus-devops: 🚀 패스트캠퍼스 데브옵스 초격차 코스 자료
🚀 패스트캠퍼스 데브옵스 초격차 코스 자료. Contribute to tedilabs/fastcampus-devops development by creating an account on GitHub.
github.com
위 링크에서 플레이북을 실행하고 ec2인스턴스로 접속하면 다음과 같은 화면이 출력된다.
우선 files/html/ 디렉토리에는 세 가지 html 파일이 있다.
index.html 파일은 화면 배경색이 흰색
blue.html 파일은 화면 배경색이 파란색
red.html 파일은 화면 배경색이 빨간색으로 설정됐다.
default 설정 파일에서는 root를 index.html로 지정했기에 ec2 인스턴스로 접속했을 때 배경이 하얗게 출력되었다.
만약 7번 라인을 index blue.html로 파일 내용을 수정한다고 해서 서버 설정에 적용이 되지 않는다.
이 이유는 nginx가 이미 기존 nginx 설정 파일을 읽은 상태로 nginx 프로세스가 호출됐기 때문이다.
이 문제를 해결하려면 특정 task가 이벤트를 publish할 수 있어야 하는데 핸들러를 사용해서 해결할 수 있다.
example.yaml 파일을 보면 notify라는 파라미터로 핸들러를 명시한다.
Restart Nginx는 핸들러의 이름이 된다.
Restart Nginx handler는 service 모듈을 사용해서 nginx를 재시작시킨다.
이제 플레이북을 다시 실행해보면 배경화면이 파란색으로 바뀐 걸 볼 수 있다.
핸들러를 사용할 때 유의할 점은 다음과 같다.
- 플레이 내에서 같은 이벤트를 여러 번 호출하더라도 동일한 핸들러는 한 번만 실행된다.
- 모든 핸들러는 플레이 내에 모든 작업이 완료된 후에 실행된다.
- 핸들러는 이벤트 호출 순서에 따라 실행되는 것이 아니라 핸들러 정의 순서에 따라 실행된다.
'AWS > Part 4. Ch04 앤서블을 이용한 서버 형상 관리' 카테고리의 다른 글
CH04_08. 반복문 (Loop) (0) | 2022.06.17 |
---|---|
CH04_07. 변수 (Variables) (0) | 2022.06.17 |
CH04_05. 모듈 (Module) (0) | 2022.06.16 |
CH04_04. 플레이북 (Playbook) (0) | 2022.06.16 |
CH04_03. 애드혹 명령어 (Ad-hoc Command) (0) | 2022.06.10 |