この記事では、AWSのサーバーレスサービスであるLambdaプログラムをJava言語で作成する方法を紹介します。
- JavaでLambdaを作って公開するまでの手順が知りたい。
- LambdaをJavaで作る場合のプログラムを解説してほしい。
- LambdaをJavaでつくるのは評判はわるいけど実際のところどうなの?
インターネット上では、PythonやNode.jsでLambdaを作成されている例はよくあります。
一方で、JavaでLambdaを作成されている情報は多くありません。
この理由として、LambdaはPythoinやNode.jsといったインタプリタ型言語と相性がよい一方で、Javaのようなコンパイル型言語と相性が悪いためです。
しかし、案件によっては要員のスキルセットの関係などで、Lambda開発をJavaでしなければならないこともあります。
そこでこの記事では、LambdaをJavaで作成する方法をまとめました。
開発のための環境構築方法から、実際のプログラム開発やデプロイ方法、開発する際の注意点に至るまで紹介しています。
これからJavaでLambdaを開発する際に役立つ情報となっていますので、ぜひご覧ください。
AWS Lambdaとは
Lambdaとは、AWSが提供しているサーバーレスでプログラムを実行できるサービスです。
マイクロサービスのプログラムを構築する際に利用されます。
サーバーやミドルウェアを用意せずにプログラムを実行させること。
Lambdaを利用する場合のメリットはこちらです。
- サーバーやミドルウェアの管理が不要
- サーバーやミドルウェアの準備や設定が不要で、すぐにプログラム開発ができる
- サーバーやミドルウェアの深い知識がなくてもプログラムを開発できる
- サーバの脆弱性のパッチ対応、ミドルウェアの脆弱性のパッチ対応が不要(AWSが実施)
Lambdaを利用しない場合は、プログラムを動かすまでにサーバーの設定作業が必要となります。
具体的には以下の作業が必要になります。
- プログラムを動かすためのサーバの準備
- サーバーOSのパラメータ設定
- サーバ上にミドルウェアをインストール
- ミドルウェアのパラメータ設定
これらの作業を実施しなければ、プログラムを実行させることができません。
サーバーレスサービスのLambdaを利用することで、これらの作業を行わずにすぐにプログラムを実行させることができます。
Lambdaについて詳しく知りたい方は、AWS公式の「AWS Lambda 開発者ガイド」をご覧ください。
開発環境の構築
LambdaをJavaで開発するためには、以下の三つのステップで環境を構築します。
- Step1JDKのインストール
- Step2Eclipseのインストール
- Step3Mavenのインストール
JDKのインストール
開発言語であるJavaをインストールします。
AWSで実行されるJavaはAmazon CorretoなのでCorretoをインストールします。
「AWS公式サイト」ページの手順に沿ってダウンロードしインストールしてください。
Eclipseのインストール
開発を効率的に進めるJavaの統合環境です。
Eclipseの公式サイトからダウンロードしインストールしてください。
Mavenのインストール
自動ビルドツールです。Lambdaモジュールを作成するのに利用します。
ApacheのMaven公式サイトからダウンロードしインストールしてください。
ターミナルで以下コマンドを実行します。
brew install mavenJavaの開発時によく利用される自動ビルドツールです。似たものでgradleがあります。
コマンドでライブラリの依存関係の解決やビルドモジュールの作成ができ、昨今の開発では必須の知識となっています。
LambdaをJavaで作成する手順
LamdbaをJavaで作成するステップはこちらの三つです。
- Step1ローカルでLambdaプログラムの作成
PythonやNode.jsの場合は、AWSコンソール上でプログラムを記述できますが、Javaはできません。
- Step2mavenコマンドでビルドモジュール作成
Javaはコンパイル型言語のため、ローカルでビルドモジュールの作成が必要です。
- Step3AWSにデプロイ
Step2でビルドしたモジュールをアップロードします。
順番に解説していきます。
ローカルでLamdbaプログラムの作成
ローカルでLamdbaプログラムを作成していきます。
プロジェクトの作成
eclipse上でMavenプロジェクトで作成します。
Lambdaプログラムの作成
Lambdaプログラムを作成します。
今回作成するプログラムは、リクエストパラメータから「name」を取得し、コンソールに表示します。
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import java.util.Map;
public class HelloWorldLambda implements RequestHandler<Map<String, String>, String> {
@Override
public String handleRequest(Map<String, String> input, Context context) {
String name = input.get("name");
System.out.println("Hello World!!");
return "Hello, " + name;
}
}
AWSコンソール上でエントリポイントを変更できます。
デフォルトでは「Hello」クラスの「handleReques」であるため、今回もそれを利用します。

mavenコマンドでビルドモジュールの作成
maveで以下コマンドを実行し、ビルドモジュールを作成します。
mvn build packageビルドが成功すると以下のようにjarファイルが作成されます。

これがビルドモジュールとなります。
Lambdaのデプロイ
作成したビルドモジュールをデプロイします。
上で作成したjarファイルをAWSマネジメントコンソールでアップロードします。

以上で、Lambdaのデプロイは完了です。
動作確認
デプロイされたLambdaの動作を確認します。
AWSマネジメントコンソールからLambdaを実行して確認します。テストタブから「テスト」をクリックします。

今回作成したLamdbaは「name」を受け取るため、イベントJSONにnameを指定します。
以下のJSONです。
{
"name":"Yamada Taro"
}テストボタンをクリック後、結果が成功すれば正常に動作することが確認完了です。
LambdaをJavaで作成する時の注意点
開発生産性が悪い
JavaはPythonやNode.jsなどと違い、AWSコンソール上でプログラムの編集ができません。
少しの修正でもローカルでプログラムを修正しデプロイしなければいけません。そのため、Pythonなどのインタプリタ型言語と比べて生産性が悪いと個人的に感じてます。特に、動作検証中は高頻度でプログラムの書き換えと検証を行うため、生産性の悪さが顕著になります。
初回起動に時間がかかる
Lambdaは、初回アクセス時にコンテナが起動し、モジュールをコンテナ上にデプロイする初期化処理が実行されます。モジュールデプロイ前にコンパイル、ライブラリのダウンロード処理が実行されるため、初回起動に時間がかかります。
高頻度でアクセスされる処理の場合は、Lambdaのコンテナが破棄されないため、このような問題は発生しませんが、低頻度で実行される処理の場合はこの問題を解決する必要があります。
これは、PythonやNode.jsではこの問題を考慮しなくて良く、Java固有の事象となります。
上記理由のため、筆者的にはLambdaを利用する場合は、JavaではなくPythonやNodejsを利用することを推奨します。
まとめ
- コンパイル型のJavaでもLambdaは作成できる
- pythonやNode.jsと違いAWSマネジメントコンソール上でプログラムを修正できない
- Lambdaの性質上、プログラムの初回起動に時間がかかることに注意する
LambdaをJavaで作成するには、ローカルでデプロイモジュールを作成しなければならなかったり、デプロイ後の初回アクセス時に時間がかかったりと、考慮する点がいくつかあります。
PythonやNode.jsではこのような問題を気にする必要はないため、筆者的にはLambdaを開発する時には向いている言語ではないと感じました。
本記事が皆様の参考になりましたら幸いです。
関連記事:【AWS Lambda】VPCのPrivateSubnetからS3にアクセスする



コメント