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

90件のシェア(ちょっぴり話題の記事)

この記事は公開されてから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 ちゃんに期待ですね!!