-
aws lambda 사용시 mysql connection pool, context, callback 관련 문제dev/aws 2019. 1. 30. 11:29
aws lambda 에서 node, mysql 사용시 connection pool 을 핸들러 외부에서 생성하게 되면 connection.release() 를 호출하여도 람다 핸들러가 종료되지 않음.
핸들러에 전달되는 callback 을 호출하여도 종료되지 않으며 설정된 타임아웃이 지나면 호출이 실패로 반환됨.
https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/nodejs-prog-model-handler.html
aws 문서에도 callback 을 사용하도록 권장함.
callback 과 함께 전달되는 context 가 있는데 구 버전의 node 에서 사용되던것인데 공식 문서에는 호출시 전달되는 정도등을 담고 있음.
https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/nodejs-prog-model-context.html
context 와 관련해 검색을 해보면 succeed, fail 등의 메소드 사용이 나오는데 이를 이용하면 callback 과 달리 바로 핸들러가 바로 종료됨. 현재 aws lambda 에서 사용중인 node 버전에서는 사용을 권하지 않는것 같음.
대신 succeed, fail 을 사용하지 않고 callback 으로 핸들러를 바로 종료하게 하기 위하여 context 의 callbackWaitsForEmptyEventLoop 를 false 로 설정하면 됨. callback 호출이 context 의 succeed, fail 호출과 동일한 결과를 냄.
또는 핸들러 외부에서 생성된 connection pool 을 종료시켜주면 됨. pool 의 end 를 호출해주면 pool 객체가 종료되고 콜스텍이 비워지게 되어 핸들러가 종료됨.
이와 관련된 논의가 많은 글에서 있어 보이지만 확실한 결론은 아직 없어 보임.
이로 인하여 성능이나 결과에 어떠한 영향을 미치는지는 정확히 확인할수가 없지만, 일단은 필요한 동작을 정상적으로 수행하므로 callbackWaitsForEmptyEventLoop 를 false 로 설정하여 사용.