1. 序章

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

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

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

2. Mavenの依存関係

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

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-core</artifactId>
    <version>1.1.0</version>
</dependency>

この依存関係は、Mavenリポジトリにあります。

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

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.3</version>
    <configuration>
        <createDependencyReducedPom>false</createDependencyReducedPom>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
	    <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

3. ハンドラーの作成

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

  1. カスタムMethodHandlerの作成
  2. RequestHandlerインターフェースの実装
  3. RequestStreamHandlerインターフェースの実装

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

3.1. Custom 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<String, String> {
    public String handleRequest(String input, Context context) {
        context.getLogger().log("Input: " + input);
        return "Hello World - " + input;
    }
}

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

3.3. RequestStreamHandlerインターフェース

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

違いは、 InputStream ObjectStream 、および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 にサインインし、サービスの下のLambdaをクリックします。 このページには、すでに作成されているラムダ関数リストが表示されます。

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

  1. 「ブループリントの選択」、次に「空白機能」を選択します
  2. 「トリガーの構成」(この場合、トリガーやイベントはありません)
  3. 「機能の構成」:
    • 名前: MethodHandlerLambda を提供し、
    • 説明:ラムダ関数を説明するもの
    • ランタイム:java8を選択します
    • コード入力の種類と機能パッケージ:「 .ZIPおよびjarファイルのアップロード」を選択し、「アップロード」ボタンをクリックします。 ラムダコードを含むファイルを選択します。
    • Lambda関数ハンドラーとロールの下:
      • ハンドラー名:ラムダ関数ハンドラー名を指定します com.baeldung.MethodHandlerLambda :: handleRequest
      • ロール名:ラムダ関数で他のAWSリソースが使用されている場合は、既存のロールを作成/使用してアクセスを提供し、ポリシーテンプレートも定義します。
    • 詳細設定:
      • メモリ:ラムダ関数で使用されるメモリを提供します。
      • タイムアウト:リクエストごとにラムダ関数を実行する時間を選択します。
  4. すべての入力が完了したら、[次へ] をクリックすると、構成を確認するように表示されます。
  5. レビューが完了したら、「関数の作成」をクリックします。

6. 関数を呼び出す

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

  • リストからラムダ関数をクリックしてから、「テスト」ボタンをクリックします
  • データを送信するためのダミー値を含むポップアップウィンドウが表示されます。 「Baeldung」でデータを上書きします
  • 保存してテスト」ボタンをクリックします

画面に、実行結果セクションが表示され、次のように出力が正常に返されます。

"Hello World - Baeldung"

7. 結論

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

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