AWS Lambda の Java サンプルアプリケーション - AWS Lambda

AWS Lambda の Java サンプルアプリケーション

このガイドの GitHub リポジトリには、AWS Lambda での Java の使用方法を示すサンプルアプリケーションが用意されています。各サンプルアプリケーションには、簡易のデプロイとクリーンアップ用のスクリプト、AWS CloudFormation テンプレート、サポートリソースが含まれています。

Java のサンプル Lambda アプリケーション

  • blank-java – Lambda の Java ライブラリ、ロギング、環境変数、レイヤー、AWS X-Ray トレース、単体テスト、および AWS SDK の使用を示す Java 関数。

  • java-basic – 単体テストと変数ログ記録設定を使用する、最小限の Java 関数。

  • java-events – Amazon API Gateway など、依存関係として AWS SDK を必要としないイベントタイプで、aws-lambda-java-events ライブラリを使用する最小限の Java 関数。

  • java-events-v1sdk – Amazon Simple Storage Service や Amazon DynamoDB、Amazon Kinesis など、依存関係として AWS SDK を必要とするイベントタイプで、aws-lambda-java-events ライブラリを使用する Java 関数。

  • s3-java – Amazon S3 からの通知イベントを処理し、Java Class Library (JCL) によりアップロード済みイメージファイルからサムネイルを作成する、Java 関数。

blank-java サンプルアプリを使用して、基本を学習したり、独自のアプリケーションの作成を始めたりできます。Lambda の Java ライブラリ、環境変数、AWS SDK、AWS X-Ray SDK の使用方法を示します。Lambda レイヤーを使用して、関数コードとは別に依存関係をパッケージ化します。これにより、関数コードを反復処理するときのデプロイ時間が短縮されます。プロジェクトに必要なセットアップは最小限であり、コマンドラインから 1 分未満でデプロイできます。


          Blank sample application for Java.

他のサンプルアプリケーションは、Lambda と統合されるサービスの他のビルド設定、ハンドラーインターフェイス、ユースケースを示しています。java-basic サンプルでは、最小限の依存関係を持つ関数を示しています。このサンプルは、AWS SDK のような追加のライブラリを必要としない場合に使用でき、標準の Java タイプで関数の入力と出力を表すことができます。別のハンドラータイプを試すには、関数のハンドラー設定を変更するだけでかまいません。

java-basic/src/main/java/example/HandlerStream.java – ストリームハンドラー

// Handler value: example.HandlerStream public class HandlerStream implements RequestStreamHandler { Gson gson = new GsonBuilder().setPrettyPrinting().create(); @Override public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { LambdaLogger logger = context.getLogger(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("US-ASCII"))); PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream, Charset.forName("US-ASCII")))); try { HashMap event = gson.fromJson(reader, HashMap.class); logger.log("STREAM TYPE: " + inputStream.getClass().toString()); logger.log("EVENT TYPE: " + event.getClass().toString()); writer.write(gson.toJson(event)); ...

java-events および java-events-v1sdk のサンプルは、aws-lambda-java-events ライブラリが提供するイベントタイプの使用を示しています。これらのタイプは、AWS のサービスが関数に送信するイベントドキュメントを表します。java-events には、追加の依存関係を必要としないタイプのハンドラーが含まれています。AWS SDK for Java のタイプを必要とする DynamodbEvent などのイベントタイプの場合、java-events-v1sdk は SDK をそのビルド設定に含めます。

java-events-v1sdk/src/main/java/example/HandlerDynamoDB.java – DynamoDB レコード

import com.amazonaws.services.lambda.runtime.events.DynamodbEvent; import com.amazonaws.services.lambda.runtime.events.DynamodbEvent.DynamodbStreamRecord; import com.amazonaws.services.dynamodbv2.model.Record; ... // Handler value: example.HandlerDynamoDB public class HandlerDynamoDB implements RequestHandler<DynamodbEvent, String>{ private static final Logger logger = LoggerFactory.getLogger(HandlerDynamoDB.class); Gson gson = new GsonBuilder().setPrettyPrinting().create(); @Override public String handleRequest(DynamodbEvent event, Context context) { String response = new String("200 OK"); for (DynamodbStreamRecord record : event.getRecords()){ logger.info(record.getEventID()); logger.info(record.getEventName()); logger.info(record.getDynamodb().toString()); } ...

その他のハイライトについては、この章の他のトピックを参照してください。