AWSとLambda with Java

Javaを使用したAWS Lambda

1. 前書き

AWS Lambdaは、サーバー、OS、スケーラビリティなどの構成を削減するためにAmazonが提供するサーバーレスコンピューティングサービスです。 AWS Lambdaは、AWSクラウドでコードを実行できます。

さまざまなAWSリソース上のイベントに応答して実行され、AWS Lambda関数をトリガーします。 価格は従量制です。つまり、アイドル状態のラムダ関数にお金をかけません。

このチュートリアルには、有効なAWSアカウントが必要です。 1つのhereを作成できます。

2. Mavenの依存関係

AWSラムダを有効にするには、プロジェクトに次の依存関係が必要です。


    com.amazonaws
    aws-lambda-java-core
    1.1.0

この依存関係はMaven repositoryにあります。

ラムダアプリケーションをビルドするには、Maven Shade Pluginも必要です。


    org.apache.maven.plugins
    maven-shade-plugin
    2.4.3
    
        false
    
    
        
            package
        
                shade
            
        
    

3. ハンドラを作成

簡単に言えば、ラムダ関数を呼び出すには、ハンドラーを指定する必要があります。ハンドラーを作成するには3つの方法があります。

  1. カスタムMethodHandlerの作成

  2. RequestHandlerインターフェースの実装

  3. RequestStreamHandlerインターフェースの実装

コード例を使用してそれを行う方法を見てみましょう。

3.1. カスタムMethodHandler

着信リクエストのエントリポイントとなるハンドラメソッドを作成します。 入力値としてJSON形式またはプリミティブデータ型を使用できます。

また、オプションのContextオブジェクトを使用すると、Lambda実行環境内で利用可能な有用な情報にアクセスできます。

public class LambdaMethodHandler {
    public String handleRequest(String input, Context context) {
        context.getLogger().log("Input: " + input);
        return "Hello World - " + input;
    }
}

3.2. RequestHandlerインターフェース

RequestHandlerをクラスに実装し、リクエストのエントリポイントとなるhandleRequestメソッドをオーバーライドすることもできます。

public class LambdaRequestHandler
  implements RequestHandler {
    public String handleRequest(String input, Context context) {
        context.getLogger().log("Input: " + input);
        return "Hello World - " + input;
    }
}

この場合、入力は最初の例と同じになります。

3.3. RequestStreamHandlerインターフェース

クラスにRequestStreamHandlerを実装し、handleRequestメソッドをオーバーライドすることもできます。

違いは、InputStreamObjectStream、およびContextオブジェクトがパラメーターとして渡されることです。

public class LambdaRequestStreamHandler
  implements RequestStreamHandler {
    public void handleRequest(InputStream inputStream,
      OutputStream outputStream, Context context) {
        String input = IOUtils.toString(inputStream, "UTF-8");
        outputStream.write(("Hello World - " + input).getBytes());
    }
}

4. デプロイメントファイルのビルド

すべてを設定したら、次を実行するだけで展開ファイルを作成できます。

mvn clean package shade:shade

jarファイルはtargetフォルダーの下に作成されます。

5. 管理コンソールを介してLambda関数を作成する

AWS Amazonにサインインし、servicesの下のLambdaをクリックします。 このページには、既に作成されているラムダ関数リストが表示されます。

ラムダを作成するために必要な手順は次のとおりです。

  1. “Select blueprint”をクリックし、「Blank Function”」を選択します

  2. “Configure triggers”(この場合、トリガーやイベントはありません)

  3. 「機能の構成」:

    • 名前:MethodHandlerLambdaを提供し、

    • 説明:ラムダ関数を説明するもの

    • ランタイム:java8を選択します

    • コード入力タイプと機能パッケージ:「Upload a .ZIP and Jar file”」を選択し、「Upload”」ボタンをクリックします。 ラムダコードを含むファイルを選択します。

    • Lambda function handler and roleの下:

      • ハンドラー名:ラムダ関数ハンドラー名com.example.MethodHandlerLambda::handleRequestを指定します

      • ロール名:ラムダ関数で他のAWSリソースが使用されている場合、既存のロールを作成/使用してアクセスを提供し、ポリシーテンプレートも定義します。

    • Advanced settings:未満

      • メモリ:ラムダ関数が使用するメモリを提供します。

      • タイムアウト:各リクエストのラムダ関数の実行時間を選択します。

  4. すべての入力が完了したら、「Next”」をクリックすると、構成を確認するように表示されます。

  5. レビューが完了したら、「Create Function”」をクリックします。

6. 関数を呼び出す

AWSラムダ関数が作成されたら、いくつかのデータを渡してテストします。

  • リストからラムダ関数をクリックしてから、「Test”」ボタンをクリックします

  • データを送信するためのダミー値を含むポップアップウィンドウが表示されます。 “example”でデータを上書きする

  • Save and test”」ボタンをクリックします

画面に、Execution resultセクションが表示され、出力が正常に返されます。

"Hello World - example"

7. 結論

この簡単な紹介記事では、Java8を使用して簡単なAWSLambdaアプリを作成し、それをAWSにデプロイしてテストしました。

サンプルアプリの完全なソースコードはover on Githubにあります。