Lambdaで、呼び出し元/呼び出し先ともにJavaを使った際の例外処理についてまとめてみました。Lambdaに登録するためのクラスです。}}Lambdaの呼び出しコード登録したLambdaを呼び出すクライアントクラスです。上記のテストクラスを使って、呼び出すLambdaのメソッドごとの挙動を確認した結果が以下となります。OKのパターン正常パターン。処理は成功して、"OK"という文字列が返って来ます。Payload:"OK"FunctionError:nullStatusCode:200Timeoutのパターンlambdatest.Lambda::timeoutを呼び出すと処理がタイムアウトする。呼び出し元では例外は発生せず、タイムアウト時に以下のPayload,FunctionError,StatusCodeが返ってきます。seconds"}FunctionError:UnhandledStatusCode:200RuntimeExceptionのパターンlambdatest.Lambda::runtimeExceptionを呼び出すとRuntimeExceptionがすろーされる。呼び出し元では例外は発生せず、タイムアウト時に以下のPayload,FunctionError,StatusCodeが返ってきます。Method)","sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)","sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)","java.lang.reflect.Method.invoke(Method.java:497)"]}FunctionError:UnhandledStatusCode:200ExceptionのパターンPayloadに入っている例外クラス名がExceptionとなっていだけで、あとはRuntimeExceptionと同じです。LambdaのHandler設定が誤っており、呼び出し先クラスやメソッドがない場合。この場合でも呼び出し元では例外は発生せず、タイムアウト時に以下のPayload,FunctionError,StatusCodeが返ってきます。結論として、AWSクレデンシャル/リージョン/FunctionNameが正しければ、Lambda側で例外が発生してもクライアント側では例外がスローされないため、InvokeResultの中身を見て、エラーかどうかを判断する必要があります。InvokeResult#getFunctionError()の戻り値がnullでない場合はエラーが発生しているとみなしてもよさそうなので、この場合はPayloadからエラー内容を取り出し、適宜メッセージを取り出してログを吐いたりリトライする形になります。AWSクレデンシャル間違いの場合はcom.amazonaws.AmazonServiceException、リージョンやFunctionNameが違う場合はcom.amazonaws.services.lambda.model.ResourceNotFoundExceptionが発生するため、これは別途catchして例外処理を行う必要があります。Katayama@c9katayama毎日SIMを焼いています。City」を年一回更新中。upLoginユーザーは見つかりませんでした。