서버 다운타임 없이 빈스톡 갈아타기

Elastic Beanstalk에 워드프레스를 설치하여 운영중이다. 여기에서 제안하는 방법으로 Elasticache, CloudFront 등의 서비스를 추가하여 유연한 성능의 서버를 구축하였다. 그러나 갑자기 아래같은 메세지를 보이면서 빈스톡 대쉬보드에 빨간불이 들어왔다.

Update environment operation is complete, but with errors. For more information, see troubleshooting documentation.

트러블 슈팅 문서를 보면 정확히 위와 같은 경우는 없었다. 비슷한 경우가 있는데 timeout 관련 설정을 하라는 것이다. 이 페이지를 보면서 .ebextensions 파일로 업데이트 하였으나 내 경우는 해결할 수 없었다. 새로 배포한 버전이 잘못된 것인가 해서 이전 버전으로 롤백을 시도하였으나 역시나 증상은 마찬가지다.

여기에서 나와 비슷한 문제를 발견하였다. 빈스톡 Environment를 다시 만들라는 것이다. 단 운영중인 서버이므로 서버 다운타임 없이 진행해야한다. 아래 순서를 따라가면서 문제를 해결하자.

1. 데이터베이스 스냅샷 생성

RDS 웹콘솔에 접속하여 현재 동작하는 데이터베이스의 스냅샷을 생성할 수 있다. 좌측 Snapshots 메뉴 > Create Snapshot 버튼을 클릭하여 진행하자. DB 인스턴스를 선택하고 스냅샷 이름을 입력한 뒤 Create 버튼을 클리하면 스냅샷이 생성된다. 이 스냅샷은 단계 3에서 새로운 Environment 생성시 사용하게 된다.

2. Configuration 저장

빈스톡 환경 정보를 저장하여 새로운 Environment 생성시 이를 사용해야 한다. Beanstalk 웹 콘솔에 접속하여 우측상단의 Actions 드랍박스 클릭 > Save Configuration 을 클릭한다. Conficuration Name을 입력하고 Save 버튼을 클릭한다.

3. 새로운 Environment 생성

빈스톡 웹 콘솔로 다시 돌아오자. 우측 상단의 Actions 드랍박스 > Launch New Environment를 클릭하여 새로운 Environment를 생성한다. 주의할 것은 Environent를 복제(Clone)하는 것이 아니다. 복제로는 문제를 해결할 수 없다.

Environment Type 설정 단계에서 Start from: Saved configuration을 선택하고 단계 2에서 저장한 configuration을 선택한다. Additional Resource 설정 단계에서 Create an RDS DB Instance with this environment를 체크한다. 그리고 RDS Configuration 단계에서 단계 1에서 저장한 데이터베이스 스냅샷을 선택한다.

Launch 버튼 클릭하면 십여분 뒤 새로운 Environment가 생성될 것이다. 이전 것과는 다르게 빨간불이 아닌 초록색 불로 생성된다. 새로 생성된 url로 접속하면 서버가 정상동작하는지 확인하자.

4. 주소 교환 (Swap)

새로 생성된 Environment는 기존것과 url이 다르다. 이것을 기존것으로 변경해 주어야한다. 빈스톡에서는 이를 교환(Swap)해 주는 기능이 있다. 이것이 다운타임 없이 서버를 변경하는 기능이다.
새로 생성된 빈스톡 Environment 콘솔에 접속하자. 우측 상단에 Actions 버튼을 클릭 > `Swap Environment URLs`를 클릭하자. 기존의 Environment를 선택하고 진행한다. 몇 분후 기존 url로 접속하면 정상 동작하는 서버를 확인할 수 있다. 
마지막으로 문제 되었던 기존 Environment를 삭제하자!