Lambda Java 関数のシリアル化をカスタマイズ
Lambda Java マネージドランタイムは、JSON イベントのカスタムシリアル化をサポートしています。カスタムシリアル化はコードを簡素化し、パフォーマンスを向上させる可能性があります。
カスタムシリアル化を使用する場合
Lambda 関数を呼び出すと、入力イベントデータを Java オブジェクトに逆シリアル化し、関数からの出力を関数のレスポンスとして返すことができる形式にシリアル化する必要があります。Lambda Java マネージドランタイムは、Amazon API Gateway や Amazon Simple Queue Service (Amazon SQS) など、さまざまな AWS サービスからのイベントペイロードを処理するのに最適なデフォルトのシリアル化および逆シリアル化機能を提供します。関数でこれらのサービス統合イベントを使用するには、aws-java-lambda-events
また、独自のオブジェクトを使用して、Lambda 関数に渡すイベント JSON を表すこともできます。マネージドランタイムは、JSON をデフォルトの動作でオブジェクトの新しいインスタンスにシリアル化しようとします。デフォルトのシリアライザーにユースケースに必要な動作がない場合は、カスタムシリアル化を使用します。
例えば、関数ハンドラーが、以下の構造で Vehicle
クラスを入力として想定するとします:
public class Vehicle { private String vehicleType; private long vehicleId; }
ただし、JSON イベントペイロードは以下のようになります:
{ "vehicle-type": "car", "vehicleID": 123 }
このシナリオでは、マネージドランタイムのデフォルトのシリアル化により、JSON プロパティ名がキャメルケースの Java クラスプロパティ名 (vehicleType
、vehicleId
) と一致することが想定されます。JSON イベントのプロパティ名はキャメルケース (vehicle-type
、vehicleID
) にないため、カスタムシリアル化を使用する必要があります。
カスタムシリアル化の実装
サービスプロバイダーインターフェイスRequestHandler
インターフェイスを使用して、JSON イベントペイロードを Java オブジェクトに直接シリアル化できます。
Lambda Java 関数でカスタムシリアル化を使用するには
-
aws-lambda-java-core
ライブラリを依存関係として追加します。このライブラリには、CustomPojoSerializer インターフェイスと、Lambda で Java を操作するための他のインターフェイス定義が含まれています。 -
プロジェクトの
src/main/META-INF/services/
ディレクトリにcom.amazonaws.services.lambda.runtime.CustomPojoSerializer
という名前のファイルを作成します。 -
このファイルで、
CustomPojoSerializer
インターフェイスを実装する必要があるカスタムシリアライザー実装の完全修飾名を指定します。例:com.mycompany.vehicles.CustomLambdaSerialzer
-
CustomPojoSerializer
インターフェイスを実装して、カスタムシリアル化ロジックを提供します。 -
Lambda 関数で標準
RequestHandler
インターフェイスを使用します。マネージドランタイムは、カスタムシリアライザーを使用します。
fastJson 、Gson、Moshi、jackson-jr などの一般的なライブラリを使用してカスタムシリアル化を実装するその他の例については、「AWS GitHub リポジトリ」の「custom-serialization
カスタムシリアル化のテスト
関数をテストして、シリアル化ロジックと逆シリアル化ロジックが期待どおりに動作していることを確認します。AWS Serverless Application Model コマンドラインインターフェイス (AWS SAM CLI) を使用して、Lambda ペイロードの呼び出しをエミュレートできます。これにより、カスタムシリアライザーを導入する際に、関数ですばやくテストして反復処理できます。
-
関数を呼び出す JSON イベントペイロードを使用してファイルを作成し、AWS SAM CLI を呼び出します。
-
sam ローカル呼び出しコマンドを実行して、関数をローカルで呼び出します。例:
sam local invoke -e src/test/resources/event.json
詳細については、「AWS SAM を使用して Lambda 関数をローカルで呼び出し」を参照してください。