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

ハンドラー作成用に事前定義されているインターフェイスの利用 (Java)

任意の名前とパラメータを使用して独自のハンドラーメソッドを記述する代わりに、AWS Lambda Java コアライブラリ (aws-lambda-java-core) に用意されている定義済みインターフェイスのいずれかを使用して、Lambda 関数ハンドラーを作成することもできます。ハンドラーの詳細については、「Lambda 関数ハンドラー (Java)」を参照してください。

いずれかの定義済みインターフェイス (RequestStreamHandler または RequestHandler) を実装し、インターフェイスに用意された handleRequest メソッドを実装できます。標準の Java の型を使用するか、ハンドラーの入出力 (AWS Lambda が自動的に入出力をシリアル化して、データ型に一致させる) 用のカスタム POJO 型を使用するかに応じて、これらのインターフェイスの 1 つを実装します。または Stream 型を使用してシリアル化をカスタマイズします。

注記

これらのインターフェイスは、aws-lambda-java-core ライブラリで利用できます。

標準インターフェイスを実装すると、コンパイル時にメソッドの署名を検証するのに役立ちます。

インターフェイスの 1 つを実装する場合は、package.class を、Lambda 関数を作成するときに Java コードで指定します。たとえば、「使用開始」から変更された create-function CLI コマンドを次に示します。--handler パラメータが値 "example.Hello" を指定することに注意してください。

Copy
aws lambda create-function \ --region us-west-2 \ --function-name getting-started-lambda-function-in-java \ --zip-file fileb://deployment-package (zip or jar) path \ --role arn:aws:iam::account-id:role/lambda_basic_execution \ --handler example.Hello \ --runtime java8 \ --timeout 15 \ --memory-size 512

以下のセクションでは、これらのインターフェイスを実行する例を示します。

例 1: カスタム POJO 入出力を使用したハンドラーの作成 (RequestHandler インターフェイスを利用)

このセクションの例の Hello クラスは、RequestHandler インターフェイスを実装します。このインターフェイスは、Request 型の入力パラメータとしてイベントデータを受け取る handleRequest() メソッドを定義し、Response 型の POJO オブジェクトを返します。

Copy
public Response handleRequest(Request request, Context context) { ... }

handleRequest() メソッドのサンプル実装を持つ Hello クラスを示します。この例では、イベントデータが名と姓で構成されることを想定しています。

Copy
package example; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.Context; public class Hello implements RequestHandler<Request, Response> { public Response handleRequest(Request request, Context context) { String greetingString = String.format("Hello %s %s.", request.firstName, request.lastName); return new Response(greetingString); } }

たとえば、イベントデータが Request オブジェクトにある場合は、次のようになります。

Copy
{ "firstName":"value1", "lastName" : "value2" }

このメソッドは、次のように Response オブジェクトを返します。

Copy
{ "greetings": "Hello value1 value2." }

次に、Request および Response クラスを実装する必要があります。テスト用に次の実装を使用できます。

Request クラス:

Copy
package example; public class Request { String firstName; String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Request(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public Request() { } }

Response クラス:

Copy
package example; public class Response { String greetings; public String getGreetings() { return greetings; } public void setGreetings(String greetings) { this.greetings = greetings; } public Response(String greetings) { this.greetings = greetings; } public Response() { } }

このコードから Lambda 関数を作成し、エンドツーエンドのエクスペリエンスを次のようにテストできます。

  • 前述のコードを使用して、デプロイパッケージを作成します。

  • デプロイパッケージを AWS Lambda にアップロードし、Lambda 関数を作成します。

  • コンソールまたは CLI を使用して Lambda 関数をテストします。Request クラスのゲッターとセッターに準拠するサンプル JSON データを指定できます。次に例を示します。

    Copy
    { "firstName":"John", "lastName" : "Doe" }

    Lambda 関数は、レスポンスで次の JSON を返します。

    Copy
    { "greetings": "Hello John, Doe." }

「開始方法」セクションの手順に従ってください ( ステップ 2.3: (オプション) Java で Lambda 関数を作成する)をクリックします。以下の違いに注意してください。

  • デプロイパッケージを作成するときに、aws-lambda-java-core ライブラリの依存関係を忘れないでください。

  • Lambda 関数を作成するときに、example.Hello (package.class) をハンドラー値として指定します。

例 2: ストリームの入出力と使用したハンドラーの作成 (RequestStreamHandler インターフェイスを利用)

この例の Hello クラスは、RequestStreamHandler インターフェイスを実装します。インターフェイスは、次のように handleRequest メソッドを定義します。

Copy
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { ... }

handleRequest() ハンドラーのサンプル実装を持つ Hello クラスを示します。ハンドラーは、単に大文字に変換して返すことで、受信イベントデータを処理します (たとえば、文字列 "hello")。

Copy
package example; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; import com.amazonaws.services.lambda.runtime.Context; public class Hello implements RequestStreamHandler { public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { int letter; while((letter = inputStream.read()) != -1) { outputStream.write(Character.toUpperCase(letter)); } } }

このコードから Lambda 関数を作成し、エンドツーエンドのエクスペリエンスを次のようにテストできます。

  • 前述のコードを使用してデプロイパッケージを作成します。

  • デプロイパッケージを AWS Lambda にアップロードし、Lambda 関数を作成します。

  • コンソールまたは CLI を使用して Lambda 関数をテストします。サンプルの文字列データを指定できます。次に例を示します。

    Copy
    "test"

    Lambda 関数は応答として TEST を返します。

「開始方法」セクションの手順に従ってください ( ステップ 2.3: (オプション) Java で Lambda 関数を作成する)をクリックします。以下の違いに注意してください。

  • デプロイパッケージを作成するときに、aws-lambda-java-core ライブラリの依存関係を忘れないでください。

  • Lambda 関数を作成するときに、example.Hello (package.class) をハンドラー値として指定します。