AWS lambda[1]

jj·2022년 5월 13일
0

Server

목록 보기
3/8

-> AWS lambda[2] 보러가기


겪은 문제들


[1] 배포 문제


아직 서버를 배포하지 않았는데 lambda function에서 server와 API를 주고받기 위해서는 배포가 필요했다. 배포하지 않고 localhost와 연결하는 방법이 있나 찾아봤지만 AWS sam 이라는 local 디버깅 툴 말고는 비슷한것도 없었다. sam은 말 그대로 디버깅 용도라 내가 찾는 것은 아니었다. 과톡에 질문한 결과 ngrok라는 간단한 배포 툴이 있다는 것을 알게 되었다. 원래 가장 기본적인 해결법은 포트 포워딩이었다.

외부에서 내 IP에 접근하기 위해서는 공유기 주소를 통해서 접근해야 한다. 하지만 공유기 주소를 알게되었다 해도 내 IP가 공유기의 몇 번 PORT를 쓰는지 알 수 없으므로 외부에서 내 IP에 접근할 수가 없다. 이때 쓰는 것이 포트 포워딩이다. 공유기에 이런 요청이 오면 몇번 포트로 Forwariding 하라고 알려주는 것이다.


하지만 더 간단히 ngrok를 사용해서 간단히 server를 배포할 수 있다고 해서 그 방법을 쓰기로 했다.(보안, 성능 issue 때문에 개발용으로만 쓰인다.)

-> ngrok Doc




[2] lambda function 여러개 생성?


이 issue 역시 내가 무지해서 일어난 일이다... store 별 '자동 마감 시간'에 따라 lambda function을 각각 만들면 되겠다고 생각했었다. 하지만 일단 aws에서 계정당 제공하는 lambda function의 개수는 500개이다. 따라서 이 방법은 쓸 수 없다. 쓸 수 있다 해도 500개의 함수를 어떻게 관리할 것인가??? 말이 안된다.

-> aws Doc

다음을 찾아보니 function 하나에 여러 eventTrigger을 사용할 수 있다.

-> 스케쥴러 동적 생산

해당 이미지를 보면 Scheduler Function과 Scheduled Function이 있다. 내 POS 서버 시작이 감지되면 Scheduler Function(A)이 작동되고 A는 각 Store '자동 마감 시간'정보를 받아와 Scheduled Function(B)를 동적으로 만든다. B에 의해 각 시간에 각 Function이 작동하여 해당 Store들을 마감처리한다.


추가로 '자동 마감 시간'을 1분 단위로 설정하면 너무 많은 B가 필요할 것 같아 '자동 마감 시간' 설정단위를 30분으로 수정했다. dictionary를 사용하여 시간-[store1,store2, ...] mapping구조를 활용해 해당 시간에 API를 호출하고 list로 store_id들을 넘겨주면 될 것이다.




[3] cold start issue


이건 '안산학생' 단톡방에서 여담으로 말씀해주신 것이다. 지금 당장은 신경쓰지 않아도 될 것 같지만 일단 정리해보았다.

-> 공부한 블로그

해당 블로그를 보면 cold start가 발생하는 이유와 해결방법이 쓰여있다.


일단 cold start를 이해하려면 aws lambda의 구조를 알아야 한다. 내가 이해한 것으로는 aws lambda service를 통해 어떤 함수의 요청이 들어오면 해당 요청은 lambda queue에 쌓이고 본인 순서가 되면 aws 서버의 container에 올라간다. container는 프로그램 개념이라 한다.

(더 자세히 공부하자...)


cold start가 일어나는 이유는

1. instance가 떠있지 않아서

2. ENI 적용시간(이해못함)

3. Dwell Time (lambda에 요청이 많아 queue에서의 대기시간 발생)

가 있다. 자세한 내용은 위의 블로그를 참고하자.


이러한 cold start의 해결법은 다음이다.

1. Lambda의 사양을 높인다.

2. Provisioned Concurrency를 사용한다. 
(cold start 해결을 위해 AWS에서 제공하는 service)

3. 자체적인 Warm start
(몇 분 마다 다시 시작)

4. 가장 이상적인것은 일정량의 요청이 꾸준히 들어오는 것



-> AWS lambda[2] 보러가기

profile
끊임없이 공부하는 개발자

0개의 댓글