LoginSignup
12
15

More than 5 years have passed since last update.

AWS LambdaをJavaから使ってみる

Last updated at Posted at 2014-11-25

AWS LambdaをRubyから使ってみる」のJava版です。
コードの部分がJavaに変わった以外に特に違いはありません。
なので、元記事も参照してもらえるといいかと思います。

AWS LambdaはS3やKinesis、DynamoDBのイベントをトリガーにJavaScript/Node.jsで書かれたコードスニペットを実行するというサービスです。
イベントの実行元として上記以外にAPIからの直接実行も可能となっているので今回はAWS SDK for Javaを利用してこれを試してみます。

Lambda functionは前回と同様のものを「invoke-from-sdk」という名前であらかじめ作成しておきます。実行される処理も前回と同様で渡されたパラメータ(JSON形式)のkey1というキーの値を読み取ってコンソールに出力します。

Java側のプロジェクトはMavenプロジェクトとして構成しています。
サンプルコードはgithub上に置いておきました。

まずはpom.xmlにAWS SDKを追加します。今回は面倒だったのでフルで依存関係を設定していますが、サービス単位とかで細かく指定することも可能です。例えばaws-java-sdk-dynamodbを指定することも可能です。
というわけでpom.xmlの<dependencies></dependencies>に追加します。

pom.xml
  <dependencies>
--省略--
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.9.7</version>
    </dependency>
  </dependencies>

続いてコードです。
今回はこんな感じです。

Sample.java
package org.sample.lambda;

import com.amazonaws.services.lambda.AWSLambdaClient;
import com.amazonaws.services.lambda.model.InvokeAsyncRequest;
import com.amazonaws.services.lambda.model.InvokeAsyncResult;

public class Sample {
    public static void main(String[] args){
        Sample sample = new Sample();
        sample.invokeLambdaFunction();
    }

    private void invokeLambdaFunction(){
        AWSLambdaClient lambda = new AWSLambdaClient();

        InvokeAsyncRequest invokeAsyncRequest = new InvokeAsyncRequest();
        invokeAsyncRequest.setFunctionName("invoke-from-sdk");
        invokeAsyncRequest.setInvokeArgs("{\"key1\":\"from java\"}");

        InvokeAsyncResult invokeAsyncResult = lambda.invokeAsync(invokeAsyncRequest);
        int status = invokeAsyncResult.getStatus().intValue();

        if(status == 202){
            System.out.println("success");
        }
    }
}

処理内容としては前回と同様です。
Lambdaのクライアントクラスとして処理をブロックする通常のAWSLambdaClientとノンブロッキングなAWSLambdaAsyncClientの2種類がありますが今回はサンプルなのでAWSLambdaClient(ブロックする方)を使っています。
従ってレスポンスが返ってくるまでwaitすることになります。

あと、今回はちゃんと例外処理をしていませんがinvokeAsyncメソッドはいくつかRuntimeExceptionを発生させるので実際にはtry~catchで囲むなど適切に処理してください。

実行したら一応CloudWatchの画面で確認してみます。

Screen Shot 2014-11-25 at 4.59.53 PM.png

はい、ちゃんと実行できてますね。
Rubyほど簡単ではないですがこのようにJavaからもLambda functionを呼び出せます。

免責
こちらは個人の意見で、所属する企業や団体は関係ありません。

12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15