メニュー
AWS Lambda
開発者ガイド

関数エラー (Java)

Lambda 関数が例外をスローする場合、AWS Lambda はエラーを認識して JSON に例外情報をシリアル化し、それを返します。エラーメッセージの例を次に示します。

Copy
{ "errorMessage": "Name John Doe is invalid. Exception occurred...", "errorType": "java.lang.Exception", "stackTrace": [ "example.Hello.handler(Hello.java:9)", "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", "java.lang.reflect.Method.invoke(Method.java:497)" ] }

スタックの stackTrace JSON 配列が要素をトレースするときに、スタックトレースが返されることに注意してください。

エラー情報を取得する方法は、関数の呼び出し時に指定した呼び出しタイプによって異なります。

  • RequestResponse 呼び出し型 (同期実行) : この場合、エラーメッセージを取得します。

    たとえば、Lambda コンソールを使用して Lambda 関数を呼び出す場合、RequestResponse が常に呼び出しタイプであり、次の図に示すように、コンソールには AWS Lambda で返されるエラー情報が [Execution result] セクションに表示されます。

  • Event 呼び出し型 (非同期実行) : この場合、AWS Lambda は何も返しません。代わりに、エラー情報が CloudWatch Logs および CloudWatch メトリクスに記録されます。

イベントソースに応じて、AWS Lambda はエラーになった Lambda 関数を返す場合があります。たとえば、Kinesis が Lambda 関数のイベントソースである場合、AWS Lambda は、Lambda 関数が成功するか、ストリームのレコードの有効期限が切れるまで、エラーになった関数を再試行します。

関数エラーの処理

カスタムエラー処理を作成して、Lambda 関数から直接例外をスローさせ、AWS Step Functions State Machine 内で直接処理 (再試行またはキャッチ) できます。詳細については、ステートマシンを使用したエラー条件の処理を参照してください。

CreateAccount ステートは、Lambda 関数を使用してお客様の詳細をデータベースに書き込むタスクと考えてください。

  • タスクが成功した場合は、アカウントが作成され、ようこそ E メールが送信されます。

  • 既に存在するユーザー名でアカウントを作成しようとすると、Lambda 関数はエラーを発生させ、ステートマシンによって別のユーザー名を使用してアカウント作成プロセスを再試行するように促されます。

次のコード例はそれを行う方法を示しています。Java のカスタムエラーは Exception クラスを拡張する必要があることに注意してください。

Copy
package com.example; public static class AccountAlreadyExistsException extends Exception { public AccountAlreadyExistsException(String message) { super(message); } } package com.example; import com.amazonaws.services.lambda.runtime.Context; public class Handler { public static void CreateAccount(String name, Context context) throws AccountAlreadyExistsException { throw new AccountAlreadyExistsException ("Account is in use!"); } }

Catch ルールを使用してエラーをキャッチするように Step Functions を設定できます。Lambda は実行時にエラー名を例外の完全修飾クラス名に自動的に設定します。

Copy
{ "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:CreateAccount", "Next": "SendWelcomeEmail", "Catch": [ { "ErrorEquals": ["com.example.AccountAlreadyExistsException"], "Next": "SuggestAccountName" } ] }, … } }

実行時、AWS Step Functions はエラーをキャッチし、Next 移行に指定されているとおり SuggestAccountName 状態に移行します。

カスタムエラー処理によって、サーバーレスアプリケーションの作成がより簡単になります。この機能は、Lambda プログラミングモデル でサポートされているすべての言語に統合できるため、選択したプログラミング言語でアプリケーションを設計したり、作業途中で混用したり組み合わせたりできます。

AWS Step Functions および AWS Lambda を使用した独自のサーバーレスアプリケーション作成の詳細については、AWS Step Functions を参照してください。

このページの内容: