안녕하세요 :)
오늘은 전 시간에 EC2 인스턴스와 ALB설정에 이어서
Route53에 도메인을 등록시켜서 HTTPS접속을 위한 ACM 인증서 발급까지 진행할 겁니다.
순서
1. Route53 도메인 등록
2. ACM 인증서 발급
3. ALB 리스너 설정
4.오류
1.Route53 도메인 등록
우선 저는 전에 가비아에서 구매했던 도메인을 사용하여 진행하겠습니다.
사용할 도메인을 등록하기 위하여 Route53서비스에 호스팅 영역 생성을 클릭해 줍니다.
도메인 이름은 자신이 구매한 도메인 주소를 넣어줍니다.
퍼블릭 호스팅 영역은 우리가 브라우저에서 도메인으로 접속해서 사용하는 일반적인 도메인 입니다.
이렇게 호스팅 영역 생성을 해줍니다.
▶ NS는 네임서버타입으로 4개의 네임서버가 있습니다. 4개인 이유는 네임서버가 죽으면 서비스도 같이 다운되서
AWS에서 4개를 지정해줍니다. 이 네임서버를 통해 사용자가 요청을 했을 때 IP 정보를 반환해줍니다.
▶ SOA는 권한 시작 레코드는 도메인에 대한 기본 DNS 정보를 식별합니다.
NS레코드의 4개의 주소를 가비아에서 구매한 도메인의 NS에 등록을 해줘야 합니다.
가비아 도메인 관리로 들어가 Route53의 NS레코드 4개를 등록시켜 줍니다.
레코드 이름은 트래픽을 라우팅하려는 도메인 또는 하위 도메인의 이름을 입력합니다
레코드 유형은 A레코드로 별칭을 사용하여 ALB의 DNS주소와 매핑시켜 줍니다.
아직 ACM인증서를 발급받지 않아서 HTTPS접근은 안되서 HTTP로 접근한 상태입니다.
2. ACM 인증서 발급
이제 HTTPS로 접근하기 위해 ACM인증서를 발급 받겠습니다.
완전히 정규화된 도메인 이름에는 자신이 구매한 도메인 네임을 작성해줍니다.
검증방법으로는 DNS검증을 선택하여 줍니다
DNS검증은 사용자가 사용하려는 도메인 CNAME을 도메인 데이터베이스에 보유하고 있어야 합니다.
예를들어 ABC.com 도메인과, www.ABC.com 도메인 2개에 대해 ACM인증서를 요청하면, ACM은 이 2개의 도메인에
대해 가각 2개의 CNAME레코드를 생성해줍니다. 이 각각의 CNAME레코드는 유일한 key-value값으로 사용자의 도메인에
대한 소유권을 증명해줍니다.
이렇게 인증서를 요청하고 나면 상태 부분이 "검증 대기중" 이라고 표시됩니다.
ACM이 DNS검증 방식으로 이 도메인에 대한 인증서를 발급하기 위해선, 해당 CNAME 레코드는 도메인 데이터베이스, 저 같은 경우에는 Route53에 등록되어있어야 합니다.
이렇게 ACM인증서 발급이 끝났습니다.
3. ALB 리스너 설정
ACM인증서를 발급 받았다고 바로 HTTPS로 접근이 되는거 아닙니다.
HTTPS로 접근하기 위해서는 ALB의 리스너 설정을 해줘야 하는데
ALB의 리스너 설정에는 대표적으로 포워드, 리다이렉션이 있습니다.
이 개념에 대해서 정확하게 이해를 못해 리스너 설정을 할 때 마다 오류가 나서 이번기회에 정리를 해보려고 합니다.
▶리스너는 프로토콜과 포트를 기반으로 요청을 받아 검사하고 이를 적절한 타겟으로 전달하는 기능을 수행한다.
위에서 말했듯이 리스너는 요청을 받아 검사하고 타겟그룹에 열결되어 있는 곳으로 전달되는 기능을 수행합니다.
그래서 우리는 HTTPS로 접속하기 위해서 HTTP 80포트는 HTTPS 443포트로 리다이렉션을 해줘야 합니다.
그리고 HTTPS 443으로 들어온 트래픽을 타겟그룹에 연결되어 있는 서버로 포워드, 즉 뿌려줘야 합니다.
쉽게말해서 HTTP로 접근을하면 HTTPS로 다시접속하라고 지시하고 HTTPS로 들어온 트래픽은 ALB의 타겟그룹으로
포워드 해주는 겁니다. 이 때 HTTPS로 접속하기 위해서 ACM인증서가 필요한겁니다.
이렇게 리스너 까지 설정하면 Route53에 등록한 DNS로 접근이 가능합니다!
4.오류
오늘도 인스턴스를 중지시켰다가 다시 켰는데 어제 만들어 놓은 DNS로 접근이 안됩니다.
혹시나 IP가 바꼈을까 SG도 변경해봤는데 여전히 502에러가 뜹니다.
ALB의 DNS주소로도 접근이 안되서 대상그룹을 확인해보니 언헬시가 떠있습니다.
찾아봤더니 인스턴스를 껏다가 키면 해당 서버가 다시 로드가 안될때가 있다고 합니다.
그래서 한번 확인해 보기로 했습니다.
저는 EC2에 nginx를 사용중인데 상태를보니 nginx가 죽어있습니다.
그래서 해당 명령어를 사용하여 nginx를 다시 활성화 시켜줬습니다.
다행히 문제없시 다시 활성화가 됐습니다.
systemctl status nginx
sudo systemctl enable nginx
sudo systemctl restart nginx
systemctl status nginx
타켓그룹도 처음에는 둘 다 unhealthy가 떴었는데 정상적으로 Healthy가 뜨네요!
그리고 해당 웹페이지로도 정상적으로 접근이 가능해졌습니다.
오늘의 느낀점은 서비스를 만들고 구동만 시켰다고 끝이 아니라는걸 느꼈습니다.
저번 OpenVPN때도 그랬지만 서비스를 중지시켰다가 다시 가동시키면 꼭 오류가 나더라구요.
이번 오류도 잡는데 한세월 걸렸지만 EC2를 껏다가 다시 시작하면 이런 오류도 날 수 있고 해결방법까지 터득할 수 있었습니다 :)
참고자료
https://velog.io/@yange/AWS-Route-53%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
https://www.lesstif.com/system-admin/systemd-system-daemon-systemctl-24445064.html
https://dev.classmethod.jp/articles/route53-acm-free-domain-https-certification/
https://repost.aws/ko/knowledge-center/route-53-create-alias-records