多くのAWSのカスタマーは画像やドキュメントのアップロードを取り扱ったり、AWS CloudTrailからのログファイルを処理したり、Amazon Kinesisのデータストリームを扱ったりなどといった、クリーンで複雑でないアプリケーションを構築するためにAWS Lambdaを利用しています。最近ローンチされた同期呼び出し機能により、Lambdaはモバイル、WebとIoTのバックエンドを構築するにあたって好まれる選択肢に急速になりつつあります。
内部のメーリングリストはLambdaの興味深い使い方に関する議論にあふれており、その多くはトラディショナルなデータ処理の領域に含まれます。これらのカスタマーは自分たちのアプリケーションにフォーカスすることが可能で、ホスティングやスケーリングといった仕事を我々に任せることができるためLambdaを非常に気に入っています。これまでデベロッパーは、特にサーバサイドアプリケーションで利用するためにデザインされたJavaScriptの派生であるNode.jsでLambdaファンクションを書いてきました。
JavaによるLambdaファンクション
本日、我々はJavaでLambdaファンクションを書くことができるようにすることでLambdaをさらに便利にします。我々はこの件に関する多くのリクエストを頂いていました。そしてチームはこれに応えることができることにわくわくしています。これはLambdaの開発者に対し、我々が利用可能にするよう予定している追加言語オプションにおける最初のものとなります。
必要とするあらゆるJavaライブラリと一緒にJava 8の機能(詳細はWhat’s New in JDK 8を参照)をあなたのコードで使用することが可能です。AWS APIを呼び出すためにAWS SDK for Javaを利用することも可能です。
Lambda固有の2つのライブラリを提供します。Lambdaファンクションのハンドラとコンテキストオブジェクトに対するインターフェースであるaws-lambda-java-coreとAWSイベントソース (Amazon Simple Storage Service (S3)やAmazon Simple Notification Service (SNS)、Amazon DynamoDB、Amazon Kinesis、Amazon Cognito)に関する型の定義を含むaws-lambda-java-eventsです。また、あなたはLambdaのJavaプログラミングモデルの詳細を学ぶのに時間を費やしたいかもしれません。
Lambdaファンクションを次のいずれかの方法で作成することができます。1つ目はインプットとアウトプットのオブジェクト(インプットとアウトプットの型は任意のJava POJOもしくはプリミティブであることが可能です)を使ったハイレベルモデルを利用できます。
public lambdaHandler( input, Context context) throws IOException;
public lambdaHandler( input) throws IOException;
もし、POJOを使いたくなかったり、Lambdaのシリアライゼーションモデルが要件を満たしていない場合、ストリームモデルを利用できます。これは少し低レベルなものとなります。
publicvoidlambdaHandler(InputStream input, OutputStream output, Context context)throws IOException;
Lambdaファンクションが定義されたクラスは引数なしのコンストラクタを含む必要があります。また、スタティックメソッドとしてハンドラを定義する必要があります。あるいはLambdaコアJavaライブラリで利用可能なハンドラインターフェース(RequestHandler::handleRequestもしくは
RequestStreamHandler::handleRequest
)の1つを実装することも可能です。
パッケージング、デプロイそしてアップロード
既存の開発ツールを使い続けることが可能です。コンパイル済みコードをLambdaで利用する準備のため、コンパイル済みコード(CLASSファイル)と必要なJARファイル(Lambdaにアップロードするデプロイメントパッケージは50MBまでに制限されていることに気をつけてください)を含むZIPもしくはJARファイルを作成しなければいけません。ハンドラファンクションは一般的なJavaのディレクトリ構造(e.g. com/mypackage/MyHandler.class
)に保存されるべきで、JARファイルはlibサブディレクトリ内に直接置く必要があります。このプロセスを簡単にするために、MavenやGradleのようなポピュラーなJavaのデプロイメントツールを使ったビルドのアプローチを公開してきました。
ZIPファイルをアップロードする際、"java8"のランタイムを指定してください。ハンドラインターフェースの1つを実装しているならば、クラス名を与えてください。さもなければ、完全修飾のメソッドへの参照を与えてください (e.g. com.mypackage.LambdaHandler::functionHandler
)。
AWS Toolkit for Eclipseを利用する
AWS Toolkit for Eclipseプラグインは自動的にZIPファイルを生成しアップロードします。AWSメニューからLambdaプロジェクトを作成できます。
プロジェクトの詳細項目を埋めたらツールキットによって生成されたテンプレートを使って始められます。
その後、ファンクションを書いたり、それをクリック1つでLambdaにデプロイできます。
そして、その後それを呼び出すことができます。
今すぐ利用可能
本日よりLambdaファンクションをJavaで書き始められます!
詳細を知るには、Lambdaのドキュメント内のAuthoring Lambda Functions in Javaを読んでください。
— Jeff;(翻訳は西谷が担当しました)