개발자
안녕하세요~ node.js 14를 aws lambda로 구동시켜서 작업 중에 있는데요. 배치 작업을 하나 만들었는데, 코드 중에 비동기로 다른 서비스를 호출해도 되는 요청이 있어서 await을 걸지 않았는데 로그를 보니 해당 코드가 요청하기 전에 람다가 꺼지는 것 같아서요. 혹시 이유를 아시는분 계신가요?
답변 2
인기 답변
AWS Lambda 생명주기로 Invoke 시점에 handler가 실행되는데, 해당 함수가 종료되면, (추가로 지금 처리해야 할 이벤트가 없는 경우) 해당 런타임은 종료될 수 있습니다. 그러니, 위 handler()함수가 빠져나가고 나면, 비동기 호출을 해놓은 것이 실행 완료되기 전에 런타임이 종료될 상황인 거네요. 간단하게는, await를 걸어서 비동기 호출 종료시까지 대기하면 될 텐데요, 아마 해당 람다 함수를 HTTP API용도 등으로 사용하고 있어서, 빠른 응답을 돌려주고 빠지시려는 것 같습니다. 질문자님 덕분에, 저도 이렇게 비동기 작업을 추가로 할 경우 어떻게 해야할까 찾아봤습니다. 당장 성패 응답을 주고 비동기로 뭔가 추가 작업을 하려면, https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html 여기 문서를 참고해서, 비동기 요청을 남기고 빠지면 될 것 같습니다. 기본적으로는 SQS등에 처리할 작업을 위임해 놓고 빠지는 거라고 보면 될 것 같네요. 해당 작업을 추가 처리하는 Lambda를 따로 두거나 하는 식으로 위임받은 일을 처리하면 될 것 같네요. 위 문서는 위 작업을 정형화 해둔 것 같습니다.
익명
작성자
2023년 01월 18일
아하, 역시 답은 공식 문서에 있었네요. 감사합니다~
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!