JavaでLambdaを作成する

awsアプリケーション開発

本記事では、JavaでAWSのサーバーレスサービスであるLambdaのプログラムを作成する方法を紹介します。

Z-A-K-I
Z-A-K-I

pythonでLambdaを作成する方法は知ってるけど、

コンパイルが必要なJavaで作成するにはどうすればいいのだろう?

と、思ってる方におすすめです。

この記事では、以下のことを紹介してます。

  • AWS Lambdaとは
  • JavaでLambdaを作成する際の注意点
  • JavaでLambdaを作成する具体的な方法

LambdaはAWSのサーバーレスのサービスのため、インターネット上では、サーバレスと相性のよいインタプリタ型言語であるPythonやNode.jsの記事が多く見つかります。

しかし、コンパイル型の言語であるJavaを利用した記事があまりありませんでした。

本記事では、JavaでAWS Lambdaプログラムの作成からコンパイル方法、AWS上で実行するまでの一連の流れを記載します。

AWS Lambdaとは

まずは、AWS Lambdaとは何かを簡単に紹介します。

公式サイトによると

AWS Lambda は、サーバーをプロビジョニングまたは管理せずにコードを実行できるようにするコンピューティングサービスです。

とのことです。

Lambdaのようなサーバーレスのサービスを利用せずにプログラムを公開するには、以下の作業が必要となります。

  1. プログラムを動かすためのサーバの準備
  2. サーバ上にミドルウェアをインストール
  3. ミドルウェアのパラメータ設定
  4. プログラムをミドルウェア上にデプロイ

上記作業を実施することで、ようやくプログラムを実行する環境が整います。

AWS Lambdaでは、上記作業の必要なく、プログラムを動作させることができます。

これにより、プログラムを実行するための環境準備がなくなり、サーバの脆弱性のパッチ対応、ミドルウェアの脆弱性のパッチ対応の作業も不要となり、運用も楽になります。

LambdaについてはAWS公式サイトは以下となります。

AWS Lambda の概要 - AWS Lambda
Lambda は、サーバーをプロビジョニングまたは管理することなくアプリケーションを構築できるようにするコンピューティングサービスです。

JavaでLambdaを作成するための開発環境

ローカル上のeclipseで開発します。
私の環境は以下です。私はMacを利用してますが、Windowsでも問題ありません。ローカルPC上のEclipseで開発します。

  • OS:M1 MacBook Air
  • Java OpenJDK Corretto-11.0.18.10.1 
  • eclipse 2023-03

JavaでAWS Lambdaを作成する際の注意点

実際に開発作業をしてみて、インターネット上のドキュメントだけだとわからなかったことを紹介します。

注意点1:JavaはAWS Console上での編集はできない

インタプリタ型の言語であるPythonやNode.jsなどでは、AWS Consol上でコードを編集し、即時実行できますが、コンパイルが必要なJavaではそれを行うことができません。

Javaの場合はローカルでコンパイルして作成されたjarファイルをアップロードしてデプロイが必要です。

注意点2:AWS SDKはEclipseで動作しなかった

これは私だけでしょうか。

Pythonでの開発時は、VSCodeなどで開発が行えますが、AWSから提供されているAWS SDKがあり、インストールすることでLambdaの開発が楽になります。

EclipseにもAWS SDKが存在するのですが、インストールしても動かすことができませんでした。

以下のエラーが表示され、設定画面すら出ない状態でした。

AWS SDKはEclipseで動作しなかったエラー

インストールしたバージョンは以下。

was-sdkのバージョン情報

また、公式でもJavaのAWS SDKはサポートが終了されたので、大人しくAWS SDKを利用しないことにしましょう。

Developer Guide - AWS SDK for Java 1.x - AWS SDK for Java 1.x
The AWS SDK for Java provides a Java API for AWS services. Using the SDK, you can easily build Java applications that wo...

JavaでLambdaプログラムの作成

実際にJavaでLambdaを作成していく手順を紹介します。今回は手順を紹介するため、プログラムの内容は「HelloWorld」と表示するだけのシンプルなものとします。

Mavenプロジェクトの作成

プロジェクトはMavenプロジェクトで作成します。

Mavenプロジェクトの作成は、以下サイトを参考にさせていただきました。

