개발자

aws lambda에서 nodejs promise 비동기 호출하는 방법

2023년 01월 17일조회 223

안녕하세요~ node.js 14를 aws lambda로 구동시켜서 작업 중에 있는데요. 배치 작업을 하나 만들었는데, 코드 중에 비동기로 다른 서비스를 호출해도 되는 요청이 있어서 await을 걸지 않았는데 로그를 보니 해당 코드가 요청하기 전에 람다가 꺼지는 것 같아서요. 혹시 이유를 아시는분 계신가요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

인기 답변

김대현님의 프로필 사진

AWS Lambda 생명주기로 Invoke 시점에 handler가 실행되는데, 해당 함수가 종료되면, (추가로 지금 처리해야 할 이벤트가 없는 경우) 해당 런타임은 종료될 수 있습니다. 그러니, 위 handler()함수가 빠져나가고 나면, 비동기 호출을 해놓은 것이 실행 완료되기 전에 런타임이 종료될 상황인 거네요. 간단하게는, await를 걸어서 비동기 호출 종료시까지 대기하면 될 텐데요, 아마 해당 람다 함수를 HTTP API용도 등으로 사용하고 있어서, 빠른 응답을 돌려주고 빠지시려는 것 같습니다. 질문자님 덕분에, 저도 이렇게 비동기 작업을 추가로 할 경우 어떻게 해야할까 찾아봤습니다. 당장 성패 응답을 주고 비동기로 뭔가 추가 작업을 하려면, https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html 여기 문서를 참고해서, 비동기 요청을 남기고 빠지면 될 것 같습니다. 기본적으로는 SQS등에 처리할 작업을 위임해 놓고 빠지는 거라고 보면 될 것 같네요. 해당 작업을 추가 처리하는 Lambda를 따로 두거나 하는 식으로 위임받은 일을 처리하면 될 것 같네요. 위 문서는 위 작업을 정형화 해둔 것 같습니다.

profile picture

익명

작성자

2023년 01월 18일

아하, 역시 답은 공식 문서에 있었네요. 감사합니다~

손정현님의 프로필 사진

안녕하세요! aws 공식 문서에 따르면 promise 자체를 return 해주면 해당 handler가 promise의 결과를 invoker에게 전달해줍니다. 다만, 비동기 요청의 결과를 기다릴 필요가 없으시다면 위에 답변 해주신것처럼 다른 람다로 분리시킨후 sqs로 비동기 처리하게끔 구현하는 방법이 있을것 같네요 :) - https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html

profile picture

익명

작성자

2023년 01월 18일

답변 감사합니다~ 프로미스를 반환해주면 되는거였네요

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!