EC2, Codepipeline, Route53, 로드밸런서를 이용해 서버 https로 자동배포 하는 법은 위의 영상을 참고하며 따라했다. 어떻게 하는지의 방법 보다는 이걸 왜 써야하는지 이유에 대해서 추후에 서술하려고 한다.
인스턴스 생성과 파이프라인 연결은 나름 간단(?)하기 때문에 집중해서 진행한다면 쉽게 마칠 수 있다.
물론 .. 시행착오는 있었다. 파이프라인을 새로 만들어도 deploy에서 항상 실패가 떠서 아예 인스턴스를 삭제하고 새로 생성해서 연결해보니 잘 됐다. 인스턴스 보안그룹 설정에 실수가 있었다.
진짜 문제는 로드밸런서를 생성하고 EC2와 연결을 진행하면서 시작됐다. 배포를 끝내고 도메인에 접속해 보니 https가 아닌 http로 배포가 되어 있었다. 분명 보안그룹에 https와 http 설정은 잘 되어있었고, 또 AWS에서 도메인을 구매했기에 자동으로 EC2에 인증서 발급이 됨으로 인증서 문제도 아니었다.
억지로 https:// 를 앞에 붙이고 도메인 주소를 이어 적으니
이런 게 떴다. 검색을 해보니 그냥 고급을 눌러서 무시하고 접속하라는 글만 나왔다.
결국 원인을 몰라 처음부터 하나하나 살펴 보다가 로드 밸런서의 대상 그룹을 확인하니 상태 하나가 unhealthy라는 걸 발견했다.
저 곳에서 알려주는 나름의 오류 메세지는
unhealthy Health checks failed with these codes: [200]
였다.
How to fix 'Health checks failed with these codes: ' on elasticbeanstalk instace?
구글링을 하다가 이런 글을 찾았다.
the fix was to change the health check's "Success codes" setting from 200 to 200,301.
순간 초기 세팅 때 성공 코드를 201로 설정했던 게 떠올랐다.
로드밸런서-> 대상 그룹 -> 고급 상태 검사 설정에 들어가서 성공 코드를 다시 200으로 바꾸니 healthy로 바뀌었다.
그럼에도 불구하고 여전히 http였다. 이번에는 http와 https의 배포 방법에 대해서 구글링을 계속 하다가 이런 글을 발견하였다.
AWS 로드밸런서 HTTP → HTTPS 리다이렉션
글에 나온대로 HTTP로 접속하면 자동으로 HTTPS로 리다이렉션이 되게끔 설정을 해줘야 한다.
로드밸런서->리스너에서 HTTP:80
을 확인하니 리다이렉션 값이 없었다. 편집을 눌러서 HTTPS로 리다이렉션이 되게끔 설정해줬다.
Route53으로 이동해 호스팅 영역에서 레코드를 살펴 보니 배포에 성공한 케이스에서는 A유형이 2개라는 걸 캐치했다.
레코드 생성을 할 때 1번과 2번 둘 다 해줘야 하는데 나는 1번밖에 안 했었다.
Route53 설정하기를 보면서 다시 레코드를 추가해줬다.
세 번의 변경을 통해 다시 한 번 EC2 생성부터 배포까지 플로우를 그려볼 수 있었고, 배포에 성공하였다!
으악 https