express-serverless 구축(2)
aws-express-serverless 를 통해 express 를 통해 구축한 간단한 api 서버를 API Gateway 와 Lmabda를 이용하여 배포해 보았다.
API Gateway를 통해 Lambda 함수를 실행하기 위해서는 API Gateway에서 생성된 URL로 요청을 보내야한다. 요청을 보내기 위한 URL은 aws 콘솔 - API Gateway - API - Stage 창에서 확인이 가능하다.
URL 정보.
url 구조는 https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage}
https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage}와 같이 구성된 url로 요청을 보내면 Lambda에 배포한 함수가 실행되며 응답을 해준다.
하지만 이렇게 길고 불편한 URL을 매번 기억하고 요청하기에는 어려움이 있다.
요청을 보내고 싶은 URL은 https://{domain}/api/v1/lambda/{proxy}의 구조를 가진 URL이다. API Gateway에서 생성해준 URL이 아닌 직접 지정한 도메인으로 요청을 보내기 위해서는 커스텀 도메인을 등록하는 작업이 필요하다.
해당 작업을 진행하기 위해서는
- AWS 계정 (Lambda에 함수를 배포했으니 계정은 당연히 존재한다고 가정..)
- API Gateway에 연결할 도메인
이렇게 두가지만 있으면 된다. 그럼 진행해보도록 하자!!!
먼저 API Gateway에 도메인을 연결하기 위해 Jaewook Ahn 님의 블로그를 참고하여 진행하였다. 😇👍
SSL/TSL 인증서 발급
나의 도메인을 API Gateway에 연결하기 위해서는 도메인에 SSL/TSL 인증서를 발급 받아야한다. 인증서를 발급받기 위해서는 다양한 방법이 있지만 대부분의 블로그나 AWS 문서에서는 AWS Certificate Manager를 이용하는 것을 권장한다고 나와 있기 때문에 해당 서비스를 이용하기로 했다.
인증서를 발급받기위한 나의 도메인 주소 juryeon.com
도메인은 가비아를 이용하여 구입 및 Route53 서비스를 통해 등록하였다.
구매한 도메인을 통해 인증서를 발급받고자 하는 주소는 dev.juryeon.com이다. 인증서 발급을 위해 AWS Certificate Manager로 이동 후 인증서 요청 탭을 클릭해준다.
- 인증서를 발급받고자 하는 도메인을 입력하고 필요시 태그를 입력하고 인증 방식은 DNS 검증으로 지정하고 생성 버튼을 클릭한다.
- 생성 버튼을 클릭하게 되면 Route 53에서 레코드 생성이라는 버튼이 보이게 된다. 이 버튼이 나타나지 않는다면 레코드를 생성할 도메인에 대하여 Route 53에 정상적으로 도메인이 등록 안되어 있을 수 있으니 도메인을 등록 후 다시 실행하게 되면 버튼이 나온다.
- 레코드 생성 버튼을 클릭하여 해당 도메인에 대한 CNAME 레코드를 추가해준다.
- 레코드를 생성하고 잠시 기다리면 인증서에 대한 상태가 발급이 되었다는 상태로 변경된다.
보통 10분정도 기다리면 된다는데.. 주말이라 그런가? 30분 기다려서 발급해줌.. 주말이라서 그런건 아니겠지?
API Gateway Custom Domain 등록
등록하기 위한 도메인에대하여 인증서를 발급받았다면 등록해주기만 하면 된다.
- 생성 버튼 클릭
- 인증서를 발급받았던 도메인 입력 및 인증서 선택
- API 매핑 구성 클릭
- 연결할 API Gateway와 스테이지 선택
- API Gateway domain name URL을 레코드에 추가해주어야한다. 해당 도메인에 대하여 CNAME 레코드를 추가해주었다.
여기까지 완료하게 되면 커스텀 도메인을 통해 API Gateway호출을 하기위한 모든 준비가 마무리 된것이다. 도메인이 활성화 되기 위해서는 약간의 시간이 필요하니 조금 기다린 후 테스트를 해보면 될것 같다.
커스텀 도메인으로 요청해보기
기존 API Gateway URL을 통한 요청
커스텀 도메인으로 요청
정리
이렇게 연결된 도메인을 통해 요청을 하게 되면 아래의 구조로 요청과 응답이 발생하게 된다.
- https://dev.juryeon.com/api/v1/lambda/{proxy} 호출
- juryeon.com cname 레코드로 요청 전달
express-serverless 구축(2)
http://hanjuren.github.io/2022/06/15/express-serverless-구축-2/