express + mysql + aws rds를 사용해서 서버를 만들었고,
남은 과제로 elastic beanstalk에서 제공하는 임의의 엔드포인트가 아닌 도메인을 연결해서 엔드포인트를 만들었다. 그리고 Certificate Manager를 이용해서 SSL 인증을 통해 HTTPS 적용하고, Github Action을 사용해서 repository와 beanstalk CI/CD 파이프라인을 구축했다.
먼저 기존 emotional.today 도메인이 호스팅 되어있어서 엔드포인트 연결 자체는 route53에서 api로 사용할 도메인만 레코드 생성해서 진행했다.
Elastic BeansTalk에서 로드밸런싱이 설정되어있지 않다면 사용할 애플리케이션 환경의 구성에 들어간다.
구성을 클릭하면 위 스크린샷과 같은 탭을 찾아서 편집을 눌러준다.
그리고 단일 인스턴스에서 밸런싱된 로드로 변경해야하는데 이때 주의할 점은 인스턴스 서브넷이 두개 설정이 되어있어야한다. 하나만 할 경우에는 apply해봤자 다시 롤백됨.
ELB의 특성상 고가용성, 내결함성을 보장해야하기 때문에 인스턴스 서브넷이 2개 이상 필요하다고 한다.
그러고 일단 apply를 해준다. 추후에 다시 여기서 작업을 해야하지만 현재는 여기까지.
다음엔 AWS Certificate Manager에 들어가서 인증서 요청을 한다.
이때 조금 에러가있었는데, 기존 cloudfront로 사용하고 있던 ACM을 사용하려고 했지만 리젼의 문제로 Elastic BeansTalk에서 HTTPS 리스너를 추가할 때 SSL 인증서가 보이지 않았다. (cloudfront를 사용하려면 미국 동부 버지니아 리젼을 사용해야한다.)
api로 사용할 도메인을 추가하고 apply 했다.
그 다음 인증서를 클릭해서 들어오면 갱신자격이 아직 부적격으로 나올텐데
나같은 경우는 기존 route53에서 도메인을 미리 만들어두어서 있던걸 사용했다.
그리고 갱신자격 적격, 상태 발급됨이 되면 다시 beanstalk 구성에 들어가서 밸런싱된 로드 설정한 부분까지 들어간다.
그럼 아래부분 쪽에 보면 리스너라고 있는데 기존에는 HTTP만 되어있다. (HTTP의 기본 포트는 80, HTTPS는 443임.)
리스너 추가를 눌러서
리스너 포트에는 HTTPS의 기본 포트인 443을 입력, 리스너 프로토콜은 HTTPS 선택, SSL 인증서는 누르면 ACM에서 설정한 인증서를 클릭해주면 된다. 정책은 패스했다.
이렇게 하면 api baseurl은 내가 설정한 도메인으로 사용이 가능하고, ssl 인증을 통해서 https로 사용이 가능하다.
다만 나는 추가로 에러 사항이 있었던게 beanstalk의 healthcheck에서 문제가 있었다. 그런데 이러한 문제가 있어도 api는 제대로 동작을 했다. api baseurl의 루트 경로로 get 응답을 보내니 깔끔하게 해결되었다.
뭔가 쓰고 나니깐 짧은거 같은데 몇시간 동안 뒤적뒤적거리면서 에러 나면서 했다.
그리고 CI/CD는 아래 링크를 단 유튜브 영상을 참고했다.
이제 추후로 해야할 것들
S3 버킷 CI/CD
회원가입, 로그인 컴포넌트 구성 및 로그인 상태 관리 HOC
참고 자료
- [ElasticBeanstalk] Elastic Beanstalk - 도메인 연동 및 https 설정 (with 가비아) // 나는 가비아와 route53은 이미 연결 해놨는데 안되있는 분들은 전체적으로 보면 좋을거 같다.
- CI/CD 유튜브 영상 참고 // CI/CD 영상은 9분부터 시작함.
댓글