AWS LambdaでProcess exited before completing request


ちょっとしたメモです。

AWS SDK (Java)を使ってLambda関数をコールしていると、たまーに以下のようなLambdaFunctionExceptionがでてきます。

com.amazonaws.services.lambda.invoke.LambdaFunctionException: Process exited before completing request
    at com.amazonaws.services.lambda.invoke.LambdaInvokerFactory$LambdaInvocationHandler.getExceptionFromPayload(LambdaInvokerFactory.java:239)
    at com.amazonaws.services.lambda.invoke.LambdaInvokerFactory$LambdaInvocationHandler.processInvokeResult(LambdaInvokerFactory.java:191)
    at com.amazonaws.services.lambda.invoke.LambdaInvokerFactory$LambdaInvocationHandler.invoke(LambdaInvokerFactory.java:106)
    at com.sun.proxy.$Proxy6.findRssUrl(Unknown Source)
    at com.tsukaby.c_antenna.service.SiteService$$anonfun$crawlNewSite$3$$anonfun$apply$2.apply(SiteService.scala:126)
    at com.tsukaby.c_antenna.service.SiteService$$anonfun$crawlNewSite$3$$anonfun$apply$2.apply(SiteService.scala:125)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at com.tsukaby.c_antenna.service.SiteService$$anonfun$crawlNewSite$3.apply(SiteService.scala:125)
    at com.tsukaby.c_antenna.service.SiteService$$anonfun$crawlNewSite$3.apply(SiteService.scala:124)
    at scala.util.Success$$anonfun$map$1.apply(Try.scala:237)
    at scala.util.Try$.apply(Try.scala:192)
    at scala.util.Success.map(Try.scala:237)
    at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
    at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
    at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.pollAndExecAll(ForkJoinPool.java:1253)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1346)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

ぐぐってもなかなか良い答えが出てこなかったのですが、

ふとそういえばCloudWatch Logsに関数実行時のログが出ていることを思い出して、見てみたところ。

CloudWatch_Management_Console

ビンゴでした。

dispatchというScalaのHttpライブラリを使っているのですが、そこでエラーになっていますね。

というわけで、どうやら関数実行中にエラーになって正常にレスポンスを返さなかった場合は上記のように「Process exited before completing request」になるようですね。

以上です。