ちょっと話題の記事

Lambda Function が Java で書けるようになりました!

2015.06.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Lambda Function が Java で書けるようになりました

本日 AWS Lambda にアップデートがあり、Java で書けるようになりました!以前からアナウンスされていましたが、本日からついに使えるようになりました。

ということで、早速 Lambda Function を作ってみました。

AWS Toolkit for Eclipse のインストール

Lambda Function は AWS Toolkit for Eclipse を利用すると簡単に実装できます。今回は現時点の最新バージョンである Eclipse IDE for Java Developers Luna Service Release 2 (4.4.2) を使いました。

AWS Toolkit for Eclipse は次のような手順でインストールします。

  1. [ヘルプ] > [新しいソフトウェアをインストール] を開く
  2. [機能するソフトウェア] のテキストボックスに http://aws.amazon.com/jp/eclipse を入力
  3. 「AWS Toolkit for Eclipse」を選択
  4. インストールして再起動

lambda-java01

AWS Lambda Java Project の作成

準備が整ったので AWS Lambda Java Project を作成します。AWS Toolkit for Eclipse をインストールしたあと、ツールバーに AWS アイコンが表示されていると思います。アイコンをクリックして表示されるメニューから「New AWS Lambda Java Project...」を選択します。

lambda-java02

プロジェクト名、パッケージ名、クラス名、イベントの種類、出力形式のクラスを指定します。今回は SNS Event を選択しました。

lambda-java03

作成したプロジェクト構成はこんな感じです。

lambda-java04

以下のような Lambda Function のソースコードが自動生成されます。なお、イベントの種類によって引数が異なってきます。JDK 8 で実行されるので、Java 8 の機能が利用できます。

package jp.classmethod.sample.lambda;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

import com.amazonaws.services.lambda.runtime.events.SNSEvent;

public class LambdaFunctionHandler implements RequestHandler<SNSEvent, Object> {

@Override
public Object handleRequest(SNSEvent input, Context context) {
context.getLogger().log("Input: " + input);

// TODO: implement your handler
return null;
}

}

ユニットテストのサンプル付き。これは非常に有難いです!

package jp.classmethod.sample.lambda;

import java.io.IOException;

import org.junit.BeforeClass;
import org.junit.Test;

import com.amazonaws.services.lambda.runtime.Context;

import com.amazonaws.services.lambda.runtime.events.SNSEvent;

/**
* A simple test harness for locally invoking your Lambda function handler.
*/
public class LambdaFunctionHandlerTest {

private static SNSEvent input;

@BeforeClass
public static void createInput() throws IOException {
input = TestUtils.parse("sns-event.json", SNSEvent.class);
}

private Context createContext() {
TestContext ctx = new TestContext();

// TODO: customize your context here if needed.
ctx.setFunctionName("Your Function Name");

return ctx;
}

@Test
public void testLambdaFunctionHandler() {
LambdaFunctionHandler handler = new LambdaFunctionHandler();
Context ctx = createContext();

Object output = handler.handleRequest(input, ctx);

// TODO: validate output here if needed.
if (output != null) {
System.out.println(output.toString());
}
}
}

Lambda Function のアップロード

とりあえずこのままアップロードしてみましょう。プロジェクトを右クリックすると表示されるコンテキストメニューから「Upload function to AWS Lambda...」を選択します。

lambda-java05

リージョンとファンクション名を設定します。

lambda-java06

説明、Lambda Function のクラス、IAM Role、S3 バケット、メモリサイズとタイムアウト時間を設定します。

lambda-java07

以上で完了です。マネジメントコンソールを開くと、アップロードされていると思います!

lambda-java08

Lambda Function をテストする

あとはマネジメントコンソールから今までと同じように Sample event を使ったテストが行えます。

lambda-java09

JUnit を使ったテストも行えます!通信が発生しないテストが書きやすいのは嬉しいですね。

lambda-java10

まとめ

いままでは JavaScript だけでしたが、Java が使えるようになったことでより多くのデベロッパーが Lambda を使うようになるでしょう。先日 CFn も対応したので、ますます使いやすくなってきている印象です。これからも Lambda ちゃんに期待ですね!!