오늘은 서버를 기존의 ELB + EC2로 구현한 서버를 AWS Lambda + RDS로 재구성했던 내용을 블로그에 담으려고 합니다.

기존 프로젝트 구조

image.png

구조를 바꾼 이유:
ELB는 주된역할이 로드밸런싱이죠.트래픽을 분산 처리해주는 서비스죠.
그런데 저희가 이 ELB를 사용한 이유는 HTTPS 인증을 위해서였어요.
더군다나 ELB에 SSL인증한다 한들 HTTPS가 적용되지 않아요.
Route53에서 갖고 있는 도메인과 ELB를 연동해줘야만 HTTPS가 적용됐습니다.
클라이언트에서 HTTPS를 사용했어야 했기 때문에 서버도 HTTPS를 사용했어야 했습니다.
그렇지 않으면 다음과 같은 에러가 발생했습니다.

image.png

에러메시지 : HTTPS -> HTTP로 요청보내지말고 HTTPS (클라이언트) <--> HTTPS (서버) 이러한 요청을 보내라는 얘기죠.

다시 돌아와서 구조를 바꾸게 된 이유는 입니다. ELB가 요금을 쎄게 먹어요.

월 요금이 $18.8달러나 됩니다. 아무리 프리티어를 쓴다한들 과금이 됩니다.
Route53은요? Route53은 프리티어가 없어요. 도메인 1개당 0.5달러입니다.
토이프로젝트인데 유지비용이 말이 안 됩니다.

로드 밸런서가 30일간 100GB의 데이터를 전송한 경우 월별 요금은 Elastic Load Balancing 시간이 $18(즉 시간당 $0.025 x 24시간/일 x 30일 x 로드 밸런서 1개), 로드 밸런서를 통한 데이터 전송은 $0.80(즉 GB당 $0.008 x 100GB)가 되어 총 월 요금이 $18.80가 됩니다.
출처 : Elastic Load Balancing 요금 - AWS

ELB를 없애고 Lambda로 서비스를 지원하면 돈이 더 조금 들지 않을까요?
Lambda는 요청 건수로 돈을 지불하잖아요. 백만건 까지는 무료라네요. 그러면 사용하는게 이득이잖아요.

추가요금도 나와있습니다.

Lambda 함수가 다른 AWS 서비스를 사용하거나 데이터를 전송하는 경우 추가 요금이 부과될 수 있습니다. 예를 들어 Lambda 함수가 Amazon S3에서 데이터를 읽고 Amazon S3에 데이터를 쓰는 경우, 읽기/쓰기 요청 및 Amazon S3에 저장된 데이터에 대해 비용이 청구됩니다.
출처 : AWS Lambda 요금

동작하지 않는 새로운 프로젝트 구조

개념도를 다음과 같이 구성한후, serverless framework로 lambda를 배포하였습니다.
참고로 아래의 개념도로는 제대로 동작하지가 않습니다.
image.png

/getrank라는 API로 데이터를 읽어오게 했는데요. API gateway가 동작을 안합니다.
Internal server error만 뜹니다. 그래서 어쩔수 없이 serverless-offline을 설치를 했습니다.
로컬에서는 잘 동작해요. 그런데 배포를 하니까 동작을 하지 않는거에요. 이게 무슨일이죠?
그래서 health API를 생성해서 배포하여 테스트를 해보니까 응답이 곧 잘 옵니다.
DB연동이 안되는게 문제였어요. 저기 나온 AWS 서비스블록으로 조합을 해서 구글링을 해본 결과
문제점을 알게 되었어요.
위에 개념도 빠진 것이 있었어요. 그건 바로 VPC였습니다.
정확히 말하자면 RDS를 생성하면 보안그룹이 생성이 되요.

스크린샷 2019-11-04 오후 9.21.14_1.png
저 보안 그룹을 Lambda에 등록한것이 VPC에 Lambda를 개념상으로 넣어주는 역할을 하나봐요.
저는 serverless.yml의 설정을 통해서 넣었습니다.
AWS lambda에서도 직접 넣을 수 있습니다.
AWS lambda의 네트워크에서 VPC를 설정해주시면 됩니다. 보안 그룹, 서브넷까지요.
그래서 프로젝트 개념도는 다음과 같습니다.

동작하는 프로젝트 구조

image.png

정리

Lambda 와 RDS를 연동하려면 VPC를 사용해야한다 입니다.
왜 VPC에 lambda를 등록해야 하냐고 물으신다면, AWS의 정책이 그렇다고 얘기를 할 것 같습니다.

레퍼런스 : How to Access your RDS Database with Lambda Function and Serverless - Antônio Malheiros
레퍼런스 : AWS Severless IoT 12 – VPC Lambda-RDS - MarcusHong

image.png
출처 : AWS Lambda기반 VPC 지원 활용하기 - Amazon Web Services 한국 블로그