오늘 드디어 슬랙으로 AWS RDS DB를 백업하고 복원하는 기능을 배포했다.
오더탁(othetak.com) 플랫폼은 실무진들이 개발하고 검증하기 수월하도록 develop 서버 환경 외에 실서버와 같은 환경인 stage 서버가 존재한다.
그리고 stage 서버의 db는 수작업으로 매번 실서버의 db를 스냅샷으로 저장하고 복원하여 엔드포인트를 맞춤으로 동일한 환경으로 만들어 개발 검수를 진행하였다.
하지만 이 부분도 잔손이 가기 마련이였고 개발에 집중 시키고자 인프라를 구성하기로 했다.
목표는 아래와 같았다.
1. 매일 새벽에 실서버 db 를 스냅샷으로 저장한다. 2. 그 스냅샷으로 기존 stage db 로 만든다. 3. 모든 진행과정을 슬랙으로 알림을 보낸다. 4. 과정 중간에 오류가 나면 그 과정을 체크해서 알려준다. |
구성은 aws lambda 에서 python 을 이용해서 함수를 개발했고, 스케쥴은 aws EventBridge 를 사용하였다.
개발하면서 슬랙으로 알림이 오는 테스트를 저녁에 했다가 직원들이 해당 특정 채널이 긴급용 알림이라 수신하고 있었기 때문에 시간에 고려를 해야했다.
(물론 중요도 높은 알림이긴 하지만 해당 채널은 DB와 EC2의 긴급 알림도 작동되는 곳이였다.)
스케쥴은 평일 오전 7시에만 해당 lambda가 작동되도록 설정하였다.
히자만 매일 이렇게 자동으로 작동 시키는 것도 좋고 업무상 필요에 따라 슬랙에서 커맨드를 날리면 작동되게 하고 싶었다.
결국 lambda 함수를 하나 더 생성해서 slack 커맨드를 받는 수신용 함수를 만들고 슬랙에서는 개인 DM이나 어느 채널에서든 슬래시 커맨드를 입력하면 스냅샷 생성/복원이 이루어지도록 만들었다.
슬랙에서 /db-stage-sync 라고 입력하면 이렇게 해당 기능이 작동하게 만들었다.
하루반 동안 동기화 파이썬 때문에 머리가 아팠는데 잘 해결하고 나니 뿌듯하다. 😎
주의할 것은 오더탁은 보안과 안전을 위해 DB 가 멀티AZ이다.
원래는 스냅샷을 만드는 동안에 원본 DB는 중단되지만 멀티AZ 과 리드용 DB를 별도로 구성했기 때문에 스냅샷을 만들 때 미러링용 DB와 리드용 DB가 있기 때문에 플랫폼 서비스에는 영향을 미치지 않는다.
만얀 이런 구성이 없이 스냅샷을 만드는 작업을 하게 된다면 스냅샷을 생성하는 동안 원본 DB는 중지되니 주의해야한다.