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

Lambda 関数ハンドラー (Java)

Lambda 関数を作成するときに、サービスでユーザーに代わって Lambda 関数を実行するときに、AWS Lambda が呼び出すことができるハンドラーを指定します。

Lambda は、ハンドラーを作成するための 2 つの方法をサポートします。

  • インターフェイスを実装しないで直接ハンドラーメソッドをロードします。このセクションでは、このアプローチについて説明します。

  • aws-lambda-java-core ライブラリ (インターフェイスアプローチ) の一部として提供される標準インターフェースを実装します。詳細については、「ハンドラー作成用に事前定義されているインターフェイスの利用 (Java)」を参照してください。

ハンドラーの一般的な構文は、次のとおりです。

Copy
outputType handler-name(inputType input, Context context) { ... }

AWS Lambda が正常にハンドラーを呼び出すためには、input パラメータのデータ型にシリアル化できる入力データで呼び出される必要があります。

構文では、以下の点に注意してください。

  • inputType – ハンドラーの最初のパラメーターはハンドラーへの入力です。このパラメーターには、イベントデータ (イベントソースによって発行される) またはユーザーが提供するカスタム入力 (文字列やカスタムデータオブジェクトなど) を指定できます。AWS Lambda がこのハンドラーを正常に呼び出せるようにするには、関数は、input パラメータのデータ型にシリアル化できる入力データとともに呼び出す必要があります。

  • outputType – Lambda 関数を同期的に呼び出す (RequestResponse 呼び出しタイプを使用) 場合は、サポートされているいずれかのデータ型を使用して関数の出力を返すことができます。たとえば、Lambda 関数をモバイルアプリケーションのバックエンドとして使用する場合、これを同期的に呼び出しています。出力データ型は JSON にシリアル化されます。

    Lambda 関数を非同期的に呼び出す (Event 呼び出しタイプを使用) 計画の場合、outputTypevoid である必要があります。たとえば、Amazon S3、Amazon Kinesis、Amazon SNS などのイベントソースとともに AWS Lambda を使用する場合、これらのイベントソースは Event 呼び出しタイプを使用して Lambda 関数を呼び出します。

  • inputTypeoutputType は、以下のいずれかとすることができます。

    • Java プリミティブ型 (文字列、整数など)。

    • aws-lambda-java-events ライブラリで定義された、事前定義の AWS イベントタイプ。

      たとえば、S3Event は、受信する Amazon S3 イベントから簡単に情報を読み取ることができるメソッドを提供するライブラリの、事前定義された POJO の 1 つです。

    • 独自の POJO クラスを記述できます。AWS Lambda は、POJO タイプに基づき入出力 JSON を自動的にシリアル化し、逆シリアル化します。

    詳細については、「ハンドラーの入出力タイプ (Java)」を参照してください。

  • 必要でない場合、Context オブジェクトをハンドラーメソッドの署名から省略できます。詳細については、「Context オブジェクト (Java)」を参照してください。

たとえば、次の Java コードの例を考えてみます。

Copy
package example; import com.amazonaws.services.lambda.runtime.Context; public class Hello { public String myHandler(int myCount, Context context) { return String.valueOf(myCount); } }

この例では、入力は整数型で、出力は文字列型です。このコードと依存関係をパッケージ化して Lambda 関数を作成する場合は、example.Hello::myHandler (package.class::method-reference) をハンドラー値として指定します。

この例の Java コードでは、ハンドラーの最初のパラメーターはハンドラー (myHandler) への入力であり、イベントデータ (Amazon S3 などのイベントソースによって発行される)、整数 (この例の場合) などとして指定するカスタム入力、または任意のカスタムデータオブジェクトを指定できます。

この Java コードを使用して Lambda 関数を作成する手順については、「ステップ 2.3: (オプション) Java で Lambda 関数を作成する」を参照してください。

ハンドラーオーバーロードの解決

Java コードに、handler の名前と同じ名前の複数のメソッドが含まれている場合、AWS Lambda は次のルールを使用して、呼び出すメソッドを選択します。

  1. 最もパラメータ数が多いメソッドを選択します。

  2. 複数のメソッドに同じ数のパラメータがある場合、AWS Lambda によって、Context を最後のパラメータとして持つメソッドが選択されます。

    Context パラメータを持つメソッドがないか、すべてのメソッドがこのパラメータを持つ場合、動作は定義されません。

追加情報

以下のトピックでは、ハンドラーについての詳細情報を示します。

  • ハンドラーの入出力タイプの詳細については、「ハンドラーの入出力タイプ (Java)」を参照してください。

  • 事前定義されているインターフェイスを使用したハンドラーの作成の詳細については、「ハンドラー作成用に事前定義されているインターフェイスの利用 (Java)」を参照してください。

    これらのインターフェイスを実装すると、コンパイル時にハンドラーメソッドの署名を検証できます。

  • Lambda 関数で例外がスローされた場合、AWS Lambda はエラーが発生したことを表す CloudWatch のメトリクスを記録します。詳細については、「例外 (Java)」を参照してください。