EclipseにおけるMavenを使ったシンプルプロジェクトの作成と実行 - Qiita
はじめにこんばんわ、きりです。本記事はNablarchを使ってみようのサブ記事として作成しております。今回はよりMavenを利用したプロジェクト作成について整理します。本記事ではMavenの…

Lambdaプログラムの作成

Lambdaはエントリポイントはデフォルトでは「EventHandler」クラスの「handleRequest」メソッドです。

そのため、上記クラスとメソッドを作成します。

Lambdaのエントリポイントの設定
エントリポイントの処理

作成したモジュールをAWS Lambdaにアップロード

mvnコマンドを使って作成したプロジェクトをビルドし、デプロイモジュールを作成します。

mavenコマンドを以下コマンドを実行しインストールします。私はMacのため、homebrewでインストールしました。

brew install maven

ビルドのコマンドは以下です。

mvn build package

ビルドが成功すると、以下のようにjarファイルが作成されます。

mavenコマンドによって作成されたjarファイル


作成された上記jarファイルをAWS Consoleを利用してアップロード(デプロイ)します。

AWSコンソール上の以下画面から上記jarファイルを指定します。

jarファイルをLambdaとしてデプロイする画面

動作確認

デプロイされたLambdaが正しく実行できるか確認します。

AWS Console上からLambdaを実行して確認してみます。テストタブから「テスト」をクリックします。

Lambdaをテストするボタン

デフォルトでイベントJSONに以下のパラメータが設定されてます。ここのパラメータは、Lambdaに受け渡すパラメータを記載します。

例えば、ReactやVueなどのフロントエンドのアプリケーションから検索条件などのパラメータを受け渡し、Lambdaでその値によってデータ取得結果を変える場合などに利用します。

今回はパラメータを受け取らないラムダなので、何も変更せずに実行します。

Lambdaをテスト実行する際のパラメータ


テストボタンをクリック後、以下の結果になれば成功です。

Lambdaテスト実行後の結果

実践的なコードの紹介

ここまでで、パラメータを受け取らないLamddaを作成しました。

実際にLambdaで処理を構築する際には、リクエストパラメータを取得する必要が必ずあります。

ここでは、リクエストパラメータを取得するコードを紹介します。下記のコードではinputにRequestパラメータの情報が入ってくるのでget(“body”)で取得できます。

public class EventHandler implemented RequestParamter<Map<String,Object>, String>{

    public String handleRequest(Map<String,Object> input, Context context){
        // リクエストパラメータの取得
        String body = input.get("body").toString();
        // これ以降はbodyの情報から必要なものを取得する
        ・・・
    }
}

あとは、bodyの値をマッピングライブラリなどを利用し、Beanオブジェクトに格納し値を扱うことができます。

開発生産性

ここまでの記載の通り、JavaでLambdaを作成するには、ローカルでプログラムを修正しデプロイモジュールを作成する必要があります。そのため、Pythonなどのインタプリタ型言語と比べて生産性が悪いと個人的に感じてます。

また、Lambdaの仕組み上、初回アクセス時にコンテナを起動しモジュールをコンテナ上にデプロイする初期化処理が実行されます。javaの場合だとデプロイモジュールの展開に時間がかかるため、Pythonと比較して初回のアクセス時に時間がかかります。

上記理由のため、筆者的にはLambdaを利用する場合は、JavaではなくPythonやNodejsを利用することを推奨します。

まとめ

JavaでLambdaを作成する方法のまとめ

本記事ではJavaでAWS Lambdaを作成する方法について紹介しました。

実際に使ってみるとドキュメント上では読み取れないことが発見できました。JavaでLambdaを作成するには、ローカルでデプロイモジュールを作成しなければならなかったり、デプロイ後の初回アクセス時に時間がかかったりと、筆者的には推奨する言語にはなりませんでした。

皆様の参考になりましたら幸いです。

この記事を書いた人
z_a_k_i

z_a_k_iと申します。

富山でITエンジニアとして働いています。
0歳児と3歳児を持つ30代メンズです。

このブログでは、以下の内容を紹介しています。

 ⚫︎アプリケーション開発
 ⚫︎富山県の情報発信

皆様に役立つ内容を紹介できるよう精進していきますので、
どうぞよろしくお願いします。

z_a_k_iをフォローする
awsアプリケーション開発

コメント